| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- // ----------------------------------------------------------------
- // 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 "Actor.h"
- #include "Game.h"
- #include "Component.h"
- #include <algorithm>
- Actor::Actor(Game* game)
- :mState(EActive)
- , mPosition(Vector2::Zero)
- , mScale(1.0f)
- , mRotation(0.0f)
- , mGame(game)
- {
- mGame->AddActor(this);
- }
- Actor::~Actor()
- {
- mGame->RemoveActor(this);
- // Need to delete components
- // Because ~Component calls RemoveComponent, need a different style loop
- while (!mComponents.empty())
- {
- delete mComponents.back();
- }
- }
- void Actor::Update(float deltaTime)
- {
- if (mState == EActive)
- {
- UpdateComponents(deltaTime);
- UpdateActor(deltaTime);
- }
- }
- void Actor::UpdateComponents(float deltaTime)
- {
- for (auto comp : mComponents)
- {
- comp->Update(deltaTime);
- }
- }
- void Actor::UpdateActor(float deltaTime)
- {
- }
- void Actor::AddComponent(Component* component)
- {
- // Find the insertion point in the sorted vector
- // (The first element with a order higher than me)
- int myOrder = component->GetUpdateOrder();
- auto iter = mComponents.begin();
- for (;
- iter != mComponents.end();
- ++iter)
- {
- if (myOrder < (*iter)->GetUpdateOrder())
- {
- break;
- }
- }
- // Inserts element before position of iterator
- mComponents.insert(iter, component);
- }
- void Actor::RemoveComponent(Component* component)
- {
- auto iter = std::find(mComponents.begin(), mComponents.end(), component);
- if (iter != mComponents.end())
- {
- mComponents.erase(iter);
- }
- }
|