1 #include "DataBasedAction.h"
2 #include "BattlerFacade.h"
3 #include "mof/DataBasedAnimation.h"
4 #include "mof/KeyFrameAnimation.h"
6 et::DataBasedAction::DataBasedAction(et::BattlerFacade* pBattler , et::BattlerFacade* pTarget , mof::DataRow& actionRow , int category)
7 : et::Action(pBattler , pTarget , actionRow.getIntegerData(_T("Cost")) )
9 m_actionRow = actionRow;
10 m_category = category;
13 et::DataBasedAction::~DataBasedAction(void)
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;
28 et::BattlerParameter parameter = pTarget->getParameter();
29 if(parameter.hp <= damage){
31 parameter.alive = false;
33 else parameter.hp -= damage;
34 parameter.dActionPoint += 1;
35 pTarget->setParameter(parameter);
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);
46 mof::AnimationResource et::DataBasedAction::createExecuteAnimation(){
47 return m_pBattler->setCastAnimation(m_category);
50 mof::tstring et::DataBasedAction::getActionMessage(){
51 mof::tstring message = m_actionRow.getData(_T("Message"));
52 if(message == _T("novalue"))return mof::tstring();
57 bool et::DataBasedAction::isDirectAttack(){
58 return (m_category < 2);
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®
67 mof::DataResource effectTable = common.m_pDataResourceManager->getResource(effect);
69 mof::GraphicsSchedule* pSchedule = new mof::GraphicsSchedule();
71 for(int i = 0 ; i < effectTable->getNumberOfRows() ; i++){
72 mof::DataRow effectRow = mof::DataRow(effectTable , i);
74 //---
\83\82\81[
\83V
\83\87\83\93\82Ì
\8d\
\90¬
75 mof::CascadeAnimation* pCascadeAnimation = new mof::CascadeAnimation();
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;
83 pCommonAnimation->setPosition(0 , basePosition);
84 mof::AnimationResource resource(pCommonAnimation);
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));
91 pCascadeAnimation->setElement(1 , resource);
92 mof::AnimationResource animation(pCascadeAnimation);
94 //---
\83I
\83u
\83W
\83F
\83N
\83g
\82Ì
\8d\
\90¬
95 mof::tstring className(effectRow.getData(_T("Class")));
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());
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);
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);