#include <Robot.h>
Inheritance diagram for Robot:
Definition at line 17 of file Robot.h.
Robot::Robot | ( | Map & | , | |
const std::string & | xmlfile | |||
) |
Definition at line 7 of file Robot.cpp.
References m_code, and m_config.
00007 : MapObject(m) 00008 ,m_config(xmlfile) 00009 ,m_code(NULL) 00010 ,m_life(*this) 00011 ,m_radar(*this) 00012 ,m_turret(*this) 00013 ,m_gun(*this) 00014 ,m_shields(*this) 00015 ,m_power_level(0) 00016 ,m_max_power_level(10000) 00017 ,m_charge_rate(1000) 00018 ,m_current_heading(0) 00019 ,m_set_heading(m_current_heading) 00020 ,m_turn_rate(12) 00021 { 00022 m_code = new CodeTool(m_config); 00023 m_code -> SetRobot( this ); 00024 }
Robot::~Robot | ( | ) |
bool Robot::IsOk | ( | ) | [inline] |
mapobject_t Robot::GetType | ( | ) | [inline, virtual] |
Implements MapObject.
Definition at line 26 of file Robot.h.
References MAPOBJECT_ROBOT.
00026 { return MAPOBJECT_ROBOT; }
long Robot::get_property | ( | const std::string & | ) | [virtual] |
Implements MapObject.
Definition at line 169 of file Robot.cpp.
Referenced by CodeTool::get_property().
void Robot::Tick | ( | long | usec | ) |
Definition at line 33 of file Robot.cpp.
References Call(), m_charge_rate, m_current_heading, m_gun, m_life, m_max_power_level, m_power_level, m_radar, m_set_heading, m_shields, m_turn_rate, m_turret, Life::Tick(), Gun::Tick(), Turret::Tick(), Radar::Tick(), Shields::Tick(), and UsePower().
00034 { 00035 // Robot: charge 00036 { 00037 double x = (usec * m_charge_rate) / 1000000; 00038 m_power_level += x; 00039 if (m_power_level > m_max_power_level) 00040 m_power_level = m_max_power_level; 00041 } 00042 // Robot: turn 00043 { 00044 double diff_cw = m_set_heading - m_current_heading; 00045 if (diff_cw < 0) 00046 diff_cw += 360; 00047 if (diff_cw >= 0.1 && diff_cw <= 180) 00048 { 00049 // cw turn 00050 double angl = (usec * m_turn_rate) / 1000000; // 12 degrees/sec 00051 angl = (angl < diff_cw) ? angl : diff_cw; 00052 double powr = (angl * 550) / m_turn_rate; // 550 power units / 12 degrees 00053 // ... 00054 if (UsePower(powr)) 00055 { 00056 m_current_heading += angl; 00057 if (m_current_heading >= 360) 00058 m_current_heading -= 360; 00059 double diff = m_current_heading - m_set_heading; 00060 if (diff < 0) 00061 diff *= -1; 00062 if (diff < 0.1) 00063 { 00064 Call( "OnTurnComplete" ); 00065 } 00066 } 00067 } 00068 else 00069 if (diff_cw >= 0.1) 00070 { 00071 // ccw turn 00072 double diff_ccw = m_current_heading - m_set_heading; 00073 if (diff_ccw < 0) 00074 diff_ccw += 360; 00075 double angl = (usec * m_turn_rate) / 1000000; // 12 degrees/sec 00076 angl = (angl < diff_ccw) ? angl : diff_ccw; 00077 double powr = (angl * 550) / m_turn_rate; // 550 power units / 12 degrees 00078 // ... 00079 if (UsePower(powr)) 00080 { 00081 m_current_heading -= angl; 00082 if (m_current_heading < 0) 00083 m_current_heading += 360; 00084 double diff = m_current_heading - m_set_heading; 00085 if (diff < 0) 00086 diff *= -1; 00087 if (diff < 0.1) 00088 { 00089 Call( "OnTurnComplete" ); 00090 } 00091 } 00092 } 00093 } 00094 00095 // Robot parts Tick 00096 m_shields.Tick( usec ); 00097 m_radar.Tick( usec ); 00098 m_turret.Tick( usec ); 00099 m_gun.Tick( usec ); 00100 m_life.Tick( usec ); 00101 }
Life& Robot::PartLife | ( | ) | [inline] |
Radar& Robot::PartRadar | ( | ) | [inline] |
Turret& Robot::PartTurret | ( | ) | [inline] |
Gun& Robot::PartGun | ( | ) | [inline] |
Shields& Robot::PartShields | ( | ) | [inline] |
long Robot::get_property | ( | int | ) |
Definition at line 128 of file Robot.cpp.
References RobotObject::GetDamage(), RobotObject::GetRepairRate(), m_life, m_max_power_level, m_power_level, and RobotObject::Ok().
00129 { 00130 switch (prop) 00131 { 00132 case 1: // ok 00133 return m_life.Ok(); 00134 case 2: // damage 00135 return m_life.GetDamage(); 00136 case 3: // repair_rate 00137 return m_life.GetRepairRate(); 00138 case 4: // inventory 00139 break; 00140 case 5: // power 0 .. 100 % 00141 return (int)((100 * m_power_level) / m_max_power_level); 00142 case 6: // charging 00143 return (m_power_level < m_max_power_level) ? true : false; 00144 } 00145 return 0; 00146 }
void Robot::set_property | ( | int | , | |
long | ||||
) |
Definition at line 149 of file Robot.cpp.
References m_life, and RobotObject::SetRepairRate().
Referenced by CodeTool::set_property().
00150 { 00151 switch (prop) 00152 { 00153 case 1: // ok 00154 break; 00155 case 2: // damage 00156 break; 00157 case 3: // repair_rate 00158 m_life.SetRepairRate(value); 00159 break; 00160 } 00161 }
long Robot::call_method | ( | int | , | |
stack_v & | ||||
) |
void Robot::Call | ( | const std::string & | method | ) |
void Robot::AddObject | ( | MapObject * | ) |
Definition at line 104 of file Robot.cpp.
References m_inventory.
00105 { 00106 m_inventory.push_back(p); 00107 }
mapobject_v& Robot::GetInventory | ( | ) | [inline] |
Definition at line 46 of file Robot.h.
References m_inventory.
00046 { return m_inventory; } // robot.inventory
int Robot::GetPower | ( | ) | [inline] |
Definition at line 49 of file Robot.h.
References m_max_power_level, and m_power_level.
00049 { return (int)((m_power_level * 100) / m_max_power_level); } // robot.power
int Robot::GetPowerLevel | ( | ) | [inline] |
Definition at line 50 of file Robot.h.
References m_power_level.
Referenced by Charging().
00050 { return (int)m_power_level; }
int Robot::GetMaxPowerLevel | ( | ) | [inline] |
Definition at line 51 of file Robot.h.
References m_max_power_level.
Referenced by Charging(), and RobotObject::Tick().
00051 { return m_max_power_level; }
void Robot::SetMaxPowerLevel | ( | int | x | ) | [inline] |
Definition at line 52 of file Robot.h.
References m_max_power_level.
00052 { m_max_power_level = x; }
bool Robot::Charging | ( | ) | [inline] |
Definition at line 53 of file Robot.h.
References GetMaxPowerLevel(), and GetPowerLevel().
00053 { return GetPowerLevel() < GetMaxPowerLevel(); } // robot.charging
int Robot::GetChargeRate | ( | ) | [inline] |
void Robot::SetChargeRate | ( | int | x | ) | [inline] |
bool Robot::UsePower | ( | double | units | ) |
Definition at line 110 of file Robot.cpp.
References Call(), and m_power_level.
Referenced by Tick().
00111 { 00112 if (m_power_level < units) 00113 { 00114 Call( "OnOutOfPower" ); 00115 return false; 00116 } 00117 m_power_level -= units; 00118 return true; 00119 }
int Robot::GetCurrentHeading | ( | ) | [inline] |
Definition at line 59 of file Robot.h.
References m_current_heading.
00059 { return (int)m_current_heading; }
void Robot::SetHeading | ( | double | x | ) | [inline] |
double Robot::GetTurnRate | ( | ) | [inline] |
void Robot::SetTurnRate | ( | double | x | ) | [inline] |
RobotXMLFile Robot::m_config [private] |
CodeTool* Robot::m_code [private] |
Life Robot::m_life [private] |
Definition at line 68 of file Robot.h.
Referenced by get_property(), PartLife(), set_property(), and Tick().
Radar Robot::m_radar [private] |
Turret Robot::m_turret [private] |
Gun Robot::m_gun [private] |
Shields Robot::m_shields [private] |
mapobject_v Robot::m_inventory [private] |
double Robot::m_power_level [private] |
Definition at line 76 of file Robot.h.
Referenced by get_property(), GetPower(), GetPowerLevel(), Tick(), and UsePower().
int Robot::m_max_power_level [private] |
Definition at line 77 of file Robot.h.
Referenced by get_property(), GetMaxPowerLevel(), GetPower(), SetMaxPowerLevel(), and Tick().
int Robot::m_charge_rate [private] |
double Robot::m_current_heading [private] |
double Robot::m_set_heading [private] |
double Robot::m_turn_rate [private] |