generated from sigonasr2/CPlusPlusProjectTemplate
Able to start and finish a battle
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
bcf1107267
commit
2df115153a
Binary file not shown.
898
main.cpp
898
main.cpp
@ -665,430 +665,9 @@ goes on a very long time, I hope you can understand this is only for testing pur
|
|||||||
CurrentCutscene->LockAction();
|
CurrentCutscene->LockAction();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BATTLE_ENCOUNTER!=nullptr) {
|
HandleBattle();
|
||||||
for (int i=0;i<PARTY_MEMBER_COUNT;i++) {
|
|
||||||
if (player_rollwait_counter[i]>0) {
|
|
||||||
if (BATTLE_ROLLING_COUNTER_WAITTIME==0) {
|
|
||||||
player_rollwait_counter[i]=0;
|
|
||||||
} else {
|
|
||||||
player_rollwait_counter[i]--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Entity*member=PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]];
|
|
||||||
if (member->GetHP()>std::clamp(member->GetTargetHP(),0,member->GetTargetHP())) {
|
|
||||||
if (player_rollhp_counter[i][0]<=0&&player_rollwait_counter[i]==0) {
|
|
||||||
player_rollhp_display[i][0]--;
|
|
||||||
player_rollhp_counter[i][0]=13;
|
|
||||||
member->_SetDirectHP(member->GetHP()-1);
|
|
||||||
if (player_rollhp_display[i][0]<0) {
|
|
||||||
player_rollhp_display[i][0]=9;
|
|
||||||
player_rollhp_counter[i][0]=13;
|
|
||||||
player_rollhp_display[i][1]--;
|
|
||||||
player_rollhp_counter[i][1]=13;
|
|
||||||
if (player_rollhp_display[i][1]<0) {
|
|
||||||
player_rollhp_display[i][1]=9;
|
|
||||||
player_rollhp_counter[i][1]=13;
|
|
||||||
player_rollhp_display[i][2]--;
|
|
||||||
player_rollhp_counter[i][2]=13;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (player_rollhp_counter[i][0]>0) {
|
|
||||||
if (member->GetTargetHP()<-member->maxHP) {
|
|
||||||
player_rollhp_counter[i][0]-=HEALTH_ROLLING_SPEED+(member->maxHP-member->GetTargetHP())/10;
|
|
||||||
} else
|
|
||||||
if (member->GetTargetHP()<0) {
|
|
||||||
player_rollhp_counter[i][0]-=HEALTH_ROLLING_SPEED+(member->maxHP-member->GetTargetHP())/20;
|
|
||||||
} else {
|
|
||||||
player_rollhp_counter[i][0]-=HEALTH_ROLLING_SPEED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (player_rollhp_counter[i][1]>0) {
|
|
||||||
player_rollhp_counter[i][1]--;
|
|
||||||
}
|
|
||||||
if (player_rollhp_counter[i][2]>0) {
|
|
||||||
player_rollhp_counter[i][2]--;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
if (member->GetHP()<member->GetTargetHP()) {
|
|
||||||
if (player_rollhp_counter[i][0]>=0&&player_rollwait_counter[i]==0) {
|
|
||||||
player_rollhp_display[i][0]++;
|
|
||||||
player_rollhp_counter[i][0]=-13;
|
|
||||||
member->_SetDirectHP(member->GetHP()+1);
|
|
||||||
if (player_rollhp_display[i][0]>9) {
|
|
||||||
player_rollhp_display[i][0]=0;
|
|
||||||
player_rollhp_counter[i][0]=-13;
|
|
||||||
player_rollhp_display[i][1]++;
|
|
||||||
player_rollhp_counter[i][1]=-13;
|
|
||||||
if (player_rollhp_display[i][1]>9) {
|
|
||||||
player_rollhp_display[i][1]=0;
|
|
||||||
player_rollhp_counter[i][1]=-13;
|
|
||||||
player_rollhp_display[i][2]++;
|
|
||||||
player_rollhp_counter[i][2]=-13;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (player_rollhp_counter[i][0]<0) {
|
|
||||||
player_rollhp_counter[i][0]+=HEALTH_ROLLING_SPEED;
|
|
||||||
}
|
|
||||||
if (player_rollhp_counter[i][1]<0) {
|
|
||||||
player_rollhp_counter[i][1]++;
|
|
||||||
}
|
|
||||||
if (player_rollhp_counter[i][2]<0) {
|
|
||||||
player_rollhp_counter[i][2]++;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (player_rollhp_counter[i][0]<0) {
|
|
||||||
player_rollhp_counter[i][0]++;
|
|
||||||
}
|
|
||||||
if (player_rollhp_counter[i][1]<0) {
|
|
||||||
player_rollhp_counter[i][1]++;
|
|
||||||
}
|
|
||||||
if (player_rollhp_counter[i][2]<0) {
|
|
||||||
player_rollhp_counter[i][2]++;
|
|
||||||
}
|
|
||||||
if (player_rollhp_counter[i][0]>0) {
|
|
||||||
player_rollhp_counter[i][0]--;
|
|
||||||
}
|
|
||||||
if (player_rollhp_counter[i][1]>0) {
|
|
||||||
player_rollhp_counter[i][1]--;
|
|
||||||
}
|
|
||||||
if (player_rollhp_counter[i][2]>0) {
|
|
||||||
player_rollhp_counter[i][2]--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player_rollwait_counter[i]==0) {
|
HandleCutscenes();
|
||||||
player_rollwait_counter[i]=BATTLE_ROLLING_COUNTER_WAITTIME*13;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
switch (BATTLE_STATE) {
|
|
||||||
case BattleState::MOVE_CAMERA:{
|
|
||||||
bool allDone=true;
|
|
||||||
if (!MoveCameraTowardsPoint(BATTLE_ENCOUNTER->pos,PriorityDirection::BOTH,BATTLE_CAMERA_MOVESPD)) {
|
|
||||||
allDone=false;
|
|
||||||
}
|
|
||||||
for (int i=0;i<PARTY_MEMBER_COUNT;i++) {
|
|
||||||
if (!MoveObjectTowardsPoint(PARTY_MEMBER_OBJ[i],BATTLE_ENCOUNTER->playerPos[i]+BATTLE_ENCOUNTER->pos,PriorityDirection::BOTH,BATTLE_CAMERA_MOVESPD)) {
|
|
||||||
allDone=false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (allDone) {
|
|
||||||
CAMERA_WAIT_TIMER++;
|
|
||||||
if (CAMERA_WAIT_TIMER>=CAMERA_WAIT_TIME) {
|
|
||||||
for (int i=0;i<PARTY_MEMBER_COUNT;i++) {
|
|
||||||
Entity*member=PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]];
|
|
||||||
for (int j=0;j<3;j++) {
|
|
||||||
switch (j) {
|
|
||||||
case 0:{
|
|
||||||
player_rollhp_display[i][j]=member->GetHP()%10;
|
|
||||||
player_rollpp_display[i][j]=member->PP%10;
|
|
||||||
}break;
|
|
||||||
case 1:{
|
|
||||||
player_rollhp_display[i][j]=member->GetHP()/10%10;
|
|
||||||
player_rollpp_display[i][j]=member->PP/10%10;
|
|
||||||
}break;
|
|
||||||
case 2:{
|
|
||||||
player_rollhp_display[i][j]=member->GetHP()/100%10;
|
|
||||||
player_rollpp_display[i][j]=member->PP/100%10;
|
|
||||||
}break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
BATTLE_STATE=BattleState::WAIT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
case BattleState::WAIT:{
|
|
||||||
BATTLE_ROLLING_COUNTER_WAITTIME=0;
|
|
||||||
bool done=false;
|
|
||||||
if (!done) {
|
|
||||||
for (int i=0;i<4;i++) {
|
|
||||||
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->selectedMove!=nullptr) {
|
|
||||||
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->channelTimeRemaining>0) {
|
|
||||||
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->channelTimeRemaining--;
|
|
||||||
} else {
|
|
||||||
//Attack is being done.
|
|
||||||
printf("%s performs %s.\n",PARTY_MEMBER_OBJ[i]->name.c_str(),PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->selectedMove->name.c_str());
|
|
||||||
BATTLE_STATE=BattleState::WAIT_ANIMATION;
|
|
||||||
BATTLE_ANIMATION_TIMER=0;
|
|
||||||
CURRENT_TURN=-i-1;
|
|
||||||
done=true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!done) {
|
|
||||||
for (int i=0;i<BATTLE_ENCOUNTER->objs.size();i++) {
|
|
||||||
if (BATTLE_ENCOUNTER->objs[i]->selectedMove!=nullptr) {
|
|
||||||
if (BATTLE_ENCOUNTER->objs[i]->channelTimeRemaining>0) {
|
|
||||||
BATTLE_ENCOUNTER->objs[i]->channelTimeRemaining--;
|
|
||||||
} else {
|
|
||||||
CURRENT_TURN=i;
|
|
||||||
printf("%s performs %s.\n",BATTLE_ENCOUNTER->objs[i]->obj->name.c_str(),BATTLE_ENCOUNTER->objs[i]->selectedMove->name.c_str());
|
|
||||||
BATTLE_STATE=BattleState::WAIT_ANIMATION;
|
|
||||||
BATTLE_ANIMATION_TIMER=0;
|
|
||||||
done=true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!done) {
|
|
||||||
for (int i=0;i<4;i++) {
|
|
||||||
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->selectedMove==nullptr) {
|
|
||||||
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->atb>=1000) {
|
|
||||||
printf("%s ready.\n",PARTY_MEMBER_OBJ[i]->name.c_str());
|
|
||||||
CURRENT_TURN=-i-1;
|
|
||||||
BATTLE_STATE=BattleState::SELECT_ACTION;
|
|
||||||
BATTLE_SELECTION_CURSOR=0;
|
|
||||||
POWER_GRADE_CURSOR[-CURRENT_TURN-1]=0;
|
|
||||||
done=true;
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->atb+=PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->speed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!done) {
|
|
||||||
for (int i=0;i<BATTLE_ENCOUNTER->objs.size();i++) {
|
|
||||||
if (BATTLE_ENCOUNTER->objs[i]->selectedMove==nullptr) {
|
|
||||||
if (BATTLE_ENCOUNTER->objs[i]->atb>=1000) {
|
|
||||||
printf("%s (%d) ready.\n",BATTLE_ENCOUNTER->objs[i]->obj->name.c_str(),i);
|
|
||||||
CURRENT_TURN=i;
|
|
||||||
//Enemy picks a random move from the movelist. And a random target.
|
|
||||||
BATTLE_ENCOUNTER->objs[i]->selectedMove=BATTLE_ENCOUNTER->objs[i]->moveSet[rand()%BATTLE_ENCOUNTER->objs[i]->moveSet.size()];
|
|
||||||
BATTLE_ENCOUNTER->objs[i]->channelTimeRemaining=BATTLE_ENCOUNTER->objs[i]->selectedMove->channelTime;
|
|
||||||
if (BATTLE_ENCOUNTER->objs[i]->selectedMove->friendly) {
|
|
||||||
do {
|
|
||||||
BATTLE_ENCOUNTER->objs[i]->selectedTarget=rand()%BATTLE_ENCOUNTER->objs.size();
|
|
||||||
} while (BATTLE_ENCOUNTER->objs[BATTLE_ENCOUNTER->objs[i]->selectedTarget]->GetHP()<=0);
|
|
||||||
} else {
|
|
||||||
bool playerAlive=false;
|
|
||||||
for (int i=0;i<PARTY_MEMBER_COUNT;i++) {
|
|
||||||
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->GetHP()>0) {
|
|
||||||
playerAlive=true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (playerAlive) {
|
|
||||||
do {
|
|
||||||
BATTLE_ENCOUNTER->objs[i]->selectedTarget=-(rand()%PARTY_MEMBER_COUNT)-1;
|
|
||||||
} while (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-BATTLE_ENCOUNTER->objs[i]->selectedTarget-1]]->GetHP()<=0);
|
|
||||||
printf("Selected Target: %d\n",BATTLE_ENCOUNTER->objs[i]->selectedTarget);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
printf(" %s chose move %s.\n",BATTLE_ENCOUNTER->objs[i]->obj->name.c_str(),BATTLE_ENCOUNTER->objs[i]->selectedMove->name.c_str());
|
|
||||||
BATTLE_STATE=BattleState::WAIT;
|
|
||||||
BATTLE_SELECTION_CURSOR=0;
|
|
||||||
done=true;
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
BATTLE_ENCOUNTER->objs[i]->atb+=BATTLE_ENCOUNTER->objs[i]->speed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
case BattleState::WAIT_ANIMATION:{
|
|
||||||
BATTLE_ROLLING_COUNTER_WAITTIME=5;
|
|
||||||
BATTLE_ANIMATION_TIMER++;
|
|
||||||
if (BATTLE_ANIMATION_TIMER==90) {
|
|
||||||
if (CURRENT_TURN<0) {
|
|
||||||
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->friendly) {
|
|
||||||
if (PARTY_MEMBER_STATS[-PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget-1]->GetHP()>0) {
|
|
||||||
int healAmt = PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->baseDmg+
|
|
||||||
((PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->randomDmg>0)?rand()%PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->randomDmg:0)
|
|
||||||
+PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->baseAtk;
|
|
||||||
std::cout << PARTY_MEMBER_OBJ[-CURRENT_TURN-1]->name << " uses " << PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->name << " " << PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->grade << " on " << PARTY_MEMBER_OBJ[-PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget-1]->name << " recovering " << healAmt << " health.\n";
|
|
||||||
PARTY_MEMBER_STATS[-PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget-1]->AddHP(healAmt);
|
|
||||||
} else {
|
|
||||||
std::cout << PARTY_MEMBER_OBJ[-CURRENT_TURN-1]->name << " uses " << PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->name << " " << PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->grade << " on " << PARTY_MEMBER_OBJ[-PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget-1]->name << " but it failed.\n";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (BATTLE_ENCOUNTER->objs[PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget]->GetHP()>0) {
|
|
||||||
int dmgAmt = PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->baseDmg+
|
|
||||||
((PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->randomDmg>0)?rand()%PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->randomDmg:0)
|
|
||||||
+PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->baseAtk;
|
|
||||||
std::cout << PARTY_MEMBER_OBJ[-CURRENT_TURN-1]->name << " uses " << PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->name << " " << PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->grade << " on " << BATTLE_ENCOUNTER->objs[PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget]->obj->name << " dealing " << dmgAmt << " health.\n";
|
|
||||||
BATTLE_ENCOUNTER->objs[PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget]->_SetDirectHP(
|
|
||||||
BATTLE_ENCOUNTER->objs[PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget]->GetHP()-dmgAmt
|
|
||||||
); //Enemies have their health directly set.
|
|
||||||
} else {
|
|
||||||
std::cout << PARTY_MEMBER_OBJ[-CURRENT_TURN-1]->name << " uses " << PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->name << " " << PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->grade << " on " << BATTLE_ENCOUNTER->objs[PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget]->obj->name << " but it failed.\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->friendly) {
|
|
||||||
if (BATTLE_ENCOUNTER->objs[BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget]->GetHP()>0) {
|
|
||||||
int healAmt = BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->baseDmg+
|
|
||||||
((rand()%BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->randomDmg>0)?rand()%BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->randomDmg:0)
|
|
||||||
+BATTLE_ENCOUNTER->objs[CURRENT_TURN]->baseAtk;
|
|
||||||
std::cout << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->obj->name << " uses " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->name << " " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->grade << " on " << BATTLE_ENCOUNTER->objs[BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget]->obj->name << " recovering " << healAmt << " health.\n";
|
|
||||||
BATTLE_ENCOUNTER->objs[BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget]->AddHP(healAmt);
|
|
||||||
} else {
|
|
||||||
std::cout << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->obj->name << " uses " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->name << " " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->grade << " on " << BATTLE_ENCOUNTER->objs[BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget]->obj->name << " but it failed.\n";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget-1]]->GetHP()>0) {
|
|
||||||
printf("HP check passes.\n");
|
|
||||||
int dmgAmt = BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->baseDmg+
|
|
||||||
((rand()%BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->randomDmg>0)?rand()%BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->randomDmg:0)
|
|
||||||
+BATTLE_ENCOUNTER->objs[CURRENT_TURN]->baseAtk;
|
|
||||||
printf("Damage: %d\n",dmgAmt);
|
|
||||||
std::cout << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->obj->name << " uses " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->name << " " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->grade << " on " << PARTY_MEMBER_OBJ[-BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget-1]->name << " dealing " << dmgAmt << " health.\n";
|
|
||||||
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget-1]]->SubtractHP(dmgAmt);
|
|
||||||
} else {
|
|
||||||
std::cout << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->obj->name << " uses " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->name << " " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->grade << " on " << PARTY_MEMBER_OBJ[-BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget-1]->name << " but it failed.\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
if (BATTLE_ANIMATION_TIMER>120) {
|
|
||||||
//Turn's done!
|
|
||||||
if (CURRENT_TURN<0) {
|
|
||||||
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove=nullptr;
|
|
||||||
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->atb=0;
|
|
||||||
BATTLE_STATE=BattleState::WAIT;
|
|
||||||
CURRENT_TURN=-99;
|
|
||||||
} else {
|
|
||||||
BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove=nullptr;
|
|
||||||
BATTLE_ENCOUNTER->objs[CURRENT_TURN]->atb=0;
|
|
||||||
BATTLE_STATE=BattleState::WAIT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
case BattleState::SELECT_ACTION:
|
|
||||||
case BattleState::ITEM_SELECT:
|
|
||||||
case BattleState::GRADE_SELECT:
|
|
||||||
case BattleState::TARGET_SELECT:
|
|
||||||
case BattleState::POWER_SELECT:{
|
|
||||||
BATTLE_ROLLING_COUNTER_WAITTIME=5;
|
|
||||||
}break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (CurrentAction) {
|
|
||||||
case ActionType::SET_FLAG_WHEN_CUTSCENE_ENDS:{
|
|
||||||
CurrentCutscene->SetupEndingCutsceneFlag(((SetFlagWhenCutsceneEnds*)CurrentCutscene->GetAction())->GetCutsceneEndingFlag(),((SetFlagWhenCutsceneEnds*)CurrentCutscene->GetAction())->GetCutsceneEndingVal());
|
|
||||||
CurrentCutscene->AdvanceAction();
|
|
||||||
}break;
|
|
||||||
case ActionType::PAN_CAMERA:{
|
|
||||||
PanCamera*cam=(PanCamera*)CurrentCutscene->GetAction();
|
|
||||||
if (MoveCameraTowardsPoint(cam->GetCameraTargetPos(),cam->GetPriorityDirection(),cam->GetCameraSpeed())) {
|
|
||||||
CurrentCutscene->AdvanceAction();
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
case ActionType::PAN_CAMERA_ASYNC:{
|
|
||||||
AddAsyncCutsceneAction(PanCameraAsync);
|
|
||||||
}break;
|
|
||||||
case ActionType::MOVE_CUTSCENE_OBJ:{
|
|
||||||
if (MoveObjectTowardsPoint(CurrentCutscene->GetCutsceneObjects()[((MoveCutsceneObject*)CurrentCutscene->GetAction())->GetObjectID()],((MoveCutsceneObject*)CurrentCutscene->GetAction())->GetTargetPos(),((MoveCutsceneObject*)CurrentCutscene->GetAction())->GetMovement(),((MoveCutsceneObject*)CurrentCutscene->GetAction())->GetMoveSpd())) {
|
|
||||||
CurrentCutscene->AdvanceAction();
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
case ActionType::MOVE_CUTSCENE_OBJ_ASYNC:{
|
|
||||||
AddAsyncCutsceneAction(MoveCutsceneObjectAsync);
|
|
||||||
}break;
|
|
||||||
case ActionType::CREATE_OBJECTS:{
|
|
||||||
for (auto&obj:((CreateObjects*)CurrentCutscene->GetAction())->GetObjects()) {
|
|
||||||
obj->temp=true;
|
|
||||||
AddObjectToWorld(CurrentCutscene->AddCutsceneObject(new Object(obj->id,obj->name,obj->GetPos(),obj->spr,obj->GetScale(),obj->color,obj->animationSpd,true)));
|
|
||||||
}
|
|
||||||
CurrentCutscene->AdvanceAction();
|
|
||||||
}break;
|
|
||||||
case ActionType::CLEANUP:{
|
|
||||||
if (CUTSCENE_QUEUE.size()==0) {
|
|
||||||
for (int i=0;i<OBJECTS.size();i++) {
|
|
||||||
if (OBJECTS[i]->temp) {
|
|
||||||
delete OBJECTS[i];
|
|
||||||
OBJECTS.erase(OBJECTS.begin()+i--);
|
|
||||||
} else {
|
|
||||||
OBJECTS[i]->objArrElement=i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CurrentCutscene->CleanupCutscene();
|
|
||||||
CurrentCutscene->ResetCutscene();
|
|
||||||
SetGameFlag(CurrentCutscene->GetEndingCutsceneFlag(),CurrentCutscene->GetEndingCutsceneVal());
|
|
||||||
CurrentCutscene=nullptr;
|
|
||||||
CurrentAction=ActionType::NONE;
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
case ActionType::FADE:{
|
|
||||||
if (((Fade*)CurrentCutscene->GetAction())->FadeIn()&&CUTSCENE_FADE_VALUE>0) {
|
|
||||||
CUTSCENE_FADE_VALUE=std::clamp(CUTSCENE_FADE_VALUE-((Fade*)CurrentCutscene->GetAction())->GetFadeSpd(),0.0,255.0);
|
|
||||||
if (CUTSCENE_FADE_VALUE==0) {
|
|
||||||
CurrentCutscene->AdvanceAction();
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
if (!((Fade*)CurrentCutscene->GetAction())->FadeIn()&&CUTSCENE_FADE_VALUE<255) {
|
|
||||||
CUTSCENE_FADE_VALUE=std::clamp(CUTSCENE_FADE_VALUE+((Fade*)CurrentCutscene->GetAction())->GetFadeSpd(),0.0,255.0);
|
|
||||||
if (CUTSCENE_FADE_VALUE==255) {
|
|
||||||
CurrentCutscene->AdvanceAction();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
case ActionType::FADE_ASYNC:{
|
|
||||||
AddAsyncCutsceneAction(FadeAsync);
|
|
||||||
}break;
|
|
||||||
case ActionType::DIALOG:{
|
|
||||||
if (!((DialogBox*)CurrentCutscene->GetAction())->MessageHasBeenShown()) {
|
|
||||||
DisplayMessageBox(((DialogBox*)CurrentCutscene->GetAction())->GetMessage());
|
|
||||||
((DialogBox*)CurrentCutscene->GetAction())->SetMessageBoxVisible();
|
|
||||||
} else
|
|
||||||
if (!messageBoxVisible) {
|
|
||||||
CurrentCutscene->AdvanceAction();
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
case ActionType::DIALOG_ASYNC:{
|
|
||||||
DisplayMessageBox(((DialogBox*)CurrentCutscene->GetAction())->GetMessage());
|
|
||||||
CurrentCutscene->AdvanceAction();
|
|
||||||
}break;
|
|
||||||
case ActionType::MODIFY_OBJECT:{
|
|
||||||
ModifyObject*action=(ModifyObject*)CurrentCutscene->GetAction();
|
|
||||||
Object*obj=CurrentCutscene->GetCutsceneObjects()[action->GetCutsceneObjID()];
|
|
||||||
obj->SetScale(action->GetObjScale());
|
|
||||||
obj->color=action->GetObjCol();
|
|
||||||
obj->spr=action->GetObjSpr();
|
|
||||||
if (action->GetFrameIndex()!=-1) {
|
|
||||||
obj->frameIndex=action->GetFrameIndex();
|
|
||||||
}
|
|
||||||
obj->animationSpd=action->GetAnimationSpeed();
|
|
||||||
CurrentCutscene->AdvanceAction();
|
|
||||||
}break;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i=0;i<CUTSCENE_QUEUE.size();i++) {
|
|
||||||
switch (CUTSCENE_QUEUE[i]->GetActionType()) {
|
|
||||||
case ActionType::PAN_CAMERA_ASYNC:{
|
|
||||||
PanCameraAsync*cam=(PanCameraAsync*)CUTSCENE_QUEUE[i];
|
|
||||||
if (MoveCameraTowardsPoint(cam->GetCameraTargetPos(),cam->GetPriorityDirection(),cam->GetCameraSpeed())) {
|
|
||||||
CUTSCENE_QUEUE.erase(CUTSCENE_QUEUE.begin()+i--);
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
case ActionType::MOVE_CUTSCENE_OBJ_ASYNC:{
|
|
||||||
if (MoveObjectTowardsPoint(CurrentCutscene->GetCutsceneObjects()[((MoveCutsceneObjectAsync*)CUTSCENE_QUEUE[i])->GetObjectID()],((MoveCutsceneObjectAsync*)CUTSCENE_QUEUE[i])->GetTargetPos(),((MoveCutsceneObjectAsync*)CUTSCENE_QUEUE[i])->GetMovement(),((MoveCutsceneObjectAsync*)CUTSCENE_QUEUE[i])->GetMoveSpd())) {
|
|
||||||
CUTSCENE_QUEUE.erase(CUTSCENE_QUEUE.begin()+i--);
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
case ActionType::FADE_ASYNC:{
|
|
||||||
if (((FadeAsync*)CUTSCENE_QUEUE[i])->FadeIn()&&CUTSCENE_FADE_VALUE>0) {
|
|
||||||
CUTSCENE_FADE_VALUE=std::clamp(CUTSCENE_FADE_VALUE-((FadeAsync*)CUTSCENE_QUEUE[i])->GetFadeSpd(),0.0,255.0);
|
|
||||||
if (CUTSCENE_FADE_VALUE==0) {
|
|
||||||
CUTSCENE_QUEUE.erase(CUTSCENE_QUEUE.begin()+i--);
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
if (!((FadeAsync*)CUTSCENE_QUEUE[i])->FadeIn()&&CUTSCENE_FADE_VALUE<255) {
|
|
||||||
CUTSCENE_FADE_VALUE=std::clamp(CUTSCENE_FADE_VALUE+((FadeAsync*)CUTSCENE_QUEUE[i])->GetFadeSpd(),0.0,255.0);
|
|
||||||
if (CUTSCENE_FADE_VALUE==255) {
|
|
||||||
CUTSCENE_QUEUE.erase(CUTSCENE_QUEUE.begin()+i--);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
switch (GAME_STATE) {
|
switch (GAME_STATE) {
|
||||||
@ -1921,7 +1500,7 @@ goes on a very long time, I hope you can understand this is only for testing pur
|
|||||||
}
|
}
|
||||||
for (int i=0;i<BATTLE_ENCOUNTER->objs.size();i++) {
|
for (int i=0;i<BATTLE_ENCOUNTER->objs.size();i++) {
|
||||||
Entity*obj = BATTLE_ENCOUNTER->objs[i];
|
Entity*obj = BATTLE_ENCOUNTER->objs[i];
|
||||||
if (obj->selectedMove!=nullptr) {
|
if (obj->GetHP()>0&&obj->selectedMove!=nullptr) {
|
||||||
vi2d barOffset={-SPRITES["atbbar_front.png"]->sprite->width/2,8};
|
vi2d barOffset={-SPRITES["atbbar_front.png"]->sprite->width/2,8};
|
||||||
DrawPartialDecal(obj->obj->GetPos()+obj->obj->originPoint-cameraPos+barOffset,SPRITES["atbbar_back.png"],{0,0},{(1-((float)obj->channelTimeRemaining/obj->selectedMove->channelTime))*SPRITES["atbbar_back.png"]->sprite->width,SPRITES["atbbar_back.png"]->sprite->height},{1,1},YELLOW*0.8);
|
DrawPartialDecal(obj->obj->GetPos()+obj->obj->originPoint-cameraPos+barOffset,SPRITES["atbbar_back.png"],{0,0},{(1-((float)obj->channelTimeRemaining/obj->selectedMove->channelTime))*SPRITES["atbbar_back.png"]->sprite->width,SPRITES["atbbar_back.png"]->sprite->height},{1,1},YELLOW*0.8);
|
||||||
DrawDecal(obj->obj->GetPos()+obj->obj->originPoint-cameraPos+barOffset,SPRITES["atbbar_front.png"]);
|
DrawDecal(obj->obj->GetPos()+obj->obj->originPoint-cameraPos+barOffset,SPRITES["atbbar_front.png"]);
|
||||||
@ -2920,6 +2499,477 @@ goes on a very long time, I hope you can understand this is only for testing pur
|
|||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HandleBattle() {
|
||||||
|
if (BATTLE_ENCOUNTER!=nullptr) {
|
||||||
|
for (int i=0;i<PARTY_MEMBER_COUNT;i++) {
|
||||||
|
if (player_rollwait_counter[i]>0) {
|
||||||
|
if (BATTLE_ROLLING_COUNTER_WAITTIME==0) {
|
||||||
|
player_rollwait_counter[i]=0;
|
||||||
|
} else {
|
||||||
|
player_rollwait_counter[i]--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Entity*member=PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]];
|
||||||
|
if (member->GetHP()>std::clamp(member->GetTargetHP(),0,member->GetTargetHP())) {
|
||||||
|
if (player_rollhp_counter[i][0]<=0&&player_rollwait_counter[i]==0) {
|
||||||
|
player_rollhp_display[i][0]--;
|
||||||
|
player_rollhp_counter[i][0]=13;
|
||||||
|
member->_SetDirectHP(member->GetHP()-1);
|
||||||
|
if (player_rollhp_display[i][0]<0) {
|
||||||
|
player_rollhp_display[i][0]=9;
|
||||||
|
player_rollhp_counter[i][0]=13;
|
||||||
|
player_rollhp_display[i][1]--;
|
||||||
|
player_rollhp_counter[i][1]=13;
|
||||||
|
if (player_rollhp_display[i][1]<0) {
|
||||||
|
player_rollhp_display[i][1]=9;
|
||||||
|
player_rollhp_counter[i][1]=13;
|
||||||
|
player_rollhp_display[i][2]--;
|
||||||
|
player_rollhp_counter[i][2]=13;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (player_rollhp_counter[i][0]>0) {
|
||||||
|
if (member->GetTargetHP()<-member->maxHP) {
|
||||||
|
player_rollhp_counter[i][0]-=HEALTH_ROLLING_SPEED+(member->maxHP-member->GetTargetHP())/10;
|
||||||
|
} else
|
||||||
|
if (member->GetTargetHP()<0) {
|
||||||
|
player_rollhp_counter[i][0]-=HEALTH_ROLLING_SPEED+(member->maxHP-member->GetTargetHP())/20;
|
||||||
|
} else {
|
||||||
|
player_rollhp_counter[i][0]-=HEALTH_ROLLING_SPEED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (player_rollhp_counter[i][1]>0) {
|
||||||
|
player_rollhp_counter[i][1]--;
|
||||||
|
}
|
||||||
|
if (player_rollhp_counter[i][2]>0) {
|
||||||
|
player_rollhp_counter[i][2]--;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
if (member->GetHP()<member->GetTargetHP()) {
|
||||||
|
if (player_rollhp_counter[i][0]>=0&&player_rollwait_counter[i]==0) {
|
||||||
|
player_rollhp_display[i][0]++;
|
||||||
|
player_rollhp_counter[i][0]=-13;
|
||||||
|
member->_SetDirectHP(member->GetHP()+1);
|
||||||
|
if (player_rollhp_display[i][0]>9) {
|
||||||
|
player_rollhp_display[i][0]=0;
|
||||||
|
player_rollhp_counter[i][0]=-13;
|
||||||
|
player_rollhp_display[i][1]++;
|
||||||
|
player_rollhp_counter[i][1]=-13;
|
||||||
|
if (player_rollhp_display[i][1]>9) {
|
||||||
|
player_rollhp_display[i][1]=0;
|
||||||
|
player_rollhp_counter[i][1]=-13;
|
||||||
|
player_rollhp_display[i][2]++;
|
||||||
|
player_rollhp_counter[i][2]=-13;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (player_rollhp_counter[i][0]<0) {
|
||||||
|
player_rollhp_counter[i][0]+=HEALTH_ROLLING_SPEED;
|
||||||
|
}
|
||||||
|
if (player_rollhp_counter[i][1]<0) {
|
||||||
|
player_rollhp_counter[i][1]++;
|
||||||
|
}
|
||||||
|
if (player_rollhp_counter[i][2]<0) {
|
||||||
|
player_rollhp_counter[i][2]++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (player_rollhp_counter[i][0]<0) {
|
||||||
|
player_rollhp_counter[i][0]++;
|
||||||
|
}
|
||||||
|
if (player_rollhp_counter[i][1]<0) {
|
||||||
|
player_rollhp_counter[i][1]++;
|
||||||
|
}
|
||||||
|
if (player_rollhp_counter[i][2]<0) {
|
||||||
|
player_rollhp_counter[i][2]++;
|
||||||
|
}
|
||||||
|
if (player_rollhp_counter[i][0]>0) {
|
||||||
|
player_rollhp_counter[i][0]--;
|
||||||
|
}
|
||||||
|
if (player_rollhp_counter[i][1]>0) {
|
||||||
|
player_rollhp_counter[i][1]--;
|
||||||
|
}
|
||||||
|
if (player_rollhp_counter[i][2]>0) {
|
||||||
|
player_rollhp_counter[i][2]--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player_rollwait_counter[i]==0) {
|
||||||
|
player_rollwait_counter[i]=BATTLE_ROLLING_COUNTER_WAITTIME*13;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch (BATTLE_STATE) {
|
||||||
|
case BattleState::MOVE_CAMERA:{
|
||||||
|
bool allDone=true;
|
||||||
|
if (!MoveCameraTowardsPoint(BATTLE_ENCOUNTER->pos,PriorityDirection::BOTH,BATTLE_CAMERA_MOVESPD)) {
|
||||||
|
allDone=false;
|
||||||
|
}
|
||||||
|
for (int i=0;i<PARTY_MEMBER_COUNT;i++) {
|
||||||
|
if (!MoveObjectTowardsPoint(PARTY_MEMBER_OBJ[i],BATTLE_ENCOUNTER->playerPos[i]+BATTLE_ENCOUNTER->pos,PriorityDirection::BOTH,BATTLE_CAMERA_MOVESPD)) {
|
||||||
|
allDone=false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (allDone) {
|
||||||
|
CAMERA_WAIT_TIMER++;
|
||||||
|
if (CAMERA_WAIT_TIMER>=CAMERA_WAIT_TIME) {
|
||||||
|
for (int i=0;i<PARTY_MEMBER_COUNT;i++) {
|
||||||
|
Entity*member=PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]];
|
||||||
|
for (int j=0;j<3;j++) {
|
||||||
|
switch (j) {
|
||||||
|
case 0:{
|
||||||
|
player_rollhp_display[i][j]=member->GetHP()%10;
|
||||||
|
player_rollpp_display[i][j]=member->PP%10;
|
||||||
|
}break;
|
||||||
|
case 1:{
|
||||||
|
player_rollhp_display[i][j]=member->GetHP()/10%10;
|
||||||
|
player_rollpp_display[i][j]=member->PP/10%10;
|
||||||
|
}break;
|
||||||
|
case 2:{
|
||||||
|
player_rollhp_display[i][j]=member->GetHP()/100%10;
|
||||||
|
player_rollpp_display[i][j]=member->PP/100%10;
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BATTLE_STATE=BattleState::WAIT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case BattleState::WAIT:{
|
||||||
|
BATTLE_ROLLING_COUNTER_WAITTIME=0;
|
||||||
|
bool done=false;
|
||||||
|
if (!done) {
|
||||||
|
for (int i=0;i<4;i++) {
|
||||||
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->GetHP()>0) {
|
||||||
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->selectedMove!=nullptr) {
|
||||||
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->channelTimeRemaining>0) {
|
||||||
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->channelTimeRemaining--;
|
||||||
|
} else {
|
||||||
|
//Attack is being done.
|
||||||
|
printf("%s performs %s.\n",PARTY_MEMBER_OBJ[i]->name.c_str(),PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->selectedMove->name.c_str());
|
||||||
|
BATTLE_STATE=BattleState::WAIT_ANIMATION;
|
||||||
|
BATTLE_ANIMATION_TIMER=0;
|
||||||
|
CURRENT_TURN=-i-1;
|
||||||
|
done=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->selectedMove=nullptr;
|
||||||
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->channelTimeRemaining=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!done) {
|
||||||
|
for (int i=0;i<BATTLE_ENCOUNTER->objs.size();i++) {
|
||||||
|
if (BATTLE_ENCOUNTER->objs[i]->GetHP()>0) {
|
||||||
|
if (BATTLE_ENCOUNTER->objs[i]->selectedMove!=nullptr) {
|
||||||
|
if (BATTLE_ENCOUNTER->objs[i]->channelTimeRemaining>0) {
|
||||||
|
BATTLE_ENCOUNTER->objs[i]->channelTimeRemaining--;
|
||||||
|
} else {
|
||||||
|
CURRENT_TURN=i;
|
||||||
|
printf("%s performs %s.\n",BATTLE_ENCOUNTER->objs[i]->obj->name.c_str(),BATTLE_ENCOUNTER->objs[i]->selectedMove->name.c_str());
|
||||||
|
BATTLE_STATE=BattleState::WAIT_ANIMATION;
|
||||||
|
BATTLE_ANIMATION_TIMER=0;
|
||||||
|
done=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
BATTLE_ENCOUNTER->objs[i]->selectedMove=nullptr;
|
||||||
|
BATTLE_ENCOUNTER->objs[i]->channelTimeRemaining=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!done) {
|
||||||
|
for (int i=0;i<4;i++) {
|
||||||
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->GetHP()>0) {
|
||||||
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->selectedMove==nullptr) {
|
||||||
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->atb>=1000) {
|
||||||
|
printf("%s ready.\n",PARTY_MEMBER_OBJ[i]->name.c_str());
|
||||||
|
CURRENT_TURN=-i-1;
|
||||||
|
BATTLE_STATE=BattleState::SELECT_ACTION;
|
||||||
|
BATTLE_SELECTION_CURSOR=0;
|
||||||
|
POWER_GRADE_CURSOR[-CURRENT_TURN-1]=0;
|
||||||
|
done=true;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->atb+=PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->speed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->atb=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!done) {
|
||||||
|
for (int i=0;i<BATTLE_ENCOUNTER->objs.size();i++) {
|
||||||
|
if (BATTLE_ENCOUNTER->objs[i]->GetHP()>0) {
|
||||||
|
if (BATTLE_ENCOUNTER->objs[i]->selectedMove==nullptr) {
|
||||||
|
if (BATTLE_ENCOUNTER->objs[i]->atb>=1000) {
|
||||||
|
printf("%s (%d) ready.\n",BATTLE_ENCOUNTER->objs[i]->obj->name.c_str(),i);
|
||||||
|
CURRENT_TURN=i;
|
||||||
|
//Enemy picks a random move from the movelist. And a random target.
|
||||||
|
BATTLE_ENCOUNTER->objs[i]->selectedMove=BATTLE_ENCOUNTER->objs[i]->moveSet[rand()%BATTLE_ENCOUNTER->objs[i]->moveSet.size()];
|
||||||
|
BATTLE_ENCOUNTER->objs[i]->channelTimeRemaining=BATTLE_ENCOUNTER->objs[i]->selectedMove->channelTime;
|
||||||
|
if (BATTLE_ENCOUNTER->objs[i]->selectedMove->friendly) {
|
||||||
|
do {
|
||||||
|
BATTLE_ENCOUNTER->objs[i]->selectedTarget=rand()%BATTLE_ENCOUNTER->objs.size();
|
||||||
|
} while (BATTLE_ENCOUNTER->objs[BATTLE_ENCOUNTER->objs[i]->selectedTarget]->GetHP()<=0);
|
||||||
|
} else {
|
||||||
|
bool playerAlive=false;
|
||||||
|
for (int i=0;i<PARTY_MEMBER_COUNT;i++) {
|
||||||
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->GetHP()>0) {
|
||||||
|
playerAlive=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (playerAlive) {
|
||||||
|
do {
|
||||||
|
BATTLE_ENCOUNTER->objs[i]->selectedTarget=-(rand()%PARTY_MEMBER_COUNT)-1;
|
||||||
|
} while (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-BATTLE_ENCOUNTER->objs[i]->selectedTarget-1]]->GetHP()<=0);
|
||||||
|
printf("Selected Target: %d\n",BATTLE_ENCOUNTER->objs[i]->selectedTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf(" %s chose move %s.\n",BATTLE_ENCOUNTER->objs[i]->obj->name.c_str(),BATTLE_ENCOUNTER->objs[i]->selectedMove->name.c_str());
|
||||||
|
BATTLE_STATE=BattleState::WAIT;
|
||||||
|
BATTLE_SELECTION_CURSOR=0;
|
||||||
|
done=true;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
BATTLE_ENCOUNTER->objs[i]->atb+=BATTLE_ENCOUNTER->objs[i]->speed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
BATTLE_ENCOUNTER->objs[i]->atb=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case BattleState::WAIT_ANIMATION:{
|
||||||
|
BATTLE_ROLLING_COUNTER_WAITTIME=5;
|
||||||
|
BATTLE_ANIMATION_TIMER++;
|
||||||
|
if (BATTLE_ANIMATION_TIMER==90) {
|
||||||
|
if (CURRENT_TURN<0) {
|
||||||
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->friendly) {
|
||||||
|
if (PARTY_MEMBER_STATS[-PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget-1]->GetHP()>0) {
|
||||||
|
int healAmt = PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->baseDmg+
|
||||||
|
((PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->randomDmg>0)?rand()%PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->randomDmg:0)
|
||||||
|
+PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->baseAtk;
|
||||||
|
std::cout << PARTY_MEMBER_OBJ[-CURRENT_TURN-1]->name << " uses " << PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->name << " " << PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->grade << " on " << PARTY_MEMBER_OBJ[-PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget-1]->name << " recovering " << healAmt << " health.\n";
|
||||||
|
PARTY_MEMBER_STATS[-PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget-1]->AddHP(healAmt);
|
||||||
|
} else {
|
||||||
|
std::cout << PARTY_MEMBER_OBJ[-CURRENT_TURN-1]->name << " uses " << PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->name << " " << PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->grade << " on " << PARTY_MEMBER_OBJ[-PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget-1]->name << " but it failed.\n";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (BATTLE_ENCOUNTER->objs[PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget]->GetHP()>0) {
|
||||||
|
int dmgAmt = PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->baseDmg+
|
||||||
|
((PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->randomDmg>0)?rand()%PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->randomDmg:0)
|
||||||
|
+PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->baseAtk;
|
||||||
|
std::cout << PARTY_MEMBER_OBJ[-CURRENT_TURN-1]->name << " uses " << PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->name << " " << PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->grade << " on " << BATTLE_ENCOUNTER->objs[PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget]->obj->name << " dealing " << dmgAmt << " health.\n";
|
||||||
|
BATTLE_ENCOUNTER->objs[PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget]->_SetDirectHP(
|
||||||
|
BATTLE_ENCOUNTER->objs[PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget]->GetHP()-dmgAmt
|
||||||
|
); //Enemies have their health directly set.
|
||||||
|
if (BATTLE_ENCOUNTER->objs[PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget]->GetHP()<=0) {
|
||||||
|
BATTLE_ENCOUNTER->objs[PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget]->obj->dead=true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
std::cout << PARTY_MEMBER_OBJ[-CURRENT_TURN-1]->name << " uses " << PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->name << " " << PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove->grade << " on " << BATTLE_ENCOUNTER->objs[PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedTarget]->obj->name << " but it failed.\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->friendly) {
|
||||||
|
if (BATTLE_ENCOUNTER->objs[BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget]->GetHP()>0) {
|
||||||
|
int healAmt = BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->baseDmg+
|
||||||
|
((rand()%BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->randomDmg>0)?rand()%BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->randomDmg:0)
|
||||||
|
+BATTLE_ENCOUNTER->objs[CURRENT_TURN]->baseAtk;
|
||||||
|
std::cout << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->obj->name << " uses " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->name << " " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->grade << " on " << BATTLE_ENCOUNTER->objs[BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget]->obj->name << " recovering " << healAmt << " health.\n";
|
||||||
|
BATTLE_ENCOUNTER->objs[BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget]->AddHP(healAmt);
|
||||||
|
} else {
|
||||||
|
std::cout << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->obj->name << " uses " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->name << " " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->grade << " on " << BATTLE_ENCOUNTER->objs[BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget]->obj->name << " but it failed.\n";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget-1]]->GetHP()>0) {
|
||||||
|
int dmgAmt = BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->baseDmg+
|
||||||
|
((rand()%BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->randomDmg>0)?rand()%BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->randomDmg:0)
|
||||||
|
+BATTLE_ENCOUNTER->objs[CURRENT_TURN]->baseAtk;
|
||||||
|
std::cout << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->obj->name << " uses " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->name << " " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->grade << " on " << PARTY_MEMBER_OBJ[-BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget-1]->name << " dealing " << dmgAmt << " health.\n";
|
||||||
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget-1]]->SubtractHP(dmgAmt);
|
||||||
|
} else {
|
||||||
|
std::cout << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->obj->name << " uses " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->name << " " << BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove->grade << " on " << PARTY_MEMBER_OBJ[-BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedTarget-1]->name << " but it failed.\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
if (BATTLE_ANIMATION_TIMER>120) {
|
||||||
|
//Turn's done!
|
||||||
|
if (CURRENT_TURN<0) {
|
||||||
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->selectedMove=nullptr;
|
||||||
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-CURRENT_TURN-1]]->atb=0;
|
||||||
|
BATTLE_STATE=BattleState::WAIT;
|
||||||
|
CURRENT_TURN=-99;
|
||||||
|
} else {
|
||||||
|
BATTLE_ENCOUNTER->objs[CURRENT_TURN]->selectedMove=nullptr;
|
||||||
|
BATTLE_ENCOUNTER->objs[CURRENT_TURN]->atb=0;
|
||||||
|
BATTLE_STATE=BattleState::WAIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool enemyStillAlive=false;
|
||||||
|
for (int i=0;i<BATTLE_ENCOUNTER->objs.size();i++) {
|
||||||
|
if (BATTLE_ENCOUNTER->objs[i]->GetHP()>0) {
|
||||||
|
enemyStillAlive=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!enemyStillAlive) {
|
||||||
|
BATTLE_ENCOUNTER=nullptr;
|
||||||
|
BATTLE_STATE=BattleState::MOVE_CAMERA;
|
||||||
|
for (int i=0;i<PARTY_MEMBER_COUNT;i++) {
|
||||||
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->atb=0;
|
||||||
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->selectedMove=nullptr;
|
||||||
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->channelTimeRemaining=0;
|
||||||
|
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->GetTargetHP()>PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->GetHP()) {
|
||||||
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->_SetDirectHP(PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->GetTargetHP());
|
||||||
|
} else {
|
||||||
|
PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->SetTargetHP(PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->GetHP());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case BattleState::SELECT_ACTION:
|
||||||
|
case BattleState::ITEM_SELECT:
|
||||||
|
case BattleState::GRADE_SELECT:
|
||||||
|
case BattleState::TARGET_SELECT:
|
||||||
|
case BattleState::POWER_SELECT:{
|
||||||
|
BATTLE_ROLLING_COUNTER_WAITTIME=5;
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void HandleCutscenes() {
|
||||||
|
switch (CurrentAction) {
|
||||||
|
case ActionType::SET_FLAG_WHEN_CUTSCENE_ENDS:{
|
||||||
|
CurrentCutscene->SetupEndingCutsceneFlag(((SetFlagWhenCutsceneEnds*)CurrentCutscene->GetAction())->GetCutsceneEndingFlag(),((SetFlagWhenCutsceneEnds*)CurrentCutscene->GetAction())->GetCutsceneEndingVal());
|
||||||
|
CurrentCutscene->AdvanceAction();
|
||||||
|
}break;
|
||||||
|
case ActionType::PAN_CAMERA:{
|
||||||
|
PanCamera*cam=(PanCamera*)CurrentCutscene->GetAction();
|
||||||
|
if (MoveCameraTowardsPoint(cam->GetCameraTargetPos(),cam->GetPriorityDirection(),cam->GetCameraSpeed())) {
|
||||||
|
CurrentCutscene->AdvanceAction();
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case ActionType::PAN_CAMERA_ASYNC:{
|
||||||
|
AddAsyncCutsceneAction(PanCameraAsync);
|
||||||
|
}break;
|
||||||
|
case ActionType::MOVE_CUTSCENE_OBJ:{
|
||||||
|
if (MoveObjectTowardsPoint(CurrentCutscene->GetCutsceneObjects()[((MoveCutsceneObject*)CurrentCutscene->GetAction())->GetObjectID()],((MoveCutsceneObject*)CurrentCutscene->GetAction())->GetTargetPos(),((MoveCutsceneObject*)CurrentCutscene->GetAction())->GetMovement(),((MoveCutsceneObject*)CurrentCutscene->GetAction())->GetMoveSpd())) {
|
||||||
|
CurrentCutscene->AdvanceAction();
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case ActionType::MOVE_CUTSCENE_OBJ_ASYNC:{
|
||||||
|
AddAsyncCutsceneAction(MoveCutsceneObjectAsync);
|
||||||
|
}break;
|
||||||
|
case ActionType::CREATE_OBJECTS:{
|
||||||
|
for (auto&obj:((CreateObjects*)CurrentCutscene->GetAction())->GetObjects()) {
|
||||||
|
obj->temp=true;
|
||||||
|
AddObjectToWorld(CurrentCutscene->AddCutsceneObject(new Object(obj->id,obj->name,obj->GetPos(),obj->spr,obj->GetScale(),obj->color,obj->animationSpd,true)));
|
||||||
|
}
|
||||||
|
CurrentCutscene->AdvanceAction();
|
||||||
|
}break;
|
||||||
|
case ActionType::CLEANUP:{
|
||||||
|
if (CUTSCENE_QUEUE.size()==0) {
|
||||||
|
for (int i=0;i<OBJECTS.size();i++) {
|
||||||
|
if (OBJECTS[i]->temp) {
|
||||||
|
delete OBJECTS[i];
|
||||||
|
OBJECTS.erase(OBJECTS.begin()+i--);
|
||||||
|
} else {
|
||||||
|
OBJECTS[i]->objArrElement=i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CurrentCutscene->CleanupCutscene();
|
||||||
|
CurrentCutscene->ResetCutscene();
|
||||||
|
SetGameFlag(CurrentCutscene->GetEndingCutsceneFlag(),CurrentCutscene->GetEndingCutsceneVal());
|
||||||
|
CurrentCutscene=nullptr;
|
||||||
|
CurrentAction=ActionType::NONE;
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case ActionType::FADE:{
|
||||||
|
if (((Fade*)CurrentCutscene->GetAction())->FadeIn()&&CUTSCENE_FADE_VALUE>0) {
|
||||||
|
CUTSCENE_FADE_VALUE=std::clamp(CUTSCENE_FADE_VALUE-((Fade*)CurrentCutscene->GetAction())->GetFadeSpd(),0.0,255.0);
|
||||||
|
if (CUTSCENE_FADE_VALUE==0) {
|
||||||
|
CurrentCutscene->AdvanceAction();
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
if (!((Fade*)CurrentCutscene->GetAction())->FadeIn()&&CUTSCENE_FADE_VALUE<255) {
|
||||||
|
CUTSCENE_FADE_VALUE=std::clamp(CUTSCENE_FADE_VALUE+((Fade*)CurrentCutscene->GetAction())->GetFadeSpd(),0.0,255.0);
|
||||||
|
if (CUTSCENE_FADE_VALUE==255) {
|
||||||
|
CurrentCutscene->AdvanceAction();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case ActionType::FADE_ASYNC:{
|
||||||
|
AddAsyncCutsceneAction(FadeAsync);
|
||||||
|
}break;
|
||||||
|
case ActionType::DIALOG:{
|
||||||
|
if (!((DialogBox*)CurrentCutscene->GetAction())->MessageHasBeenShown()) {
|
||||||
|
DisplayMessageBox(((DialogBox*)CurrentCutscene->GetAction())->GetMessage());
|
||||||
|
((DialogBox*)CurrentCutscene->GetAction())->SetMessageBoxVisible();
|
||||||
|
} else
|
||||||
|
if (!messageBoxVisible) {
|
||||||
|
CurrentCutscene->AdvanceAction();
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case ActionType::DIALOG_ASYNC:{
|
||||||
|
DisplayMessageBox(((DialogBox*)CurrentCutscene->GetAction())->GetMessage());
|
||||||
|
CurrentCutscene->AdvanceAction();
|
||||||
|
}break;
|
||||||
|
case ActionType::MODIFY_OBJECT:{
|
||||||
|
ModifyObject*action=(ModifyObject*)CurrentCutscene->GetAction();
|
||||||
|
Object*obj=CurrentCutscene->GetCutsceneObjects()[action->GetCutsceneObjID()];
|
||||||
|
obj->SetScale(action->GetObjScale());
|
||||||
|
obj->color=action->GetObjCol();
|
||||||
|
obj->spr=action->GetObjSpr();
|
||||||
|
if (action->GetFrameIndex()!=-1) {
|
||||||
|
obj->frameIndex=action->GetFrameIndex();
|
||||||
|
}
|
||||||
|
obj->animationSpd=action->GetAnimationSpeed();
|
||||||
|
CurrentCutscene->AdvanceAction();
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i=0;i<CUTSCENE_QUEUE.size();i++) {
|
||||||
|
switch (CUTSCENE_QUEUE[i]->GetActionType()) {
|
||||||
|
case ActionType::PAN_CAMERA_ASYNC:{
|
||||||
|
PanCameraAsync*cam=(PanCameraAsync*)CUTSCENE_QUEUE[i];
|
||||||
|
if (MoveCameraTowardsPoint(cam->GetCameraTargetPos(),cam->GetPriorityDirection(),cam->GetCameraSpeed())) {
|
||||||
|
CUTSCENE_QUEUE.erase(CUTSCENE_QUEUE.begin()+i--);
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case ActionType::MOVE_CUTSCENE_OBJ_ASYNC:{
|
||||||
|
if (MoveObjectTowardsPoint(CurrentCutscene->GetCutsceneObjects()[((MoveCutsceneObjectAsync*)CUTSCENE_QUEUE[i])->GetObjectID()],((MoveCutsceneObjectAsync*)CUTSCENE_QUEUE[i])->GetTargetPos(),((MoveCutsceneObjectAsync*)CUTSCENE_QUEUE[i])->GetMovement(),((MoveCutsceneObjectAsync*)CUTSCENE_QUEUE[i])->GetMoveSpd())) {
|
||||||
|
CUTSCENE_QUEUE.erase(CUTSCENE_QUEUE.begin()+i--);
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case ActionType::FADE_ASYNC:{
|
||||||
|
if (((FadeAsync*)CUTSCENE_QUEUE[i])->FadeIn()&&CUTSCENE_FADE_VALUE>0) {
|
||||||
|
CUTSCENE_FADE_VALUE=std::clamp(CUTSCENE_FADE_VALUE-((FadeAsync*)CUTSCENE_QUEUE[i])->GetFadeSpd(),0.0,255.0);
|
||||||
|
if (CUTSCENE_FADE_VALUE==0) {
|
||||||
|
CUTSCENE_QUEUE.erase(CUTSCENE_QUEUE.begin()+i--);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
if (!((FadeAsync*)CUTSCENE_QUEUE[i])->FadeIn()&&CUTSCENE_FADE_VALUE<255) {
|
||||||
|
CUTSCENE_FADE_VALUE=std::clamp(CUTSCENE_FADE_VALUE+((FadeAsync*)CUTSCENE_QUEUE[i])->GetFadeSpd(),0.0,255.0);
|
||||||
|
if (CUTSCENE_FADE_VALUE==255) {
|
||||||
|
CUTSCENE_QUEUE.erase(CUTSCENE_QUEUE.begin()+i--);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user