]> git.localhorst.tv Git - l2e.git/blobdiff - src/map/Entity.cpp
added entity orientation awareness
[l2e.git] / src / map / Entity.cpp
index c14c9a0e7321a25b43e5fa64875545c3be974dd5..0e1b822ba32256e920e4767051a5e8f68fbecaec 100644 (file)
@@ -12,11 +12,46 @@ using geometry::Vector;
 namespace map {
 
 Entity::Entity()
-: sprite(0) {
+: sprite(0)
+, orientation(ORIENTATION_NORTH)
+, speed(0) {
 
 }
 
 
+void Entity::SetOrientation(Orientation o) {
+       orientation = o;
+       UpdateVelocity();
+       animation.SetColOffset(orientation);
+}
+
+void Entity::SetSpeed(float s) {
+       speed = s;
+       UpdateVelocity();
+}
+
+void Entity::UpdateVelocity() {
+       if (speed == 0.0f) {
+               velocity = Vector<float>();
+               return;
+       }
+       switch (orientation) {
+               case ORIENTATION_NORTH:
+                       velocity = Vector<float>(0.0f, -speed);
+                       break;
+               case ORIENTATION_EAST:
+                       velocity = Vector<float>(speed, 0.0f);
+                       break;
+               case ORIENTATION_SOUTH:
+                       velocity = Vector<float>(0.0f, speed);
+                       break;
+               case ORIENTATION_WEST:
+                       velocity = Vector<float>(-speed, 0.0f);
+                       break;
+       }
+}
+
+
 bool Entity::TileLock(int width, int height) const {
        Vector<int> tilePosition(
                        position.X() - (width / 2),
@@ -34,7 +69,7 @@ void Entity::Render(SDL_Surface *dest, const Vector<int> &offset) const {
        if (animation.Running()) {
                animation.DrawCenterBottom(dest, offset + position);
        } else {
-               sprite->DrawCenterBottom(dest, offset + position);
+               sprite->DrawCenterBottom(dest, offset + position, orientation);
        }
 }