OSDN Git Service

fix moflib2.0 build system
[moflib/moflib.git] / saisei-1.0 / rpg / rpg / oldcode / SymbolManager.cpp
1 #include "SymbolManager.h"\r
2 #include "MapImageColor.h"\r
3 #include "mof/Billboard.h"\r
4 #include "RandomSymbolController.h"\r
5 #include <math.h>\r
6 \r
7 et::SymbolManager::SymbolManager(mof::TextureManager* pTextureManager , et::DungeonBuilder* pMapBuilder)\r
8 {\r
9         m_pTextureManager = pTextureManager;\r
10         m_pMapBuilder = pMapBuilder;\r
11 }\r
12 \r
13 et::SymbolManager::~SymbolManager(void)\r
14 {\r
15         for(int i = 0 ; i < m_symbols.size() ; i++)delete m_symbols.at(i);\r
16         for(int i = 0 ; i < m_controllers.size() ; i++)delete m_controllers.at(i);\r
17 }\r
18 \r
19 void et::SymbolManager::update(){\r
20         for(int i = 0 ; i < m_controllers.size() ; i++)m_controllers.at(i)->update();//\88Ú\93®\83A\83j\83\81\90Ý\92è\r
21         for(int i = 0 ; i < m_symbols.size() ; i++){\r
22                 et::Symbol* pSymbol = m_symbols.at(i);\r
23                 mof::Vector3D prePos3D = pSymbol->getPosition();\r
24                 pSymbol->update();//\82±\82±\82Å\8eÀ\8dÛ\82É\88Ú\93®\r
25 \r
26                 mof::Vector3D pos3D = pSymbol->getPosition();\r
27                 //\82S\92¸\93_\82Å\93\96\82½\82è\94»\92è\r
28                 float tableX[] = { -pSymbol->getScale().x / 2 ,  -pSymbol->getScale().x / 2 , pSymbol->getScale().x / 2 ,  pSymbol->getScale().x / 2};\r
29                 float tableZ[] = { -pSymbol->getScale().z / 2 ,  pSymbol->getScale().z / 2 , -pSymbol->getScale().z / 2 ,  pSymbol->getScale().z / 2};\r
30                 for(int i = 0 ; i < 4 ; i++){\r
31                 \r
32                         mof::Vector2D pos2D((pos3D.x + tableX[i]) / m_pMapBuilder->getScale() , -(pos3D.z + tableZ[i]) / m_pMapBuilder->getScale());\r
33                         if(!et::isWalkableColor(m_pMapBuilder->getMapImageColor(pos2D.x , pos2D.y))){\r
34                                 //\90i\8ds\8bt\95û\8cü\82É\89\9f\82µ\96ß\82·\r
35                                 //if(m_pHero->getDirection() == et::Symbol::UP)prePos3D.z = -(pos2D.y+1) * m_pMapBuilder->getScale() - tableZ[1]*1.1;\r
36                                 //else if(m_pHero->getDirection() == et::Symbol::DOWN)prePos3D.z = -(pos2D.y) * m_pMapBuilder->getScale() - tableZ[0]*1.1;\r
37                                 //else if(m_pHero->getDirection() == et::Symbol::LEFT)prePos3D.x= (pos2D.x+1) * m_pMapBuilder->getScale() - tableX[0]*1.1;\r
38                                 //else if(m_pHero->getDirection() == et::Symbol::RIGHT)prePos3D.x= (pos2D.x) * m_pMapBuilder->getScale() - tableX[2]*1.1;\r
39 \r
40                                 pSymbol->setPosition(prePos3D , pSymbol->getDirection() );//\90Ã\8e~\82³\82¹\82é\r
41                                 pSymbol->update();//\89\9f\82µ\96ß\82µ\83A\83j\83\81\82ð\93K\97p\r
42                                 break;\r
43                         }\r
44                 \r
45                 }\r
46         }\r
47 }\r
48 \r
49 bool compareTo( et::Symbol* &a ,  et::Symbol* &b){\r
50                 return (*a).getPosition().z > (*b).getPosition().z;\r
51         }\r
52 \r
53 void et::SymbolManager::draw(){\r
54         //z\8dÀ\95W\82Å\83\\81[\83g\82µ\82Ä\95`\89æ\r
55         \r
56         std::sort(m_symbols.begin() , m_symbols.end() , compareTo);\r
57         for(int i = 0 ; i < m_symbols.size() ; i++)m_symbols.at(i)->draw();\r
58 }\r
59 \r
60 void et::SymbolManager::add(et::SymbolController* pController){\r
61         m_controllers.push_back(pController);\r
62         for(int i = 0 ; i < pController->getSize() ; i++)m_symbols.push_back(pController->get(i));\r
63 }\r
64 \r
65 \r
66 std::vector<et::Symbol*> et::SymbolManager::testCollision(et::Symbol* pSymbol){\r
67         std::vector<et::Symbol*> touchedList;\r
68         for(int i = 0 ; i < m_symbols.size() ; i++){\r
69                 Symbol* pTarget = m_symbols.at(i);\r
70                 //\89~\93¯\8em\82Å\93\96\82½\82è\94»\92è\r
71                 if(fabs(pTarget->getPosition().x - pSymbol->getPosition().x) > (pTarget->getScale().x/2 + pSymbol->getScale().x/2))continue;\r
72                 else if(fabs(pTarget->getPosition().z - pSymbol->getPosition().z) > (pTarget->getScale().z/2 + pSymbol->getScale().z/2))continue;\r
73                 else touchedList.push_back(pTarget);\r
74                 \r
75         }\r
76         return touchedList;\r
77 }\r
78 \r
79 void et::SymbolManager::create(){\r
80         //\83\89\83\93\83_\83\80\82É\93G\83V\83\93\83{\83\8b\94z\92u\r
81         while(true){\r
82                 int x = rand()%m_pMapBuilder->getWidth();\r
83                 int y = rand()%m_pMapBuilder->getHeight();\r
84                 if(!et::isWalkableColor(m_pMapBuilder->getMapImageColor(x , y)))continue;\r
85                 mof::Billboard* pBillboard = new mof::Billboard(mof::Billboard::Y_FIXED , m_pTextureManager->getResource(_T("image/chara2.png")));\r
86                 //pBillboard->setTextureRectangle(mof::Line2D(0 , 0 ,32 , 64));\r
87                 Symbol* pSymbol = new et::Symbol( pBillboard , mof::Vector3D(0.2f , 0.4f , 0.2f));\r
88                 SymbolController* pController = new et::RandomSymbolController();\r
89                 \r
90                 pController->add(pSymbol);\r
91 \r
92                 mof::Vector3D position(((float)x+0.5f) * m_pMapBuilder->getScale() , 0.0f , (-(float)(y+1)+0.5f) * m_pMapBuilder->getScale());\r
93                 pSymbol->setPosition(position , et::Symbol::DOWN );//\90Ã\8e~\82³\82¹\82é\r
94                 pSymbol->update();\r
95 \r
96                 add(pController);\r
97                 break;\r
98         }\r
99 }