From 24bd241ebe0a66c30f48b7fe14851f0627a8238c Mon Sep 17 00:00:00 2001 From: LockedLunatic Date: Sat, 25 Jun 2016 23:57:43 +0200 Subject: [PATCH] levers, doors and time revinding now work together properly --- Weave/Scene/Door.cpp | 26 +++++++++++++++++++++----- Weave/Scene/Door.h | 1 + Weave/Scene/Lever.cpp | 9 --------- Weave/Scene/Scene.cpp | 10 +++++++++- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/Weave/Scene/Door.cpp b/Weave/Scene/Door.cpp index 17ec718..5a30388 100644 --- a/Weave/Scene/Door.cpp +++ b/Weave/Scene/Door.cpp @@ -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; } diff --git a/Weave/Scene/Door.h b/Weave/Scene/Door.h index 70de4c4..ae8830d 100644 --- a/Weave/Scene/Door.h +++ b/Weave/Scene/Door.h @@ -16,6 +16,7 @@ public: void setup(float angle, vec3 axis, float _duration); void trigger(); void reverseTrigger(); + void reverseSpeed(); protected: mat4 original; diff --git a/Weave/Scene/Lever.cpp b/Weave/Scene/Lever.cpp index 0ce93d0..9d96570 100644 --- a/Weave/Scene/Lever.cpp +++ b/Weave/Scene/Lever.cpp @@ -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 diff --git a/Weave/Scene/Scene.cpp b/Weave/Scene/Scene.cpp index a0ca119..5a51e35 100644 --- a/Weave/Scene/Scene.cpp +++ b/Weave/Scene/Scene.cpp @@ -644,11 +644,19 @@ void Scene::revertEvent(TimeEvent e) break; case 3: - //Door triggered + //Door finished if (Door* l = dynamic_cast (e.object)) { l->reverseTrigger(); } break; + + case 4: + //Door triggered before it was finished + if (Door* l = dynamic_cast (e.object)) + { + l->reverseSpeed(); + } + break; } } \ No newline at end of file -- 2.47.3