OSDN Git Service

Merge branch 'master' of o_ggy@git.sourceforge.jp:/gitroot/moflib/moflib
[moflib/moflib.git] / saisei-1.0 / rpg / rpg / oldcode / DataBasedAction.cpp
1 #include "DataBasedAction.h"
2 #include "BattlerFacade.h"
3 #include "mof/DataBasedAnimation.h"
4 #include "mof/KeyFrameAnimation.h"
5
6 et::DataBasedAction::DataBasedAction(et::BattlerFacade* pBattler , et::BattlerFacade* pTarget , mof::DataRow& actionRow , int category)
7 : et::Action(pBattler , pTarget , actionRow.getIntegerData(_T("Cost")) )
8 {
9         m_actionRow = actionRow;
10         m_category = category;
11 }
12
13 et::DataBasedAction::~DataBasedAction(void)
14 {
15 }
16
17
18
19 int et::DataBasedAction::doActionTo(et::BattlerFacade* pTarget){
20         float correction = (float)m_actionRow.getIntegerData(_T("Coefficient")) / 100.0;
21         float totalPower = (float)m_pBattler->getParameter().attack;
22         int damage = (int)totalPower - pTarget->getParameter().diffence;
23         if(m_pBattler->getParameter().critical)damage = (int)totalPower;
24         if(pTarget->getParameter().guard)damage *= 0.5;//\83K\81[\83h\92\86\82È\82Ç\83_\83\81\81[\83W\82ª\94¼\95ª\82É
25         if(damage < 0)damage = 0;
26         int effect = -damage;
27
28         et::BattlerParameter parameter = pTarget->getParameter();
29         if(parameter.hp <= damage){
30                 parameter.hp = 0;
31                 parameter.alive = false;
32         }
33         else parameter.hp -= damage;
34         parameter.dActionPoint += 1;
35         pTarget->setParameter(parameter);
36         return effect;
37 }
38
39 mof::AnimationResource et::DataBasedAction::createApproachAnimation(){
40         mof::Vector3D targetPosition = getTargetList().front()->getPosition();
41         targetPosition.x += (m_pBattler->getType() == et::ENEMY ? -1 : 1 )* (isDirectAttack() ? 0.2f : 0.5f);
42         return m_pBattler->setMovingAnimation(targetPosition , 15);
43 }
44
45
46 mof::AnimationResource et::DataBasedAction::createExecuteAnimation(){
47         return m_pBattler->setCastAnimation(m_category);
48 }
49
50 mof::tstring et::DataBasedAction::getActionMessage(){
51         mof::tstring message =  m_actionRow.getData(_T("Message"));
52         if(message == _T("novalue"))return mof::tstring();
53         else return message;
54 }
55
56
57 bool et::DataBasedAction::isDirectAttack(){
58         return (m_category < 2);
59 }
60
61
62 mof::GraphicsSchedule* et::DataBasedAction::createEffect(et::Common& common){
63         mof::tstring effect = m_actionRow.getData(_T("Effect"));
64         /*if(effect == _T("Inherit")){
65                 //\83\82\83\93\83X\83^\81[\83^\83C\83v\82©\82ç\88ø\82«\8cp\82®
66         }*/
67         mof::DataResource effectTable = common.m_pDataResourceManager->getResource(effect);
68
69         mof::GraphicsSchedule* pSchedule = new mof::GraphicsSchedule();
70
71         for(int i = 0 ; i < effectTable->getNumberOfRows() ; i++){
72                 mof::DataRow effectRow = mof::DataRow(effectTable , i);
73
74                 //---\83\82\81[\83V\83\87\83\93\82Ì\8d\\90¬
75                 mof::CascadeAnimation* pCascadeAnimation = new mof::CascadeAnimation();
76                 
77                 mof::KeyFrameAnimation* pCommonAnimation = new mof::KeyFrameAnimation();
78                 mof::Vector3D targetPosition = getTargetList().front()->getPosition();
79                 mof::Vector3D basePosition = m_pBattler->getGraphicsObject()->getPosition();
80                 //\83X\83P\81[\83\8b\82ð\8cv\8eZ
81                 mof::Vector3D scale = targetPosition - basePosition;
82                 scale.y  = 1.0;
83                 pCommonAnimation->setPosition(0 , basePosition);
84                 mof::AnimationResource resource(pCommonAnimation);
85
86                 mof::tstring motionName(effectRow.getData(_T("Motion")));
87                 mof::DataBasedAnimation* pMotionAnimation = new mof::DataBasedAnimation(motionName.c_str() , scale);
88                 pCascadeAnimation->setElement(0 , mof::AnimationResource(pMotionAnimation));
89                 
90                 
91                 pCascadeAnimation->setElement(1 , resource);
92                 mof::AnimationResource animation(pCascadeAnimation);
93
94                 //---\83I\83u\83W\83F\83N\83g\82Ì\8d\\90¬
95                 mof::tstring className(effectRow.getData(_T("Class")));
96
97                 mof::tstring textureName(effectRow.getData(_T("Texture")));
98                 if(textureName == _T(""))textureName = _T("null");
99                 mof::TextureResource texture = common.m_pTextureManager->getResource(textureName.c_str());
100
101                 if(className == _T("Billboard")){
102                         //\83r\83\8b\83{\81[\83h
103                         mof::GraphicsObject* pModel = new mof::Billboard(mof::Billboard::Y_FIXED , texture);
104                         pModel->setAnimation(0 , animation);
105                         pSchedule->add(effectRow.getIntegerData(_T("Delay")) , mof::GraphicsModelPtr(pModel) , animation);
106                 }
107                 else {
108                         //\83\81\83b\83V\83\85(className\82ªPath)
109                         mof::MeshResource pModel = common.m_pMeshManager->getResource(className.c_str());
110                         pModel->setTexture(0 , texture);
111                         pModel->setAnimation(0 , animation);
112                         pSchedule->add(effectRow.getIntegerData(_T("Delay")) , mof::GraphicsModelPtr(pModel) , animation);
113                 }
114                 
115         }
116         
117         
118         return pSchedule;
119
120 }