]> git.localhorst.tv Git - l2e.git/blobdiff - src/map/Entity.cpp
switched geometric scalars from floating to fixed
[l2e.git] / src / map / Entity.cpp
index fd2cc686787d3474054462be551812ffe9f07ee8..93530f142735021f063f8dab333f66d694680f51 100644 (file)
@@ -11,6 +11,7 @@ using battle::Monster;
 using battle::PartyLayout;
 using graphics::Animation;
 using graphics::Sprite;
+using math::Fixed;
 using math::Vector;
 using loader::FieldDescription;
 using loader::Interpreter;
@@ -40,7 +41,7 @@ void Entity::SetOrientation(Orientation o) {
        }
 }
 
-void Entity::SetSpeed(float s) {
+void Entity::SetSpeed(Fixed<8> s) {
        speed = s;
        UpdateVelocity();
 }
@@ -98,22 +99,22 @@ void Entity::SetAnimation(const graphics::Animation *a) {
 
 
 void Entity::UpdateVelocity() {
-       if (speed == 0.0f) {
-               velocity = Vector<float>();
+       if (speed == 0) {
+               velocity = Vector<Fixed<8> >();
                return;
        }
        switch (orientation) {
                case ORIENTATION_NORTH:
-                       velocity = Vector<float>(0.0f, -speed);
+                       velocity = Vector<Fixed<8> >(0, -speed);
                        break;
                case ORIENTATION_EAST:
-                       velocity = Vector<float>(speed, 0.0f);
+                       velocity = Vector<Fixed<8> >(speed, 0);
                        break;
                case ORIENTATION_SOUTH:
-                       velocity = Vector<float>(0.0f, speed);
+                       velocity = Vector<Fixed<8> >(0, speed);
                        break;
                case ORIENTATION_WEST:
-                       velocity = Vector<float>(-speed, 0.0f);
+                       velocity = Vector<Fixed<8> >(-speed, 0);
                        break;
        }
 }
@@ -121,12 +122,12 @@ void Entity::UpdateVelocity() {
 
 bool Entity::TileLock(const math::Vector<int> &tileSize) const {
        // TODO: change position to point to the top-left corner of a tile
-       Vector<int> tilePosition(position);
+       Vector<int> tilePosition(ToInt(position));
        return (tilePosition.X() % tileSize.X() == 0) && (tilePosition.Y() % tileSize.Y() == 0);
 }
 
 
-void Entity::Update(float deltaT) {
+void Entity::Update(Uint32 deltaT) {
        position += velocity * deltaT;
 }
 
@@ -134,9 +135,9 @@ void Entity::Update(float deltaT) {
 void Entity::Render(SDL_Surface *dest, const Vector<int> &offset) const {
        // TODO: configurable sprite offsets
        if (runner.Running()) {
-               runner.Draw(dest, offset + position + spriteOffset);
+               runner.Draw(dest, offset + ToInt(position) + spriteOffset);
        } else {
-               sprite->Draw(dest, offset + position + spriteOffset, CanTurn() ? orientation : 0);
+               sprite->Draw(dest, offset + ToInt(position) + spriteOffset, CanTurn() ? orientation : 0);
        }
 }