1 #include "BattleScene.h"
2 #include "mof/GraphicsDevice.h"
3 #include "mof/AmbientLight.h"
4 #include "mof/ConsoleIO.h"
5 #include "mof/KeyFrameAnimation.h"
7 #include "CommandMenu.h"
8 #include "FixedBattler.h"
9 #include "DataBasedBattler.h"
10 #include "BattlerGroup.h"
13 et::BattleScene::BattleScene(mof::TextureResource& nullTexture)
14 : et::GameScene() , m_pCurrentFrame() , m_pHeroBattler(NULL)
17 m_pMeshManager = NULL;
19 m_pCurrentFrame = NULL;
22 m_pBattleSystem = NULL;
23 m_pBattleResultWindow = NULL;
28 et::BattleScene::~BattleScene(void)
32 delete m_pBattleSystem;
33 for(std::list<et::BattlerWindow*>::iterator itr = m_battlerWindowList.begin() ; itr != m_battlerWindowList.end() ; ++itr){
36 delete m_pBattleResultWindow;
42 bool et::BattleScene::initialize(){
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));
50 mof::GraphicsDevice::getInstance()->setProjectionTransform(0.01f , 50.0f);
51 mof::GRAPHICS_DEVICE pDevice = mof::GraphicsDevice::getInstance()->getGraphicsDevice();
53 m_field = m_pMeshManager->getResource(mof::tstring(_T("model/battleField0.x")));
55 //
\83o
\83g
\83\8b\83f
\81[
\83^
\82Ì
\8f\89\8aú
\89»
56 BattlerGroup* pGroup = new BattlerGroup();
57 et::BattlerParameter parameter;
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");
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;
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);
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);
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);*/
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));
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);
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);
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);
107 layoutBattlers(pGroup);
108 m_pBattleData = new BattleData(m_pTextureManager , m_pGameData , pGroup);
111 mof::AmbientLight(mof::createColor(255 , 255 , 255)).reflect();
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();
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());
126 bool compareTo( mof::Component3D* &a , mof::Component3D* &b){
127 return (*a).getPosition().z > (*b).getPosition().z;
131 bool et::BattleScene::draw(){
132 //m_pCapturer->capture();
134 mof::GraphicsDevice::getInstance()->setAlphaBlendingMode(mof::GraphicsDevice::BLENDING_MODE_ALPHA);
135 mof::GraphicsDevice::getInstance()->setZBuffer(false);
139 mof::GraphicsDevice::getInstance()->setZBuffer(true);
140 mof::GraphicsDevice::getInstance()->clearZBuffer();
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());
150 std::sort(orderList.begin() , orderList.end() , compareTo);
151 for(std::vector<mof::Component3D*>::iterator itr = orderList.begin() ; itr != orderList.end() ; ++itr)(*itr)->draw();
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){
162 //mof::GraphicsDevice::getInstance()->setLight(false);
163 mof::GraphicsDevice::getInstance()->setZBuffer(false);
166 for(std::list<mof::Container2D>::iterator itr = m_menuStack.begin() ; itr != m_menuStack.end() ; ++itr){
171 if(m_pBattleSystem == NULL){
172 for(std::list<et::BattlerWindow*>::iterator itr = m_battlerWindowList.begin() ; itr != m_battlerWindowList.end() ; ++itr){
176 if(m_pBattleResultWindow != NULL)m_pBattleResultWindow->draw();
182 bool et::BattleScene::update(){
184 if(m_translationScheduler.isFinalized() && m_popFlag){
185 m_menuStack.pop_back();
188 if(m_translationScheduler.isFinalized() && m_clearFlag){
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()){
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);
218 //
\93Á
\89»
\8f\88\97\9d
220 else if(m_pInputReceiver->checkKeyPressed(mof::InputReceiver::X) && m_menuStack.size() > 1){//
\83g
\83b
\83v
\83\81\83j
\83\85\81[
\88È
\8aO
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());
231 if(m_menuStack.size() >= 2){
232 //
\8cã
\82ë
\82©
\82ç
\82Q
\94Ô
\96Ú
\82Ì
\97v
\91f
\82ð
\95\9c\8a\88
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());
239 m_pCurrentFrame = dynamic_cast<MyFrame*>((*itr).get(0));
241 else m_pCurrentFrame = NULL;
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());
257 m_pCurrentFrame = NULL;
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());
265 m_turnScheduler.clear();
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;
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());
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);
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());
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){
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();
311 for(std::list<et::BattlerWindow*>::iterator itr = m_battlerWindowList.begin() ; itr != m_battlerWindowList.end() ; ++itr){
314 if(m_pBattleResultWindow != NULL)m_pBattleResultWindow->update();
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();
322 mof::Billboard::updateBillboardDirection(m_pCamera);
324 m_translationScheduler.update();
325 m_turnScheduler.update();
330 void et::BattleScene::layoutBattlers(BattlerGroup* pGroup){
331 int nEnemy = pGroup->getEnemyBattlerList().size();
332 int nIdeal = pGroup->getIdealBattlerList().size();
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]
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));
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]));
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]));