OSDN Git Service

Added new OnHit function
authorryan <>
Fri, 18 Nov 2016 00:24:39 +0000 (00:24 +0000)
committerryan <>
Fri, 18 Nov 2016 00:24:39 +0000 (00:24 +0000)
src/sbs/camera.cpp
src/sbs/elevatordoor.cpp
src/sbs/elevatordoor.h
src/sbs/object.h

index fe9b124..e97cb86 100644 (file)
@@ -774,23 +774,7 @@ void Camera::Loop()
                        if (obj)
                        {
                                if (obj->GetParent())
-                               {
-                                       //check elevator doors (door bumpers feature)
-                                       ElevatorDoor::DoorWrapper *wrapper = dynamic_cast<ElevatorDoor::DoorWrapper*>(obj->GetParent());
-
-                                       if (wrapper)
-                                       {
-                                               ElevatorDoor* door = wrapper->parent;
-
-                                               //make sure both internal and external doors are closing
-                                               if (door->OpenDoor == -1 && door->GetWhichDoors() == 1)
-                                               {
-                                                       //either open doors if the hit door was an internal door or a shaft door on the elevator floor
-                                                       if (wrapper->IsShaftDoor == false || (wrapper->IsShaftDoor == true && wrapper->floor == door->car->GetFloor()))
-                                                               door->car->OpenDoors(door->Number, 1);
-                                               }
-                                       }
-                               }
+                                       obj->GetParent()->OnHit();
                        }
                }
        }
index a789780..0f7975d 100644 (file)
@@ -2076,6 +2076,19 @@ void ElevatorDoor::DoorWrapper::OnClick(Ogre::Vector3 &position, bool shift, boo
        }
 }
 
+void ElevatorDoor::DoorWrapper::OnHit()
+{
+       //check elevator doors (door bumpers feature)
+
+       //make sure both internal and external doors are closing
+       if (parent->OpenDoor == -1 && parent->GetWhichDoors() == 1)
+       {
+               //either open doors if the hit door was an internal door or a shaft door on the elevator floor
+               if (IsShaftDoor == false || (IsShaftDoor == true && floor == parent->car->GetFloor()))
+                       parent->car->OpenDoors(parent->Number, 1);
+       }
+}
+
 ElevatorDoor::DoorWrapper* ElevatorDoor::GetDoorWrapper()
 {
        //return door wrapper object
index 55068fb..3fbf320 100644 (file)
@@ -82,6 +82,7 @@ public:
                void StopDoors();
                void ResetState();
                void OnClick(Ogre::Vector3 &position, bool shift, bool ctrl, bool alt, bool right);
+               void OnHit();
 
                std::vector<DoorObject*> doors;
                std::string name;
index ddaf5aa..daeedb9 100644 (file)
@@ -97,6 +97,7 @@ public:
        virtual void OnRotate(bool parent) {} //called when object is rotated
        virtual void OnClick(Ogre::Vector3 &position, bool shift, bool ctrl, bool alt, bool right) {} //called when object is clicked on
        virtual void OnUnclick(bool right) {} //called when mouse is held and released on object
+       virtual void OnHit() {} //called when user hits/collides with object
        void NotifyMove(bool parent = false);
        void NotifyRotate(bool parent = false);
        virtual void ResetState() {} //resets the internal state of an object