示例#1
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);
}
示例#2
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);
}