• R/O
  • SSH

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

Revision3b3df6e74988772308f46e5407407b22c12bae91 (tree)
Time2016-10-04 03:23:53
Authorsebastian_ <bugiu@head...>
Commitersebastian_

Log Message

Added gate control.

Change Summary

Incremental Difference

diff -r 3eb1fe4e1a7b -r 3b3df6e74988 Classes/EventProperties.h
--- a/Classes/EventProperties.h Sun Oct 02 23:46:03 2016 +0300
+++ b/Classes/EventProperties.h Mon Oct 03 21:23:53 2016 +0300
@@ -13,7 +13,12 @@
1313 bool collided = false;
1414
1515 public:
16- EventProperties(std::unique_ptr<GameEvent::Event> event_) : event(std::move(event_))
16+// EventProperties(std::unique_ptr<GameEvent::Event> event_) : event(std::move(event_))
17+// {
18+//
19+// }
20+
21+ EventProperties(std::shared_ptr<GameEvent::Event> event_) : event(event_)
1722 {
1823
1924 }
diff -r 3eb1fe4e1a7b -r 3b3df6e74988 Classes/GameScene.cpp
--- a/Classes/GameScene.cpp Sun Oct 02 23:46:03 2016 +0300
+++ b/Classes/GameScene.cpp Mon Oct 03 21:23:53 2016 +0300
@@ -169,9 +169,22 @@
169169 // We need the playerEntity to create the level.
170170 auto currentLevelStr = std::string("lvl") + std::string(std::to_string(currentLevel));
171171 std::string levelImage = currentLevelStr + ".png";
172- std::string levelClc = currentLevelStr + "_map.clc";
172+ std::vector<std::string> clcs;
173+ if (currentLevel == 6 || currentLevel == 8)
174+ {
175+ std::string levelClcClosed = currentLevelStr + "_map_closed.clc";
176+ std::string levelClcOpened = currentLevelStr + "_map_opened.clc";
177+ clcs.push_back(levelClcClosed);
178+ clcs.push_back(levelClcOpened);
179+ }
180+ else
181+ {
182+ std::string levelClc = currentLevelStr + "_map.clc";
183+ clcs.push_back(levelClc);
184+ }
185+
173186 std::string levelCfg = currentLevelStr + "_cfg";
174- auto levelPtr = loadLevel(levelImage, levelClc, levelCfg, *world, *this);
187+ auto levelPtr = loadLevel(levelImage, clcs, levelCfg, *world, *this);
175188
176189 auto& level = world->createEntity();
177190 level.addComponent(new LevelProperties(levelPtr, halfVisibleSize));
diff -r 3eb1fe4e1a7b -r 3b3df6e74988 Classes/GateChange.cpp
--- a/Classes/GateChange.cpp Sun Oct 02 23:46:03 2016 +0300
+++ b/Classes/GateChange.cpp Mon Oct 03 21:23:53 2016 +0300
@@ -1,9 +1,16 @@
11 #include "GateChange.h"
22
3-GateChangeEvent::GateChangeEvent(artemis::World& world_): Event(world_)
3+GateChangeEvent::GateChangeEvent(artemis::World& world_, artemis::Entity& entity_, artemis::Entity& gateControlEntity_)
4+ : GenericBitmapChangeEvent(world_, entity_), gateControlEntity(gateControlEntity_)
45 {
56 }
67
78 void GateChangeEvent::operator()()
89 {
10+// auto eventProperties = eventPropertiesMapper.get(entity);
11+ auto gateControlEventProperties = eventPropertiesMapper.get(gateControlEntity);
12+ if (gateControlEventProperties->getEventDone())
13+ {
14+ GenericBitmapChangeEvent::operator()();
15+ }
916 }
diff -r 3eb1fe4e1a7b -r 3b3df6e74988 Classes/GateChange.h
--- a/Classes/GateChange.h Sun Oct 02 23:46:03 2016 +0300
+++ b/Classes/GateChange.h Mon Oct 03 21:23:53 2016 +0300
@@ -1,12 +1,14 @@
11 #ifndef _GATE_CHANGE_H_
22 #define _GATE_CHANGE_H_
3-#include "Event.h"
3+#include "GenericBitmapChange.h"
44
5-class GateChangeEvent : public GameEvent::Event
5+class GateChangeEvent : public GenericBitmapChangeEvent
66 {
7+private:
8+ artemis::Entity& gateControlEntity;
79 public:
810
9- explicit GateChangeEvent(artemis::World& world_);
11+ explicit GateChangeEvent(artemis::World& world_, artemis::Entity& entity_, artemis::Entity& gateControlEntity_);
1012
1113 void operator()() override;
1214 };
diff -r 3eb1fe4e1a7b -r 3b3df6e74988 Classes/GateControl.cpp
--- a/Classes/GateControl.cpp Sun Oct 02 23:46:03 2016 +0300
+++ b/Classes/GateControl.cpp Mon Oct 03 21:23:53 2016 +0300
@@ -1,11 +1,22 @@
11 #include "GateControl.h"
22
3-GateControlEvent::GateControlEvent(artemis::World& world_)
4- : Event(world_)
3+GateControlEvent::GateControlEvent(artemis::World& world_, Level& level_, artemis::Entity& entity_)
4+ : Event(world_), level(level_), entity(entity_)
55 {
6+// entityPropertiesMapper.init(world);
7+ eventPropertiesMapper.init(world);
8+// timedEventPropertiesMapper.init(world);
69 }
710
811 void GateControlEvent::operator()()
912 {
13+// auto entityProperties = entityPropertiesMapper.get(entity);
14+ auto eventProperties = eventPropertiesMapper.get(entity);
15+// auto timedEventProperties = timedEventPropertiesMapper.get(entity);
1016
17+ if (!eventProperties->getEventDone())
18+ {
19+ level.setCurentCollisionSet(1);
20+ eventProperties->setEventDone(true);
21+ }
1122 }
diff -r 3eb1fe4e1a7b -r 3b3df6e74988 Classes/GateControl.h
--- a/Classes/GateControl.h Sun Oct 02 23:46:03 2016 +0300
+++ b/Classes/GateControl.h Mon Oct 03 21:23:53 2016 +0300
@@ -1,13 +1,22 @@
11 #ifndef _GATE_CONTROL_H_
22 #define _GATE_CONTROL_H_
33 #include "Event.h"
4-#include <memory>
4+#include "Level.h"
5+//#include "TimedEventProperties.h"
6+//#include "EntityProperties.h"
7+#include "EventProperties.h"
8+#include "artemis/src/Artemis/ComponentMapper.h"
59
610 class GateControlEvent : public GameEvent::Event
711 {
812 private:
13+ Level& level;
14+ artemis::Entity& entity;
15+// artemis::ComponentMapper<EntityProperties> entityPropertiesMapper;
16+ artemis::ComponentMapper<EventProperties> eventPropertiesMapper;
17+// artemis::ComponentMapper<TimedEventProperties> timedEventPropertiesMapper;
918 public:
10- explicit GateControlEvent(artemis::World& world_);
19+ explicit GateControlEvent(artemis::World& world_, Level& level_, artemis::Entity& entity_);
1120
1221 void operator()() override;
1322
diff -r 3eb1fe4e1a7b -r 3b3df6e74988 Classes/GenericBitmapChange.h
--- a/Classes/GenericBitmapChange.h Sun Oct 02 23:46:03 2016 +0300
+++ b/Classes/GenericBitmapChange.h Mon Oct 03 21:23:53 2016 +0300
@@ -14,7 +14,7 @@
1414
1515 class GenericBitmapChangeEvent : public GameEvent::Event
1616 {
17-private:
17+protected:
1818 artemis::Entity& entity;
1919 artemis::ComponentMapper<EntityProperties> entityPropertiesMapper;
2020 artemis::ComponentMapper<EventProperties> eventPropertiesMapper;
diff -r 3eb1fe4e1a7b -r 3b3df6e74988 Classes/Level.cpp
--- a/Classes/Level.cpp Sun Oct 02 23:46:03 2016 +0300
+++ b/Classes/Level.cpp Mon Oct 03 21:23:53 2016 +0300
@@ -13,6 +13,7 @@
1313 #include "EventList.h"
1414 #include "GenericBitmapChange.h"
1515 #include "TimedEvent.h"
16+#include "GateChange.h"
1617
1718 USING_NS_CC;
1819
@@ -132,7 +133,7 @@
132133 else
133134 {
134135 // We have a rotation in coords.y
135- sprite->setRotation(coords.y);
136+ sprite->setRotation(getRotationFromFileFormat(coords.y));
136137 }
137138 entity.addComponent(entityProperties);
138139 auto powerupProperties = new PowerupProperties(type);
@@ -188,6 +189,14 @@
188189 auto& entity = world.createEntity();
189190 auto entityProperties = new EntityProperties(*sprite);
190191 entityProperties->setMapPos(Vec2(coords.x, coords.y));
192+ if (vec.size() == 2)
193+ {
194+ if (vec[1].x == -1)
195+ {
196+ // We also have a rotation.
197+ sprite->setRotation(getRotationFromFileFormat(vec[1].y));
198+ }
199+ }
191200 entity.addComponent(entityProperties);
192201 std::unique_ptr<GameEvent::Event> genericBitmapChange(new GenericBitmapChangeEvent(world, entity));
193202 std::unique_ptr<EventList> events(new EventList(world));
@@ -210,6 +219,71 @@
210219 return genericBitmapChangeList;
211220 }
212221
222+std::vector<std::reference_wrapper<artemis::Entity>> Level::createBoilerConsoleList()
223+{
224+ std::vector<std::reference_wrapper<artemis::Entity>> boilerAndConsoleList;
225+ auto pair = coordsMap.find(BOILER_CONSOLE);
226+ if (pair != coordsMap.end())
227+ {
228+
229+ }
230+ return boilerAndConsoleList;
231+}
232+
233+std::vector<std::reference_wrapper<artemis::Entity>> Level::createGateList()
234+{
235+ std::vector<std::reference_wrapper<artemis::Entity>> gateAndGateControlList;
236+ auto pair = coordsMap.find(GATE);
237+ if (pair != coordsMap.end())
238+ {
239+ for (auto& vec : pair->second)
240+ {
241+ auto gatePosCoords = vec[0];
242+ auto gateControlPosCoords = vec[1];
243+
244+ auto gateSprite = Sprite::createWithSpriteFrameName("gate.png");
245+ auto& gateEntity = world.createEntity();
246+ auto gateEntityProperties = new EntityProperties(*gateSprite);
247+ gateEntityProperties->setMapPos(Vec2(gatePosCoords.x, gatePosCoords.y));
248+ gateEntity.addComponent(gateEntityProperties);
249+
250+ auto gateControlSprite = Sprite::createWithSpriteFrameName("gate_control.png");
251+ auto& gateControlEntity = world.createEntity();
252+ auto gateControlEntityProperties = new EntityProperties(*gateControlSprite);
253+ gateControlEntityProperties->setMapPos(Vec2(gateControlPosCoords.x, gateControlPosCoords.y));
254+ gateControlEntity.addComponent(gateControlEntityProperties);
255+
256+ std::shared_ptr<GameEvent::Event> gateBitmapChange(new GateChangeEvent(world, gateEntity, gateControlEntity));
257+ std::unique_ptr<GameEvent::Event> gateControlBitmapChange(new GenericBitmapChangeEvent(world, gateControlEntity));
258+ std::unique_ptr<EventList> events(new EventList(world));
259+
260+ events->addEvent(gateBitmapChange);
261+ events->addEvent(std::move(gateControlBitmapChange));
262+
263+ std::unique_ptr<GameEvent::TimedEvent> timedEvent(new GameEvent::TimedEvent(world, gateEntity, std::move(events)));
264+
265+ auto gateEventProperties = new EventProperties(gateBitmapChange);
266+ auto gateTimedEventProperties = new TimedEventProperties();
267+ gateTimedEventProperties->setBrokenBitmap("gate_opened.png");
268+ gateEntity.addComponent(gateEventProperties);
269+ gateEntity.addComponent(gateTimedEventProperties);
270+ gateEntity.refresh();
271+
272+ auto gateControlEventProperties = new EventProperties(std::move(timedEvent));
273+ auto gateControlTimedEventProperties = new TimedEventProperties();
274+ gateControlTimedEventProperties->setTotalCollidingTime(1000);
275+ gateControlTimedEventProperties->setBrokenBitmap("gate_control_opened.png");
276+ gateControlEntity.addComponent(gateControlEventProperties);
277+ gateControlEntity.addComponent(gateControlTimedEventProperties);
278+ gateControlEntity.refresh();
279+
280+ gateAndGateControlList.push_back(std::reference_wrapper<artemis::Entity>(gateEntity));
281+ gateAndGateControlList.push_back(std::reference_wrapper<artemis::Entity>(gateControlEntity));
282+ }
283+ }
284+ return gateAndGateControlList;
285+}
286+
213287 void Level::extractBeginAndEndPositions()
214288 {
215289 auto beginningPosCoords = coordsMap.find(BEGINNING_POS)->second[0][0];
@@ -232,6 +306,8 @@
232306 auto assemblyLineList = createGenericBitmapChangeList(ASSEMBLY_);
233307 auto waterCollerList = createGenericBitmapChangeList(WATER_COOLER_);
234308
309+ auto gateAndGateControlList = createGateList();
310+
235311 addToScene(fileList);
236312 addToScene(foodList);
237313 addToScene(pinkSlipList);
@@ -244,6 +320,8 @@
244320 addToScene(assemblyLineList);
245321 addToScene(waterCollerList);
246322
323+ addToScene(gateAndGateControlList);
324+
247325 extractBeginAndEndPositions();
248326
249327 auto endConditions = coordsMap.find(COND_END)->second[0];
@@ -261,8 +339,8 @@
261339 }
262340 }
263341
264-Level::Level(cocos2d::Sprite& _map, CollisionSet _collisionSet, CoordsMap _coordsMap, artemis::World& world_, GameScene& gameScene_) :
265- map(_map), collisionSet(std::move(_collisionSet)), coordsMap(std::move(_coordsMap)), world(world_), gameScene(gameScene_)
342+Level::Level(cocos2d::Sprite& _map, std::vector<CollisionSet> collisionSetList_, CoordsMap _coordsMap, artemis::World& world_, GameScene& gameScene_) :
343+ map(_map), collisionSetList(std::move(collisionSetList_)), coordsMap(std::move(_coordsMap)), world(world_), gameScene(gameScene_)
266344 {
267345 extractDataFromCoordsMap();
268346
@@ -282,8 +360,8 @@
282360 unsigned int currentBottom = ((short)currentX) << 16 | ((short)rightLowerCorner.y);
283361 for (unsigned int i = 0; i < iterCount; ++i)
284362 {
285- CollisionSet::iterator xy1It = collisionSet.lower_bound(currentTop);
286- CollisionSet::iterator xy2It = collisionSet.upper_bound(currentBottom);
363+ CollisionSet::iterator xy1It = collisionSetList[curentCollisionSet].lower_bound(currentTop);
364+ CollisionSet::iterator xy2It = collisionSetList[curentCollisionSet].upper_bound(currentBottom);
287365
288366 unsigned int leftX = (*xy1It) >> 16;
289367 unsigned int leftY = (*xy1It) & 0xffff;
@@ -444,18 +522,25 @@
444522 return false;
445523 }
446524
447-LevelPtr loadLevel(std::string levelFile, std::string levelCollisionDataFile, std::string levelConfig, artemis::World& world, GameScene& gameScene)
525+LevelPtr loadLevel(std::string levelFile, std::vector<std::string> clcs, std::string levelConfig, artemis::World& world, GameScene& gameScene)
448526 {
449527 auto mapSprite = Sprite::create(levelFile);
450528
451- CollisionSet collisionSet;
529+ std::vector<CollisionSet> collisionSetList;
530+
452531 LevelPtr value1;
453- if (getLevelCollisionData(levelCollisionDataFile, collisionSet, value1)) return value1;
532+ for (auto& levelCollisionDataFile : clcs)
533+ {
534+ CollisionSet collisionSet;
535+ if (getLevelCollisionData(levelCollisionDataFile, collisionSet, value1)) return value1;
536+ collisionSetList.push_back(std::move(collisionSet));
537+ }
538+
454539
455540 CoordsMap coordsMap;
456541 if (getLevelConfig(levelConfig, coordsMap, value1)) return value1;
457542
458- LevelPtr levelPtr(new Level(*mapSprite, collisionSet, coordsMap, world, gameScene));
543+ LevelPtr levelPtr(new Level(*mapSprite, collisionSetList, coordsMap, world, gameScene));
459544
460545 return levelPtr;
461546 }
diff -r 3eb1fe4e1a7b -r 3b3df6e74988 Classes/Level.h
--- a/Classes/Level.h Sun Oct 02 23:46:03 2016 +0300
+++ b/Classes/Level.h Mon Oct 03 21:23:53 2016 +0300
@@ -49,7 +49,7 @@
4949
5050 enum GenericBitmapEventType
5151 {
52- ASSEMBLY_, WATER_COOLER_
52+ ASSEMBLY_, WATER_COOLER_, BOILER_CONSOLE_, GATE_
5353 };
5454
5555 class Level
@@ -58,6 +58,8 @@
5858 GameScene& gameScene;
5959 cocos2d::Sprite& map;
6060 CollisionSet collisionSet;
61+ std::vector<CollisionSet> collisionSetList;
62+ unsigned int curentCollisionSet = 0;
6163 CoordsMap coordsMap;
6264 artemis::World& world;
6365 cocos2d::Vec2 beginningPos;
@@ -68,13 +70,15 @@
6870 std::vector<std::reference_wrapper<artemis::Entity>> createWorkerList(WorkerType type);
6971 std::vector<std::reference_wrapper<artemis::Entity>> createPowerupList(PowerupType type);
7072 std::vector<std::reference_wrapper<artemis::Entity>> createGenericBitmapChangeList(GenericBitmapEventType type);
73+ std::vector<std::reference_wrapper<artemis::Entity>> createBoilerConsoleList();
74+ std::vector<std::reference_wrapper<artemis::Entity>> createGateList();
7175 void extractBeginAndEndPositions();
7276 void extractDataFromCoordsMap();
7377 void addToScene(std::vector<std::reference_wrapper<artemis::Entity>>& spriteList);
7478
7579 public:
7680
77- Level(cocos2d::Sprite& map, CollisionSet _collisionSet, CoordsMap coordsMap, artemis::World& world, GameScene& gameScene);
81+ Level(cocos2d::Sprite& map, std::vector<CollisionSet> collisionSetList_, CoordsMap coordsMap, artemis::World& world, GameScene& gameScene);
7882
7983 bool checkCollisionCoarse(const cocos2d::Vec2& leftUpperCorner, const cocos2d::Vec2& rightLowerCorner);
8084
@@ -110,12 +114,23 @@
110114 {
111115 return endCondition;
112116 }
117+
118+
119+ unsigned getCurentCollisionSet() const
120+ {
121+ return curentCollisionSet;
122+ }
123+
124+ void setCurentCollisionSet(const unsigned curent_collision_set)
125+ {
126+ curentCollisionSet = curent_collision_set;
127+ }
113128 };
114129
115130 typedef std::unique_ptr<Level> LevelPtr;
116131 typedef std::shared_ptr<Level> LevelPtrShared;
117132
118-LevelPtr loadLevel(std::string levelFile, std::string levelCollisionDataFile, std::string levelConfig, artemis::World& world, GameScene& gameScene);
133+LevelPtr loadLevel(std::string levelFile, std::vector<std::string> clcs, std::string levelConfig, artemis::World& world, GameScene& gameScene);
119134
120135 #endif
121136
diff -r 3eb1fe4e1a7b -r 3b3df6e74988 Classes/MissionSelectionScene.cpp
--- a/Classes/MissionSelectionScene.cpp Sun Oct 02 23:46:03 2016 +0300
+++ b/Classes/MissionSelectionScene.cpp Mon Oct 03 21:23:53 2016 +0300
@@ -20,7 +20,7 @@
2020 labelMainMenu->setPosition(getMenuTitlePosition(*labelMainMenu));
2121 addChild(labelMainMenu, 1);
2222
23- int maxLevelReached = getMaxLevelReached();
23+ int maxLevelReached = 8;// getMaxLevelReached();
2424 std::vector<std::string> titleList;
2525 int titleStart = FIRST_LEVEL;
2626 for (int i = 0; i < maxLevelReached; ++i)
diff -r 3eb1fe4e1a7b -r 3b3df6e74988 Classes/Utility.cpp
--- a/Classes/Utility.cpp Sun Oct 02 23:46:03 2016 +0300
+++ b/Classes/Utility.cpp Mon Oct 03 21:23:53 2016 +0300
@@ -59,3 +59,19 @@
5959 {
6060 return pre + " x: " + std::to_string(vec.x) + " y: " + std::to_string(vec.y);
6161 }
62+
63+float getRotationFromFileFormat(int rotation)
64+{
65+ switch (rotation)
66+ {
67+ case 0:
68+ return 0.0f;
69+ case 1:
70+ return 90.0f;
71+ case 2:
72+ return 180.0f;
73+ case 3:
74+ return 270.0f;
75+ }
76+ return 0.0f;
77+}
diff -r 3eb1fe4e1a7b -r 3b3df6e74988 Classes/Utility.h
--- a/Classes/Utility.h Sun Oct 02 23:46:03 2016 +0300
+++ b/Classes/Utility.h Mon Oct 03 21:23:53 2016 +0300
@@ -38,5 +38,7 @@
3838
3939 std::string toString(Vec2 vec, std::string pre);
4040
41+float getRotationFromFileFormat(int rotation);
42+
4143 #endif
4244