-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscene.cpp
79 lines (68 loc) · 2.06 KB
/
scene.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include "scene.hpp"
#include <OgreSceneNode.h>
#include <cstdlib> //sscanf http://stackoverflow.com/questions/14755484/stoi-and-stdto-string-on-mingw-4-7-1
Scene::Scene(boost::property_tree::basic_ptree<std::string, std::string>& propertyTree):isCollisionSwitchStillOn(false), isActive(true)
{
for(auto property : propertyTree) //std::pair<string,basic_ptree>
if(property.first=="ObjectA")
ObjectA=Object(property.second.data(),Ogre::Vector3(-2,0,0));
else if(property.first=="ObjectB")
ObjectB=Object(property.second.data(),Ogre::Vector3(2,0,0),false);
else if(property.first=="DistanceSquared")
sscanf(property.second.data().c_str(), "%f", &DistanceSquared);
}
void Scene::CheckSceneCollision()
{
bool collision;
Ogre::Vector3 positionA=ObjectA.Node->_getDerivedPosition();
Ogre::Vector3 positionB=ObjectB.Node->_getDerivedPosition();
if(positionA.squaredDistance(positionB)-DistanceSquared<0.1)
collision=true;
else
collision=false;
if(collision!=isCollisionSwitchStillOn)
{
isCollisionSwitchStillOn=collision;
emit(ObjectsCollisionInSceneChanged(collision));
}
}
void Scene::SetInactive()
{
ObjectA.Node->setVisible(false);
ObjectA.Node->showBoundingBox(false);
ObjectB.Node->setVisible(false);
ObjectB.Node->showBoundingBox(false);
isActive=false;
}
void Scene::SetActive()
{
ObjectA.Node->setVisible(true);
ObjectA.Node->showBoundingBox(true);
ObjectB.Node->setVisible(true);
ObjectB.Node->showBoundingBox(true);
isActive=true;
}
const bool Scene::IsActive() const
{
return isActive;
}
void Scene::Tick(unsigned long delta)
{
ObjectA.Move(delta);
ObjectB.Move(delta);
Ogre::Vector3 positionA=ObjectA.Node->_getDerivedPosition();
if(positionA.x>0)
{
ObjectA.Node->setPosition(0,0,0);
ObjectB.Node->setPosition(0,0,0);
ObjectA.FlipMoveVector();
ObjectB.FlipMoveVector();
}
if(positionA.x<-2)
{
ObjectA.Node->setPosition(-2,0,0);
ObjectB.Node->setPosition(2,0,0);
ObjectA.FlipMoveVector();
ObjectB.FlipMoveVector();
}
}