/////////////////////////////////////////////////////////////////////////////// // // Name: UnitManager.cpp // Author: Rich Cross // Contact: rich@wildfiregames.com // /////////////////////////////////////////////////////////////////////////////// #include "precompiled.h" #include "res/res.h" #include "Model.h" #include "UnitManager.h" #include /////////////////////////////////////////////////////////////////////////////// // CUnitManager constructor CUnitManager::CUnitManager() { } /////////////////////////////////////////////////////////////////////////////// // CUnitManager destructor CUnitManager::~CUnitManager() { DeleteAll(); } /////////////////////////////////////////////////////////////////////////////// // AddUnit: add given unit to world void CUnitManager::AddUnit(CUnit* unit) { m_Units.push_back(unit); } /////////////////////////////////////////////////////////////////////////////// // RemoveUnit: remove given unit from world, but don't delete it void CUnitManager::RemoveUnit(CUnit* unit) { // find entry in list typedef std::vector::iterator Iter; Iter i=std::find(m_Units.begin(),m_Units.end(),unit); if (i!=m_Units.end()) { m_Units.erase(i); } } /////////////////////////////////////////////////////////////////////////////// // DeleteAll: remove and delete all units void CUnitManager::DeleteAll() { for (uint i=0;iGetModel()->GetBounds().RayIntersect(origin,dir,tmin,tmax)) { // Point of closest approach CVector3D obj; unit->GetModel()->GetBounds().GetCentre( obj ); CVector3D delta = obj - origin; float distance = delta.Dot( dir ); CVector3D closest = origin + dir * distance; CVector3D offset = obj - closest; float rel = offset.GetLength(); if (!hit || rel < minrel ) { hit=unit; dist=tmin; minrel = rel; } } } return hit; }