BWAPI
UAlbertaBot_src/Projects/UAlbertaBot/Source/Common.h
Go to the documentation of this file.
00001 
00002 // Commonly used includes and definitions //
00003 //    Candidate for precompiled header    //
00005 
00006 #ifndef COMMON_H
00007 #define COMMON_H
00008 
00009 #define _USE_MATH_DEFINES
00010 #include <cmath>
00011 #include <cstdlib>
00012 #include <cassert>
00013 
00014 #include <stdexcept>
00015 #include <string>
00016 #include <sstream>
00017 #include <algorithm>
00018 #include <vector>
00019 #include <deque>
00020 #include <list>
00021 #include <set>
00022 #include <map>
00023 
00024 #include <boost/foreach.hpp>
00025 #include <boost/progress.hpp>
00026 #include <boost/timer.hpp>
00027 
00028 #define UNIMPLEMENTED throw std::runtime_error(std::string("Unimplemented function ")+ __FUNCTION__ + "() called")
00029 
00030 #define DRAW_UALBERTABOT_DEBUG false
00031 
00032 #include <BWAPI.h>
00033 #include <BWTA.h>
00034 #include "Logger.h"
00035 
00036 typedef std::vector<BWAPI::Unit*> UnitVector;
00037 
00038 BWAPI::AIModule * __NewAIModule();
00039 
00040 struct double2
00041 {
00042         double x,y;
00043 
00044         double2() {}
00045         double2(double x, double y) : x(x), y(y) {}
00046         double2(const BWAPI::Position & p) : x(p.x()), y(p.y()) {}
00047 
00048         operator BWAPI::Position() const { return BWAPI::Position(static_cast<int>(x),static_cast<int>(y)); }
00049 
00050         double2 operator + (const double2 & v) const { return double2(x+v.x,y+v.y); }
00051         double2 operator - (const double2 & v) const { return double2(x-v.x,y-v.y); }
00052         double2 operator * (double s) const { return double2(x*s,y*s); }
00053         double2 operator / (double s) const { return double2(x/s,y/s); }
00054 
00055         double dot(const double2 & v) const { return x*v.x + y*v.y; }
00056         double lenSq() const { return x*x + y*y; }
00057         double len() const { return sqrt(lenSq()); }
00058         double2 normal() const { return *this / len(); }
00059 
00060         void normalise() { double s(len()); x/=s; y/=s; } 
00061         void rotate(double angle) 
00062         {       
00063                 angle = angle*M_PI/180.0;
00064                 *this = double2(x * cos(angle) - y * sin(angle), y * cos(angle) + x * sin(angle));
00065         }
00066 };
00067 
00068 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines