00001 /* 00002 CS Senior Project 2003 00003 Team : Leftfield 00004 Project : ModernWarfare 00005 Members : 00006 - Russ Christensen <rchriste@cs.utah.edu> 00007 - Todd Smith <tcsmith@cs.utah.edu> 00008 - Usit Duongsaa <duongsaa@cs.utah.edu> 00009 Copyright 2003 Russ Christensen, Usit Duongsaa, and Todd Smith. All rights reserved. 00010 00011 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 00012 00013 Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 00014 Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 00015 THIS SOFTWARE IS PROVIDED BY RUSS CHRISTENSEN, USIT DUONGSAA, AND TODD SMITH ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RUSS, USIT, TODD OR OTHER CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00016 */ 00017 00022 #pragma once 00023 00024 #include "../AEngine/AEngine.h" 00025 #include "Globals.h" 00026 #include "HelperFunctions.h" 00027 #include "MilitaryUnit.h" 00028 #include "Map.h" 00029 00030 namespace AI 00031 { 00032 const float threatMapScale = 1.0f/3.0f; 00035 const float unitThreatIncr = 1.0f/7.0f; 00036 00037 typedef vector<vector<FLOAT> > ThreatMap; 00038 00040 class Player 00041 { 00042 public: 00043 00049 Player(const Vec3D teamColor, 00050 vector<MilitaryUnit*> &units, 00051 vector<City *> &cities, 00052 Map::WorldMap worldMap); 00053 00055 void update(); 00056 00058 Vec3D color() const; 00059 00063 const ThreatMap &threatMap(); 00064 00065 private: 00066 Vec3D m_teamColor; 00067 vector<MilitaryUnit*> &m_units; 00068 vector<City*> &m_cities; 00069 ThreatMap m_threatMap; 00070 Map::WorldMap m_worldMap; 00071 00072 void clearThreatMap(); 00073 void buildThreatMap(); 00074 void sendUnitsToCity(vector<MilitaryUnit*> &units, const City *city); 00075 00077 class IsNeutralCity 00078 { 00079 public: 00080 BOOL operator()(City *c) const { return (c->color() == Globals::NO_OWNER); } 00081 }; 00082 00084 class CityLessThreatened 00085 { 00086 public: 00087 CityLessThreatened(ThreatMap &tm, Map::WorldMap& wm); 00088 BOOL operator()(City *c1, City *c2) const; 00089 00090 ThreatMap& m_threatMap; 00091 Map::WorldMap& m_worldMap; 00092 }; 00093 }; 00094 00095 } // end namespace AI
1.3-rc2