OSDN Git Service

fix cmake/Macros.cmake
[moflib/moflib.git] / saisei-1.0 / src / oldcode / BattleScene.cpp
1 #include "BattleScene.h"
2 #include "mof/GraphicsDevice.h"
3 #include "mof/AmbientLight.h"
4 #include "mof/ConsoleIO.h"
5 #include "mof/KeyFrameAnimation.h"
6 #include <math.h>
7 #include "CommandMenu.h"
8 #include "FixedBattler.h"
9 #include "DataBasedBattler.h"
10 #include "BattlerGroup.h"
11 #include "Common.h"
12
13 et::BattleScene::BattleScene(mof::TextureResource& nullTexture)
14 : et::GameScene() , m_pCurrentFrame() , m_pHeroBattler(NULL)
15 {
16         
17         m_pMeshManager = NULL;
18         m_pCamera = NULL;
19         m_pCurrentFrame = NULL;
20         m_popFlag = false;
21         m_clearFlag = false;
22         m_pBattleSystem = NULL;
23         m_pBattleResultWindow = NULL;
24         m_pBattleData = NULL;
25
26 }
27
28 et::BattleScene::~BattleScene(void)
29 {
30         delete m_back;
31         delete m_pCamera;
32         delete m_pBattleSystem;
33         for(std::list<et::BattlerWindow*>::iterator itr = m_battlerWindowList.begin() ; itr != m_battlerWindowList.end() ; ++itr){
34                 delete *itr;
35         }
36         delete m_pBattleResultWindow;
37         
38
39 }
40
41
42 bool et::BattleScene::initialize(){
43         
44
45         m_back = new mof::Sprite(mof::Line2D(0 , 0 , 640 , 480) , mof::Line2D(0 , 0 , 64 , 64) , 
46                 m_pTextureManager->getResource(mof::tstring(_T("null"))));
47         m_back->setCornerColor(mof::createColor(55 , 55 , 55));
48         
49
50         mof::GraphicsDevice::getInstance()->setProjectionTransform(0.01f , 50.0f);
51         mof::GRAPHICS_DEVICE pDevice = mof::GraphicsDevice::getInstance()->getGraphicsDevice();
52
53         m_field = m_pMeshManager->getResource(mof::tstring(_T("model/battleField0.x")));
54
55         //\83o\83g\83\8b\83f\81[\83^\82Ì\8f\89\8aú\89»
56         BattlerGroup* pGroup = new BattlerGroup();      
57         et::BattlerParameter parameter;
58         parameter.hp = 50;
59         parameter.maxHp = 50;
60         parameter.attack = 25;
61         parameter.diffence = 10;
62         parameter.actionPoint = 3;//3\82É\82·\82×\82«
63         parameter.guard = false;
64         parameter.alive = true;
65         parameter.dActionPoint = 0;
66         parameter.name = _T("\83\8a\81[\83X");
67         parameter.speed = 10;
68         m_pHeroBattler = new FixedBattler(et::HERO , parameter , m_pTextureManager , m_pGameData);
69         m_battlerWindowList.push_back(new BattlerWindow( m_pTextureManager , m_pHeroBattler ));
70         pGroup->addBattler(et::HERO , m_pHeroBattler);
71         et::BattlerFacade* pBattler = m_pHeroBattler;
72
73         /*pBattler = new DataBasedBattler( _T("\83\89\83~\83A\83\93\83n\81[\83s\81[") , m_pDataResourceManager ,  m_pTextureManager , _T('A'));
74         m_battlerWindowList.push_back(new BattlerWindow( m_pTextureManager , pBattler ));
75         pGroup->addBattler(et::ENEMY , pBattler);
76
77         pBattler = new DataBasedBattler( _T("\83}\83\93\83h\83\89\83S\83\89") , m_pDataResourceManager ,  m_pTextureManager , _T('B'));
78         m_battlerWindowList.push_back(new BattlerWindow( m_pTextureManager , pBattler ));
79         pGroup->addBattler(et::ENEMY , pBattler);
80
81         pBattler = new DataBasedBattler( _T("\83\8d\83b\83L\81[") , m_pDataResourceManager ,  m_pTextureManager , _T('C'));
82         m_battlerWindowList.push_back(new BattlerWindow( m_pTextureManager , pBattler ));
83         pGroup->addBattler(et::ENEMY , pBattler);*/
84
85         mof::DataRow unitData(m_pDataResourceManager->getResource(_T("data/monster.unit.csv")) , 0);
86         pGroup->addEnemyBattlers(unitData , et::Common(m_pTextureManager , m_pMeshManager , m_pDataResourceManager));
87         std::vector<et::BattlerFacade*> enemyList = pGroup->getEnemyBattlerList();
88         for(std::vector<et::BattlerFacade*>::iterator itr = enemyList.begin() ; itr != enemyList.end() ; ++itr){
89                 m_battlerWindowList.push_back(new BattlerWindow(m_pTextureManager , *itr));
90         }
91
92         parameter.name = _T("\83K\83\8b\83i\83N\83\8a\83t");
93         pBattler = new FixedBattler(et::IDEAL , parameter , m_pTextureManager);
94         m_battlerWindowList.push_back(new BattlerWindow( m_pTextureManager , pBattler ));
95         pGroup->addBattler(et::IDEAL , pBattler);
96         
97         parameter.name = _T("\83{\83{");
98         pBattler = new FixedBattler(et::IDEAL , parameter , m_pTextureManager);
99         m_battlerWindowList.push_back(new BattlerWindow( m_pTextureManager , pBattler ));
100         pGroup->addBattler(et::IDEAL , pBattler);
101
102         parameter.name = _T("\83}\81[\83X");
103         pBattler = new FixedBattler(et::IDEAL , parameter , m_pTextureManager);
104         m_battlerWindowList.push_back(new BattlerWindow( m_pTextureManager , pBattler ));
105         pGroup->addBattler(et::IDEAL , pBattler);
106
107         layoutBattlers(pGroup);
108         m_pBattleData = new BattleData(m_pTextureManager , m_pGameData , pGroup);
109         
110
111         mof::AmbientLight(mof::createColor(255 , 255 , 255)).reflect();
112
113         m_pCamera = new mof::Camera(mof::Vector3D(0.0f , 1.1f  , -1.4f) , mof::Vector3D(0.0f , 0 , 0.5f) , mof::Vector3D(0.0f , 1.0f , 0.0f));
114         m_pCamera->reflect();
115
116         //\83R\83}\83\93\83h\83\81\83j\83\85\81[
117         m_pCurrentFrame = new et::CommandMenu(m_pTextureManager , m_pBattleData);
118         m_menuStack.push_back(mof::Container2D());
119         m_menuStack.back().add(m_pCurrentFrame);
120         m_translationScheduler.add(0 , m_pCurrentFrame->getAnimationSet());
121
122         
123         return true;
124 }
125
126 bool compareTo( mof::Component3D* &a ,   mof::Component3D* &b){
127                 return (*a).getPosition().z > (*b).getPosition().z;
128         }
129
130         
131 bool et::BattleScene::draw(){
132         //m_pCapturer->capture();
133
134         mof::GraphicsDevice::getInstance()->setAlphaBlendingMode(mof::GraphicsDevice::BLENDING_MODE_ALPHA);
135         mof::GraphicsDevice::getInstance()->setZBuffer(false);
136         
137         m_back->draw();
138
139         mof::GraphicsDevice::getInstance()->setZBuffer(true);
140         mof::GraphicsDevice::getInstance()->clearZBuffer();
141         m_field->draw();
142
143         //Z\83\\81[\83g\82µ\82Ä\95`\89æ
144         std::vector< mof::Component3D*> orderList;
145         orderList.reserve(100);
146         for(BattlerList::const_iterator itr = m_pBattleData->getBattlerGroup()->getBattlerList().begin() ;
147                 itr != m_pBattleData->getBattlerGroup()->getBattlerList().end() ; ++itr){
148                 orderList.push_back((*itr)->getGraphicsObject());
149         }
150         std::sort(orderList.begin() , orderList.end() , compareTo);
151         for(std::vector<mof::Component3D*>::iterator itr = orderList.begin() ; itr != orderList.end() ; ++itr)(*itr)->draw();
152
153         if(m_pBattleSystem != NULL){
154                 std::list<mof::GraphicsModelPtr> modelList;
155                 m_pBattleSystem->getModelList(modelList);
156                 for(std::list<mof::GraphicsModelPtr>::iterator itr = modelList.begin() ; itr != modelList.end() ; ++itr){
157                         (*itr)->draw();
158                 }
159         }
160
161
162         //mof::GraphicsDevice::getInstance()->setLight(false);
163         mof::GraphicsDevice::getInstance()->setZBuffer(false);
164         
165
166         for(std::list<mof::Container2D>::iterator itr = m_menuStack.begin() ; itr != m_menuStack.end() ; ++itr){
167                 (*itr).draw();
168         }
169         
170         
171         if(m_pBattleSystem == NULL){
172                 for(std::list<et::BattlerWindow*>::iterator itr = m_battlerWindowList.begin() ; itr != m_battlerWindowList.end() ; ++itr){
173                         (*itr)->draw();
174                 }
175         }
176         if(m_pBattleResultWindow != NULL)m_pBattleResultWindow->draw();
177
178         return true;
179 }
180
181
182 bool et::BattleScene::update(){
183         
184         if(m_translationScheduler.isFinalized() && m_popFlag){
185                 m_menuStack.pop_back();
186                 m_popFlag = false;
187         }
188         if(m_translationScheduler.isFinalized() && m_clearFlag){
189                 m_menuStack.clear();
190                 m_clearFlag = false;
191         }
192         
193
194         if( m_pCurrentFrame != NULL && m_translationScheduler.isFinalized() && !m_pBattleData->isOver()){
195                 //\83E\83B\83\93\83h\83E\82É\91Î\82·\82é\83L\81[
196                 if(m_pInputReceiver->checkKeyPressed(mof::InputReceiver::UP))m_pCurrentFrame->getSelectionModel()->up();
197                 else if(m_pInputReceiver->checkKeyPressed(mof::InputReceiver::DOWN))m_pCurrentFrame->getSelectionModel()->down();
198                 else if(m_pInputReceiver->checkKeyPressed(mof::InputReceiver::LEFT))m_pCurrentFrame->getSelectionModel()->left();
199                 else if(m_pInputReceiver->checkKeyPressed(mof::InputReceiver::RIGHT))m_pCurrentFrame->getSelectionModel()->right();
200                 else if(m_pInputReceiver->checkKeyPressed(mof::InputReceiver::Z) && 
201                         m_pCurrentFrame->getSelectionModel()->getSelectingItem()->isAvailable()){
202                         
203                         int selectedIndex = m_pCurrentFrame->getSelectionModel()->getSelectingIndex();
204                         MyFrame* pPrevFrame = m_pCurrentFrame;
205                         MyFrame* pNextFrame = m_pCurrentFrame->performAction();
206                         if(pNextFrame != m_pCurrentFrame){
207                                 //\83E\83B\83\93\83h\83E\82Ì\91J\88Ú
208                                 m_translationScheduler.clear();
209                                 if(!m_pCurrentFrame->isVisible())m_translationScheduler.add(0 , m_pCurrentFrame->getAnimationSet());
210                                 m_pCurrentFrame = pNextFrame;
211                                 if(m_pCurrentFrame != NULL){
212                                         m_translationScheduler.add(0 , m_pCurrentFrame->getAnimationSet());
213                                         m_menuStack.push_back(mof::Container2D());
214                                         m_menuStack.back().add(m_pCurrentFrame);
215                                 }
216
217                         }
218                         //\93Á\89»\8f\88\97\9d
219                 }
220                 else if(m_pInputReceiver->checkKeyPressed(mof::InputReceiver::X) && m_menuStack.size() > 1){//\83g\83b\83v\83\81\83j\83\85\81[\88È\8aO
221
222                         //\83\81\83j\83\85\81[\83X\83^\83b\83N\82ð\83|\83b\83v\82·\82é
223                         m_translationScheduler.clear();
224                         std::list<mof::Container2D>::iterator itr = m_menuStack.end();
225                         --itr;//\8dÅ\8cã\94ö\82Ì\97v\91f\82ð\8ew\82·
226                         for(int i = 0 ; i < (*itr).size() ; ++i){
227                                 (*itr).get(i)->setVisible(false);
228                                 m_translationScheduler.add(0 , (*itr).get(i)->getAnimationSet());
229                         }
230                         m_popFlag = true;
231                         if(m_menuStack.size() >= 2){
232                                 //\8cã\82ë\82©\82ç\82Q\94Ô\96Ú\82Ì\97v\91f\82ð\95\9c\8a\88
233                                 --itr;
234                                 for(int i = 0 ; i < (*itr).size() ; ++i){
235                                         if(dynamic_cast<MyFrame*>((*itr).get(i))->isVisible())continue;
236                                         (*itr).get(i)->setVisible(true);
237                                         m_translationScheduler.add(0 , (*itr).get(i)->getAnimationSet());
238                                 }
239                                 m_pCurrentFrame = dynamic_cast<MyFrame*>((*itr).get(0));
240                         }
241                         else m_pCurrentFrame = NULL;
242                 }
243
244         }
245         
246
247         if(m_pBattleData->hasBattleAction() && m_pBattleSystem == NULL){
248                 //\91S\83\81\83j\83\85\81[\82ð\95Â\82\82é
249                 m_translationScheduler.clear();
250                 for(std::list<mof::Container2D>::iterator itr = m_menuStack.begin() ; itr != m_menuStack.end() ; ++itr){
251                         for(int i = 0 ; i < (*itr).size() ; ++i){
252                                 if(!dynamic_cast<MyFrame*>((*itr).get(i))->isVisible())continue;
253                                 (*itr).get(i)->setVisible(false);
254                                 m_translationScheduler.add(0 , (*itr).get(i)->getAnimationSet());
255                         }
256                 }
257                 m_pCurrentFrame = NULL;
258                 m_clearFlag = true;
259                 m_pHeroBattler->setBattleCommand(m_pBattleData->pollBattleAction());
260                 m_pBattleSystem = new BattleSystem(m_pBattleData , &m_turnScheduler , et::Common(m_pTextureManager , m_pMeshManager , m_pDataResourceManager));
261                 if(m_pBattleData->getBattlerGroup()->getHeroBattler()->getParameter().guard){
262                         //\91Ò\8b@\83A\83j\83\81\82ð\95Ï\8dX
263                         m_pBattleData->getBattlerGroup()->getHeroBattler()->setAidlingAnimation(m_pBattleData->getBattlerGroup()->getHeroBattler()->getPosition());
264                 }
265                 m_turnScheduler.clear();
266         }
267         else if(m_pBattleSystem != NULL ){
268                 if(m_pInputReceiver->checkKeyPressed(mof::InputReceiver::Z))m_pBattleSystem->notifyPushKey();
269                 m_pBattleSystem->update();
270                 if(m_pBattleSystem->isFinalized() && m_menuStack.empty()){
271                         delete m_pBattleSystem;
272                         m_pBattleSystem = NULL;
273                                 
274                         if(m_pBattleData->getBattlerGroup()->getHeroBattler()->getParameter().guard){
275                                 //\91Ò\8b@\83A\83j\83\81\82ð\95Ï\8dX
276                                 et::BattlerParameter parameter = m_pBattleData->getBattlerGroup()->getHeroBattler()->getParameter();
277                                 parameter.guard = false;
278                                 m_pBattleData->getBattlerGroup()->getHeroBattler()->setParameter(parameter);
279                                 m_pBattleData->getBattlerGroup()->getHeroBattler()->setAidlingAnimation(m_pBattleData->getBattlerGroup()->getHeroBattler()->getPosition());
280                         }
281
282                         if(m_pBattleData->isOver()){
283                                 //\90í\93¬\8fI\97¹\8fó\91Ô\82Ö\88Ú\8ds
284                                 m_pBattleData->setBattleAction(et::BattleAction());
285                                 m_pBattleResultWindow = new MyWindow(mof::Sprite::createSpriteFromText(_T("\83o\83g\83\8b\8fI\97¹") , 17) , m_pTextureManager);
286                         }
287                         else {
288                                 m_translationScheduler.clear();
289                                 m_pCurrentFrame = new et::CommandMenu(m_pTextureManager , m_pBattleData);
290                                 m_menuStack.push_back(mof::Container2D());
291                                 m_menuStack.back().add(m_pCurrentFrame);
292                                 m_translationScheduler.add(0 , m_pCurrentFrame->getAnimationSet());
293                         }
294                 }
295         }
296
297
298         if(m_pBattleSystem != NULL){
299                 std::list<mof::GraphicsModelPtr> modelList;
300                 m_pBattleSystem->getModelList(modelList);
301                 for(std::list<mof::GraphicsModelPtr>::iterator itr = modelList.begin() ; itr != modelList.end() ; ++itr){
302                         (*itr)->update();
303                 }
304         }
305
306
307         //\83\81\83j\83\85\81[\82Ì\8dX\90V
308         for(std::list<mof::Container2D>::iterator itr = m_menuStack.begin() ; itr != m_menuStack.end() ; ++itr){
309                 for(int i = 0 ; i < (*itr).size() ; i++)(*itr).get(i)->update();
310         }
311         for(std::list<et::BattlerWindow*>::iterator itr = m_battlerWindowList.begin() ; itr != m_battlerWindowList.end() ; ++itr){
312                 (*itr)->update();
313         }
314         if(m_pBattleResultWindow != NULL)m_pBattleResultWindow->update();
315
316         m_pCamera->reflect();
317         for(BattlerList::const_iterator itr = m_pBattleData->getBattlerGroup()->getBattlerList().begin() ;
318                 itr != m_pBattleData->getBattlerGroup()->getBattlerList().end() ; ++itr){
319                 (*itr)->getGraphicsObject()->update();
320         }
321
322         mof::Billboard::updateBillboardDirection(m_pCamera);
323
324         m_translationScheduler.update();
325         m_turnScheduler.update();
326         return true;
327 }
328
329
330 void et::BattleScene::layoutBattlers(BattlerGroup* pGroup){
331         int nEnemy = pGroup->getEnemyBattlerList().size();
332         int nIdeal = pGroup->getIdealBattlerList().size();
333         
334         int cntEnemy = 0;
335         int cntIdeal = 0;
336         float zTable[3][3] = { {0.6f , 0.6f , 0.6f} , { 0.8f , 0.4f , 0.6f} , {0.9f , 0.6f , 0.30f} };//[\91\8d\90\94][\94Ô\8d\86]
337         float xTable[3][3] = { {-0.2f , 0.0f , 0.0f} , { -0.0f , -0.3f , 0.0f} , {-0.05f , -0.2f , -0.35f} };//[\91\8d\90\94][\94Ô\8d\86]
338         float ixTable[3][3] = { {0.2f , 0.0f , 0.0f} , { 0.0f , 0.07f , 0.6f} , {0.1f , 0.2f , 0.25f} };//[\91\8d\90\94][\94Ô\8d\86]
339
340         BattlerFacade* pBattler = pGroup->getHeroBattler();
341         pBattler->setAidlingAnimation(mof::Vector3D(0.3f , 0.0f , 0.6f));
342         pBattler->setBasePosition(mof::Vector3D(0.3f , 0.0f , 0.6f));
343         
344         
345         for(std::vector<BattlerFacade*>::const_iterator itr = pGroup->getEnemyBattlerList().begin() ; itr != pGroup->getEnemyBattlerList().end() ; ++itr){
346                 mof::KeyFrameAnimation* pAnimation = new mof::KeyFrameAnimation();
347                 (*itr)->setAidlingAnimation(mof::Vector3D(-0.45f + xTable[nEnemy-1][cntEnemy] , 0.0f , zTable[nEnemy-1][cntEnemy]));
348                 (*itr)->setBasePosition(mof::Vector3D(-0.45f + xTable[nEnemy-1][cntEnemy] , 0.0f , zTable[nEnemy-1][cntEnemy]));
349                 cntEnemy++;     
350         }
351
352         for(std::vector<BattlerFacade*>::const_iterator itr = pGroup->getIdealBattlerList().begin() ; itr != pGroup->getIdealBattlerList().end() ; ++itr){
353                 mof::KeyFrameAnimation* pAnimation = new mof::KeyFrameAnimation();
354                 (*itr)->setAidlingAnimation(mof::Vector3D(0.6 +ixTable[nIdeal-1][cntIdeal] , 0.0f , zTable[nIdeal-1][cntIdeal]));
355                 cntIdeal++;     
356                 
357         }
358
359 }