// ---------------------------------------------------------------- // 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 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); } }