1 #include "SymbolManager.h"
\r
2 #include "MapImageColor.h"
\r
3 #include "mof/Billboard.h"
\r
4 #include "RandomSymbolController.h"
\r
7 et::SymbolManager::SymbolManager(mof::TextureManager* pTextureManager , et::DungeonBuilder* pMapBuilder)
\r
9 m_pTextureManager = pTextureManager;
\r
10 m_pMapBuilder = pMapBuilder;
\r
13 et::SymbolManager::~SymbolManager(void)
\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
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
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
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
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
49 bool compareTo( et::Symbol* &a , et::Symbol* &b){
\r
50 return (*a).getPosition().z > (*b).getPosition().z;
\r
53 void et::SymbolManager::draw(){
\r
54 //z
\8dÀ
\95W
\82Å
\83\
\81[
\83g
\82µ
\82Ä
\95`
\89æ
\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
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
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
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
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
90 pController->add(pSymbol);
\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