void ChaseRabbitState::Execute(Cow* cow) { if (!cow->IsStunned()) { Node* current = cow->GetPosition(); Node* next = current->GetEdges()[Random::Next(0, current->GetEdges().size() - 1)]->child; cow->MoveTo(next); if (next->ContainsEntity("Rabbit")) { BaseGameEntity* entity = next->ContainsEntity("Rabbit"); Rabbit *rabbit = static_cast<Rabbit*>(entity); if (rabbit->HasPill()) { cow->Stun(); rabbit->ThrowAway(); printf("Cow: eating sleeping pill\n"); } } } else { printf("Cow: unable to move\n"); } //Node* target = cow->GetGraph()->GetRabbitNode(); //// Calculate shortest path //AStar *aStar = new AStar(cow->GetPosition(), target); // //cow->MoveTo(target); }
void RabbitWanderingState::Execute(Rabbit* rabbit) { Node* current = rabbit->GetPosition(); Node* next = current->GetEdges()[Random::Next(0, current->GetEdges().size() - 1)]->child; if (next->ContainsEntity("Pill")) { BaseGameEntity *pill = next->ContainsEntity("Pill"); next->RemoveEntity(pill); Node *random = rabbit->GetGraph()->GetRandomNode(next); random->AddEntity(pill); pill->SetPosition(random); rabbit->GetFSM()->ChangeState(RabbitSleepingState::Instance()); } rabbit->MoveTo(next); }
void RabbitSearchPillState::Execute(Rabbit* rabbit) { Node* current = rabbit->GetPosition(); Node* next = current->GetEdges()[Random::Next(0, current->GetEdges().size() - 1)]->child; if (next->ContainsEntity("Pill")) { BaseGameEntity *pill = next->ContainsEntity("Pill"); next->RemoveEntity(pill); pill->SetPosition(nullptr); rabbit->Pickup(static_cast<GameItem*>(pill)); printf("Rabbit: picked up pill\n"); rabbit->GetFSM()->ChangeState(RabbitWanderingState::Instance()); } rabbit->MoveTo(next); }