Esempio n. 1
0
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);

}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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);
}