enum Process::ProcessResult AttackProc::Update(unsigned long aElapsedTime) { mProgress += int(100*double(aElapsedTime)/mTimeScale); mProgress = std::min(mProgress,100); std::cout << p_gGame->GetActorName(mAttacker); for (int i = 0; i < mProgress; ++i) { std::cout << "."; } for (int i = mProgress; i < 100; ++i) { std::cout << " "; } std::cout << p_gGame->GetActorName(mTarget); std::cout << std::endl; std::this_thread::sleep_for(std::chrono::milliseconds(1000)); if (mProgress == 100) { StrongActorPtr attacker = p_gGame->GetActor(mAttacker); StrongActorPtr target = p_gGame->GetActor(mTarget); this->Attack(attacker,target); attacker->GET_COMPONENT(BattleTimer)->ResetBattleTimer(); attacker->GET_COMPONENT(BattleTimer)->SetActorState(BattleTimerState::ATTACKING, false); target->GET_COMPONENT(BattleTimer)->SetActorState(BattleTimerState::BEING_ATTACKED,false); return SUCCESS; } return STALL; }
AttackProc::~AttackProc() { //Set target to busy so they can not mutally attack StrongActorPtr attacker = p_gGame->GetActor(mAttacker); StrongActorPtr target = p_gGame->GetActor(mTarget); attacker->GET_COMPONENT(BattleTimer)->SetActorState(BattleTimerState::ATTACKING, false); target->GET_COMPONENT(BattleTimer)->SetActorState(BattleTimerState::BEING_ATTACKED, false); }
void AttackProc::Attack(StrongActorPtr aAttacker, StrongActorPtr aTarget) { int attackerDamage = -1; int targetDamage = -10; HydrusActorStats* attackerStats = aAttacker->GET_COMPONENT(HydrusActorStats); HydrusActorStats* targetStats = aTarget->GET_COMPONENT(HydrusActorStats); tempAttackFunc(attackerStats, targetStats, attackerDamage, targetDamage); attackerStats->ModifyStats(attackerDamage,"health",aTarget->GetName(),COUNTER_ATTACK_DAMAGE); targetStats->ModifyStats(targetDamage,"health",aAttacker->GetName(),ATTACK_DAMAGE); }
AttackProc::AttackProc(ActorId aAttacker, ActorId aTarget) : Process(), mAttacker(aAttacker), mTarget(aTarget), mTimeScale(2000), mProgress(0) { //Set target to busy so they can not mutally attack StrongActorPtr attacker = p_gGame->GetActor(mAttacker); StrongActorPtr target = p_gGame->GetActor(mTarget); attacker->GET_COMPONENT(BattleTimer)->SetActorState(BattleTimerState::ATTACKING, true); target->GET_COMPONENT(BattleTimer)->SetActorState(BattleTimerState::BEING_ATTACKED,true); }
void HydrusConsoleView::ActorReadyDelegate(EventData* aEventData) { EventData_ActorReady* eventData = static_cast<EventData_ActorReady*> (aEventData); ActorId actorId = eventData->GetActorId(); HydrusEncounter* encounter = eventData->GetEncounter(); StrongActorPtr actor = p_gGame->GetActor(actorId); Brain* actorBrain = actor->GET_COMPONENT(Brain); actorBrain->DetermineAction(encounter); }
void HydrusConsoleView::TargetingDelegate(EventData* aEventData) { EventData_Targeting* eventData = static_cast<EventData_Targeting*> (aEventData); ActorId actorId = eventData->GetActorId(); HydrusEncounter* encounter = eventData->GetEncounter(); enum ActionType action = eventData->GetActionType(); StrongActorPtr actor = p_gGame->GetActor(actorId); Brain* actorBrain = actor->GET_COMPONENT(Brain); ActorId attackTargetId = actorBrain->SelectTarget(actor->GetActorId(), encounter, action); encounter->CreateTargetedProc(actorId, attackTargetId, action); }