]> git.leopard-lacewing.eu Git - cgue_weave.git/commitdiff
levers, doors and time revinding now work together properly
authorLockedLunatic <locked.lunatic@aon.at>
Sat, 25 Jun 2016 21:57:43 +0000 (23:57 +0200)
committerLockedLunatic <locked.lunatic@aon.at>
Sat, 25 Jun 2016 21:57:43 +0000 (23:57 +0200)
Weave/Scene/Door.cpp
Weave/Scene/Door.h
Weave/Scene/Lever.cpp
Weave/Scene/Scene.cpp

index 17ec7187e4a1d71ce54fe651809369942d8e908d..5a303884cb1b5b676d0f4de4db026d89058f20f9 100644 (file)
@@ -27,11 +27,6 @@ void Door::setup(float _angle, vec3 _axis, float _duration)
 
 void Door::trigger()
 {
-       if (!timeresistant)
-       {
-               mainScene->addEvent(this, 3);
-       }
-
        if (speed == 0)
        {
                if (time == 0)
@@ -46,6 +41,11 @@ void Door::trigger()
        else
        {
                speed = -speed;
+
+               if (!timeresistant)
+               {
+                       mainScene->addEvent(this, 4);
+               }
        }
 }
 
@@ -64,20 +64,36 @@ void Door::reverseTrigger()
        }
        else
        {
+               //this should never happen
                speed = -speed;
        }
 }
 
+void Door::reverseSpeed()
+{
+       speed = -speed;
+}
+
 void Door::update(float deltaT)
 {
        time = time + speed * deltaT;
        if (time < 0)
        {
+               if (!timeresistant && deltaT > 0)
+               {
+                       mainScene->addEvent(this, 3);
+               }
+
                time = 0;
                speed = 0;
        }
        if (time > duration)
        {
+               if (!timeresistant && deltaT > 0)
+               {
+                       mainScene->addEvent(this, 3);
+               }
+
                time = duration;
                speed = 0;
        }
index 70de4c4dcec3e4c4ebcc932981a9dbd99674acc7..ae8830d226d22a95f62f143409cba3801f13be17 100644 (file)
@@ -16,6 +16,7 @@ public:
        void setup(float angle, vec3 axis, float _duration);
        void trigger();
        void reverseTrigger();
+       void reverseSpeed();
 
 protected:
        mat4 original;
index 0ce93d05ba282120a931d2ef14791e869e49985d..9d96570460441b5b514811a76c3b3457d12053e7 100644 (file)
@@ -56,13 +56,4 @@ void Lever::trigger()
 void Lever::reverseTrigger()
 {
        turned = !turned;
-
-       if (turned)
-       {
-               this->startanimation((uint)0, -1.0f);
-       }
-       else
-       {
-               this->startanimation((uint)0, 1.0f);
-       }
 }
\ No newline at end of file
index a0ca119106d018fdbddf576f667221aedc3b7566..5a51e353c2113a8cfd44a4f49e3cddf9c37d56d7 100644 (file)
@@ -644,11 +644,19 @@ void Scene::revertEvent(TimeEvent e)
                break;
 
        case 3:
-               //Door triggered
+               //Door finished
                if (Door* l = dynamic_cast<Door*> (e.object))
                {
                        l->reverseTrigger();
                }
                break;
+
+       case 4:
+               //Door triggered before it was finished
+               if (Door* l = dynamic_cast<Door*> (e.object))
+               {
+                       l->reverseSpeed();
+               }
+               break;
        }
 }
\ No newline at end of file