00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "movement.h"
00021
00022
00023
00024 Movement::Movement():
00025 _fRY( 0 ), _fRX( 0 ), _fRZ( 0 ),
00026 _fTX( 0 ), _fTY( 0 ), _fTZ( 0 ),
00027 _eDir( OC_DIR_S )
00028 {
00029 OPENCITY_DEBUG("ctor");
00030 }
00031
00032
00033
00034 Movement::~Movement()
00035 {
00036 OPENCITY_DEBUG("dtor");
00037 }
00038
00039
00040
00041 void
00042 Movement::SetPath(
00043 vector<Destination> newPath )
00044 {
00045
00046 this->vdest = newPath;
00047 }
00048
00049
00050
00051 const OPENCITY_GRAPHIC_CODE &
00052 Movement::GetGraphicCode() const
00053 {
00054 return _eGC;
00055 }
00056
00057
00058
00059 void
00060 Movement::SetAngle( const Destination & rD )
00061 {
00062 _eDir = rD._eDir;
00063
00064 switch (_eDir) {
00065 case OC_DIR_N:
00066 _fRY = 180;
00067 _fTX = 1; _fTY = 0; _fTZ = 1;
00068 break;
00069
00070 case OC_DIR_E:
00071 _fRY = 90;
00072 _fTX = 0; _fTY = 0; _fTZ = 1;
00073 break;
00074
00075 case OC_DIR_S:
00076 _fRY = 0;
00077 _fTX = 0; _fTY = 0; _fTZ = 0;
00078 break;
00079
00080 case OC_DIR_W:
00081 _fRY = -90;
00082 _fTX = 1; _fTY = 0; _fTZ = 0;
00083 break;
00084
00085 case OC_DIR_SE:
00086 case OC_DIR_SW:
00087 case OC_DIR_NW:
00088 case OC_DIR_NE:
00089 default:
00090 OPENCITY_DEBUG( "Game design error" );
00091 assert( 0 );
00092 break;
00093 }
00094 }
00095
00096
00097
00098 void
00099 Movement::SetSlope(
00100 const Destination & rcA,
00101 const Destination & rcB )
00102 {
00103 static int sign;
00104
00105 if (rcA._iHMin != rcA._iHMax) {
00106 if (rcA._iHMin > rcB._iHMin) {
00107 sign = 1;
00108 }
00109 else if (rcB._iHMin != rcB._iHMax) {
00110 sign = -1;
00111 }
00112 else
00113 sign = 0;
00114
00115 switch (_eDir) {
00116 case OC_DIR_N:
00117 case OC_DIR_S:
00118 _fRX = 0; _fRZ = 45;
00119 break;
00120
00121 case OC_DIR_E:
00122 case OC_DIR_W:
00123 _fRX = sign * 45; _fRZ = 0;
00124 break;
00125
00126 case OC_DIR_SE:
00127 case OC_DIR_SW:
00128 case OC_DIR_NW:
00129 case OC_DIR_NE:
00130 default:
00131 OPENCITY_DEBUG( "Game design error" );
00132 assert( 0 );
00133 break;
00134 }
00135 }
00136 else {
00137 _fRX = 0; _fRZ = 0;
00138 }
00139 }
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200