| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- // ----------------------------------------------------------------
- // From Game Programming in C++ by Sanjay Madhav
- // Copyright (C) 2017 Sanjay Madhav. All rights reserved.
- //
- // Released under the BSD License
- // See LICENSE in root directory for full details.
- // ----------------------------------------------------------------
- #include "FollowActor.h"
- #include "SkeletalMeshComponent.h"
- #include "Game.h"
- #include "Renderer.h"
- #include "FollowCamera.h"
- #include "MoveComponent.h"
- #include "MirrorCamera.h"
- FollowActor::FollowActor(Game* game)
- :Actor(game)
- ,mMoving(false)
- {
- mMeshComp = new SkeletalMeshComponent(this);
- mMeshComp->SetMesh(game->GetRenderer()->GetMesh("Assets/CatWarrior.gpmesh"));
- mMeshComp->SetSkeleton(game->GetSkeleton("Assets/CatWarrior.gpskel"));
- mMeshComp->PlayAnimation(game->GetAnimation("Assets/CatActionIdle.gpanim"));
- SetPosition(Vector3(0.0f, 0.0f, -100.0f));
- mMoveComp = new MoveComponent(this);
- mCameraComp = new FollowCamera(this);
- mCameraComp->SnapToIdeal();
- // Add a component for the mirror camera
- MirrorCamera* mirror = new MirrorCamera(this);
- mirror->SnapToIdeal();
- }
- void FollowActor::ActorInput(const uint8_t* keys)
- {
- float forwardSpeed = 0.0f;
- float angularSpeed = 0.0f;
- // wasd movement
- if (keys[SDL_SCANCODE_W])
- {
- forwardSpeed += 400.0f;
- }
- if (keys[SDL_SCANCODE_S])
- {
- forwardSpeed -= 400.0f;
- }
- if (keys[SDL_SCANCODE_A])
- {
- angularSpeed -= Math::Pi;
- }
- if (keys[SDL_SCANCODE_D])
- {
- angularSpeed += Math::Pi;
- }
- // Did we just start moving?
- if (!mMoving && !Math::NearZero(forwardSpeed))
- {
- mMoving = true;
- mMeshComp->PlayAnimation(GetGame()->GetAnimation("Assets/CatRunSprint.gpanim"), 1.25f);
- }
- // Or did we just stop moving?
- else if (mMoving && Math::NearZero(forwardSpeed))
- {
- mMoving = false;
- mMeshComp->PlayAnimation(GetGame()->GetAnimation("Assets/CatActionIdle.gpanim"));
- }
- mMoveComp->SetForwardSpeed(forwardSpeed);
- mMoveComp->SetAngularSpeed(angularSpeed);
- }
- void FollowActor::SetVisible(bool visible)
- {
- mMeshComp->SetVisible(visible);
- }
|