#include "ZenChanComponent.h" #include "ZenChanStates.h" #include "AnimatedTextureComponent.h" #include "ISoundSystem.h" #include "GameObject.h" #include "ColliderComponent.h" #include "LevelComponent.h" #include "PickupComponent.h" namespace dae { //********************* //ZenChan FROZEN STATE //********************* void ZenChanFrozenState::Enter(ZenChanComponent* ) { m_FreezeTimer = m_FreezeDuration; } void ZenChanFrozenState::Update(ZenChanComponent* pZenChanComp, float deltaTime) { if (m_FreezeTimer > 0) { m_FreezeTimer -= deltaTime; return; } pZenChanComp->ChangeState(RUNNING); } void ZenChanFrozenState::Exit(ZenChanComponent*) { } void ZenChanFrozenState::Move(ZenChanComponent* , float , float ) { } //********************* //ZenChan RUNNING STATE //********************* void ZenChanRunningState::Enter(ZenChanComponent* pZenChanComp) { pZenChanComp->GetAnimComp()->SetSpritesPerSecond(16); pZenChanComp->GetAnimComp()->Play(0, 3); } void ZenChanRunningState::Update(ZenChanComponent* pZenChanComp, float deltaTime) { pZenChanComp->SetJumpTimer(pZenChanComp->GetJumpTimer() + deltaTime); if (pZenChanComp->GetJumpTimer() >= pZenChanComp->GetJumpDuration()) { Move(pZenChanComp, 0, 1.f); pZenChanComp->SetJumpTimer(0); } pZenChanComp->SetRunTimer(pZenChanComp->GetRunTimer() + deltaTime); if (pZenChanComp->GetRunTimer() >= pZenChanComp->GetRunDuration()) { if (pZenChanComp->GetDirection() == EnemyFacingDirection::LEFT) { pZenChanComp->SetDirection(EnemyFacingDirection::RIGHT); } else { pZenChanComp->SetDirection(EnemyFacingDirection::LEFT); } pZenChanComp->SetRunTimer(0); } if (pZenChanComp->GetDirection() == EnemyFacingDirection::LEFT) { Move(pZenChanComp, -1.f, 0); } else { Move(pZenChanComp, 1.f, 0); } pZenChanComp->HandleMovement(deltaTime); } void ZenChanRunningState::Exit(ZenChanComponent*) { } void ZenChanRunningState::Move(ZenChanComponent* pZenChanComp, float dirX, float dirY) { // flip sprite? pZenChanComp->ChangeDirection(dirX, dirY); // set current x movement speed if (fabs(dirX) > FLT_EPSILON) pZenChanComp->SetCurrentXSpeed(dirX * pZenChanComp->GetMoveSpeed()); // set current y movement speed if (fabs(dirY) > FLT_EPSILON) pZenChanComp->SetCurrentYSpeed(-dirY * pZenChanComp->GetJumpSpeed()); } //*************************** //ZenChan RUNNING ANGRY STATE //*************************** void ZenChanRunningAngryState::Enter(ZenChanComponent* pZenChanComp) { pZenChanComp->GetAnimComp()->SetSpritesPerSecond(16); pZenChanComp->GetAnimComp()->Play(4, 7); } void ZenChanRunningAngryState::Update(ZenChanComponent* pZenChanComp, float deltaTime) { pZenChanComp->SetJumpTimer(pZenChanComp->GetJumpTimer() + deltaTime); if (pZenChanComp->GetJumpTimer() >= pZenChanComp->GetJumpDuration()) { Move(pZenChanComp, 0, 1.f); pZenChanComp->SetJumpTimer(0); } pZenChanComp->SetRunTimer(pZenChanComp->GetRunTimer() + deltaTime); if (pZenChanComp->GetRunTimer() >= pZenChanComp->GetRunDuration()) { if (pZenChanComp->GetDirection() == EnemyFacingDirection::LEFT) { pZenChanComp->SetDirection(EnemyFacingDirection::RIGHT); } else { pZenChanComp->SetDirection(EnemyFacingDirection::LEFT); } pZenChanComp->SetRunTimer(0); } if (pZenChanComp->GetDirection() == EnemyFacingDirection::LEFT) { Move(pZenChanComp, -1.f, 0); } else { Move(pZenChanComp, 1.f, 0); } pZenChanComp->HandleMovement(deltaTime); } void ZenChanRunningAngryState::Exit(ZenChanComponent*) { } void ZenChanRunningAngryState::Move(ZenChanComponent* pZenChanComp, float dirX, float dirY) { // flip sprite? pZenChanComp->ChangeDirection(dirX, dirY); // set current x movement speed if (fabs(dirX) > FLT_EPSILON) pZenChanComp->SetCurrentXSpeed(dirX * pZenChanComp->GetMoveSpeed() * 1.5f); // set current y movement speed if (fabs(dirY) > FLT_EPSILON) pZenChanComp->SetCurrentYSpeed(-dirY * pZenChanComp->GetJumpSpeed()); } //****************** //ZenChan DEAD STATE //****************** void ZenChanDeadState::Enter(ZenChanComponent* pZenChanComp) { pZenChanComp->SetCurrentYSpeed(-pZenChanComp->GetJumpSpeed() / 2); pZenChanComp->GetGameObject()->GetComponent()->SetIgnoreFlag(true); pZenChanComp->GetAnimComp()->SetSpritesPerSecond(6); pZenChanComp->GetAnimComp()->Play(12, 15); } void ZenChanDeadState::Update(ZenChanComponent* pZenChanComp, float deltaTime) { pZenChanComp->HandleMovement(deltaTime); if (pZenChanComp->m_IsGrounded) { m_FruitTimer += deltaTime; if (m_FruitTimer >= m_FruitDuration) { pZenChanComp->GetGameObject()->SetActive(false); GameObject* pWatermelon = new GameObject(); pWatermelon->SetParent(pZenChanComp->GetGameObject()->GetRootGameObject()); pWatermelon->AddComponent(new PickupComponent(PickupId::WATERMELON, pZenChanComp->GetGameObject()->GetWorldPosition().x, pZenChanComp->GetGameObject()->GetWorldPosition().y, pZenChanComp->m_pLevelComponent->GetPlayersColliders())); } } } void ZenChanDeadState::Exit(ZenChanComponent* pZenChanComp) { pZenChanComp->GetGameObject()->GetComponent()->SetIgnoreFlag(false); pZenChanComp->GetGameObject()->SetActive(true); } void ZenChanDeadState::Move(ZenChanComponent* , float , float ) { } //************************* //ZenChan IN BUBBLE STATE //************************* void ZenChanInBubbleState::Enter(ZenChanComponent* pZenChanComp) { pZenChanComp->GetGameObject()->SetActive(false); } void ZenChanInBubbleState::Update(ZenChanComponent*, float) { } void ZenChanInBubbleState::Exit(ZenChanComponent* pZenChanComp) { pZenChanComp->GetGameObject()->SetActive(true); } void ZenChanInBubbleState::Move(ZenChanComponent*, float, float) { } }