#include <logic_variable.h>
Inheritance diagram for NLLOGIC::CLogicCounter:

Nevrax France
Definition at line 132 of file logic_variable.h.
Public Types | |
| enum | TLogicCounterRule { STOP_AT_LIMIT = 0, LOOP, SHUTTLE, DOWN_UP, UP_DOWN } |
| counter running mode More... | |
| enum | TLogicCounterRunningMode { STOPPED = 0, RUN, REWIND, FAST_FORWARD } |
| counter running state More... | |
Public Member Functions | |
| void | applyModification (std::string op, sint64 value) |
| CLogicCounter () | |
| std::string | getName () const |
| sint64 | getValue () const |
| void | manageRunningMode () |
| virtual void | processLogic () |
| virtual void | read (xmlNodePtr node) |
| void | setName (std::string name) |
| void | setValue (sint64 value) |
| void | setVerbose (bool b) |
| void | update () |
| virtual void | write (xmlNodePtr node) const |
Data Fields | |
| CLogicVariable | Control |
| running state | |
| CLogicVariable | HighLimit |
| higher limit for counter | |
| CLogicVariable | LowLimit |
| lower limit for counter | |
| CLogicVariable | Mode |
| running mode | |
| CLogicVariable | Period |
| period between inc( measured in game ticks ) | |
| CLogicVariable | Phase |
| time offset to apply with period | |
| CLogicVariable | Step |
| regular increment value( normally 1 or -1 ) | |
Protected Attributes | |
| std::string | _Name |
| variable name | |
| sint64 | _Value |
| variable value | |
| bool | _Verbose |
| true if verbose mode is active | |
Private Attributes | |
| uint | _TickCount |
|
|
counter running mode
Definition at line 139 of file logic_variable.h.
00140 {
00141 STOP_AT_LIMIT = 0,
00142 LOOP,
00143 SHUTTLE,
00144 DOWN_UP, // bounce at low end, stop at high end
00145 UP_DOWN, // bounce at high end, stop at low end
00146 };
|
|
|
counter running state
Definition at line 149 of file logic_variable.h.
00150 {
00151 STOPPED = 0,
00152 RUN,
00153 REWIND,
00154 FAST_FORWARD,
00155 };
|
|
|
Default constructor Definition at line 160 of file logic_variable.cpp. References _TickCount, Control, HighLimit, LowLimit, Period, RUN, NLLOGIC::CLogicVariable::setName(), NLLOGIC::CLogicVariable::setValue(), and STOP_AT_LIMIT.
00161 {
00162 _TickCount = 0;
00163 _Value = 0;
00164 _Name = "unamed_counter";
00165
00166 Period.setValue( 10 );
00167 Period.setName("Period");
00168
00169 Phase.setValue( 0 );
00170 Phase.setName("Phase");
00171
00172 Step.setValue( 1 );
00173 Step.setName("Step");
00174
00175 LowLimit.setValue( 0 );
00176 LowLimit.setName("LowLimit");
00177
00178 HighLimit.setValue( 100 );
00179 HighLimit.setName("HighLimit");
00180
00181 Mode.setValue( STOP_AT_LIMIT );
00182 Mode.setName("Mode");
00183
00184 Control.setValue( RUN );
00185 Control.setName("Control");
00186
00187 } // CLogicCounter //
|
|
||||||||||||
|
Apply modifications on a variable
Definition at line 73 of file logic_variable.cpp. References NLLOGIC::CLogicVariable::_Verbose, nlinfo, nlwarning, sint64, and value.
00074 {
00075 if( op == "SET" || op == "set" )
00076 {
00077 _Value = value;
00078 }
00079 else
00080 if( op == "ADD" || op == "add" )
00081 {
00082 _Value += value;
00083 }
00084 else
00085 if( op == "SUB" || op == "sub" )
00086 {
00087 _Value -= value;
00088 }
00089 else
00090 if( op == "MUL" || op == "mul")
00091 {
00092 _Value *= value;
00093 }
00094 else
00095 if( op == "DIV" || op == "div")
00096 {
00097 if( value != 0 ) _Value /= value;
00098 }
00099 else
00100 {
00101 nlwarning("(LGCS)<CLogicVariable::applyModification> The operator \"%s\" is unknown",op.c_str());
00102 return;
00103 }
00104
00105 if( _Verbose )
00106 {
00107 nlinfo("variable \"%s\" value is now %f",_Name.c_str(),(double)_Value);
00108 }
00109
00110 } // applyModification //
|
|
|
Get the variable name
Definition at line 76 of file logic_variable.h. Referenced by NLLOGIC::CLogicStateMachine::addCounter(), and NLLOGIC::CLogicStateMachine::addVariable().
00076 { return _Name; }
|
|
|
Get the variable value
Definition at line 90 of file logic_variable.h. References sint64. Referenced by manageRunningMode(), NLLOGIC::CLogicComparisonBlock::testLogic(), update(), and write().
00090 { return _Value; }
|
|
|
check the counter value according to the running mode Definition at line 248 of file logic_variable.cpp. References DOWN_UP, NLLOGIC::CLogicVariable::getValue(), HighLimit, LOOP, LowLimit, NLLOGIC::CLogicVariable::setValue(), SHUTTLE, STOP_AT_LIMIT, and UP_DOWN. Referenced by update().
00249 {
00250 // loop on one value
00251 if( HighLimit.getValue() == LowLimit.getValue() )
00252 {
00253 _Value = HighLimit.getValue();
00254 return;
00255 }
00256
00257 switch( Mode.getValue() )
00258 {
00259 case STOP_AT_LIMIT :
00260 {
00261 if( _Value > HighLimit.getValue() )
00262 {
00263 _Value = HighLimit.getValue();
00264 }
00265 if( _Value < LowLimit.getValue() )
00266 {
00267 _Value = LowLimit.getValue();
00268 }
00269 }
00270 break;
00271
00272 case LOOP :
00273 {
00274 // value is higher than high limit
00275 if( _Value > HighLimit.getValue() )
00276 {
00277 _Value = LowLimit.getValue() + _Value - HighLimit.getValue() - 1;
00278 }
00279 // value is lower than low limit
00280 else
00281 {
00282 if( _Value < LowLimit.getValue() )
00283 {
00284 _Value = HighLimit.getValue() - (LowLimit.getValue() -_Value) + 1;
00285 }
00286 }
00287 }
00288 break;
00289
00290 case SHUTTLE :
00291 {
00292 // value is higher than high limit
00293 if( _Value > HighLimit.getValue() )
00294 {
00295 _Value = HighLimit.getValue() - (_Value - HighLimit.getValue());
00296 Step.setValue( -Step.getValue() );
00297 }
00298 // value is lower than low limit
00299 else
00300 {
00301 if( _Value < LowLimit.getValue() )
00302 {
00303 _Value = LowLimit.getValue() + LowLimit.getValue() - _Value;
00304 Step.setValue( -Step.getValue() );
00305 }
00306 }
00307 }
00308 break;
00309
00310 case DOWN_UP :
00311 {
00312 // low limit reached, we go up
00313 if( _Value < LowLimit.getValue() )
00314 {
00315 _Value = LowLimit.getValue() + LowLimit.getValue() - _Value;
00316 Step.setValue( -Step.getValue() );
00317 }
00318 else
00319 {
00320 // high limit reached we stop
00321 if( _Value > HighLimit.getValue() )
00322 {
00323 _Value = HighLimit.getValue();
00324 }
00325 }
00326 }
00327 break;
00328
00329 case UP_DOWN :
00330 {
00331 // high limit reached, we go down
00332 if( _Value > HighLimit.getValue() )
00333 {
00334 _Value = HighLimit.getValue() - (_Value - HighLimit.getValue());
00335 Step.setValue( -Step.getValue() );
00336 }
00337 else
00338 {
00339 // low limit reached, we stop
00340 if( _Value < LowLimit.getValue() )
00341 {
00342 _Value = LowLimit.getValue();
00343 }
00344 }
00345 }
00346 }
00347
00348 } // manageRunningMode //
|
|
|
update the variable Definition at line 117 of file logic_variable.cpp.
00118 {
00119
00120
00121 } // processLogic //
|
|
|
Reimplemented from NLLOGIC::CLogicVariable. Definition at line 387 of file logic_variable.cpp. References Control, NLLOGIC::getXMLProp(), HighLimit, LowLimit, Period, NLLOGIC::CLogicVariable::setValue(), and NLLOGIC::xmlCheckNodeName().
00388 {
00389 xmlCheckNodeName (node, "COUNTER");
00390
00391 _Name = getXMLProp (node, "Name");
00392 _Value = atoiInt64 (getXMLProp (node, "Value").c_str());
00393 _Verbose = atoi(getXMLProp (node, "Verbose").c_str()) == 1;
00394 Period.setValue(atoiInt64(getXMLProp (node, "Period").c_str()));
00395 Phase.setValue(atoiInt64(getXMLProp (node, "Phase").c_str()));
00396 Step.setValue(atoiInt64(getXMLProp (node, "Step").c_str()));
00397 LowLimit.setValue(atoiInt64(getXMLProp (node, "LowLimit").c_str()));
00398 HighLimit.setValue(atoiInt64(getXMLProp (node, "HighLimit").c_str()));
00399 Mode.setValue(atoiInt64(getXMLProp (node, "Mode").c_str()));
00400 Control.setValue(atoiInt64(getXMLProp (node, "Control").c_str()));
00401 }
|
|
|
Set the variable name
Definition at line 69 of file logic_variable.h. Referenced by CLogicCounter().
00069 { _Name = name; }
|
|
|
Set the variable value
Definition at line 56 of file logic_variable.cpp. References NLLOGIC::CLogicVariable::_Verbose, nlinfo, sint64, and value. Referenced by CLogicCounter(), manageRunningMode(), read(), and update().
|
|
|
Set the verbose mode active or inactive
Definition at line 98 of file logic_variable.h. References NLLOGIC::CLogicVariable::_Verbose.
00098 { _Verbose = b; }
|
|
|
update the counter Definition at line 194 of file logic_variable.cpp. References _TickCount, Control, FAST_FORWARD, NLLOGIC::CLogicVariable::getValue(), HighLimit, LowLimit, manageRunningMode(), nlinfo, Period, REWIND, RUN, NLLOGIC::CLogicVariable::setValue(), and STOPPED.
00195 {
00196 if( Control.getValue() == STOPPED )
00197 {
00198 return;
00199 }
00200
00201 _TickCount++;
00202 if( _TickCount < Period.getValue() )
00203 {
00204 return;
00205 }
00206 else
00207 {
00208 _TickCount = 0;
00209 }
00210
00211 switch( Control.getValue() )
00212 {
00213 case RUN :
00214 {
00215 _Value += Step.getValue();
00216 manageRunningMode();
00217 }
00218 break;
00219
00220 case REWIND :
00221 {
00222 _Value = LowLimit.getValue();
00223 Control.setValue( RUN );
00224 }
00225 break;
00226
00227 case FAST_FORWARD :
00228 {
00229 _Value = HighLimit.getValue();
00230 Control.setValue( RUN );
00231 }
00232 break;
00233
00234 }
00235
00236 if( _Verbose )
00237 {
00238 nlinfo("variable \"%s\" value is now %f",_Name.c_str(),(double)_Value);
00239 }
00240
00241 } // update //
|
|
|
serial Reimplemented from NLLOGIC::CLogicVariable. Definition at line 372 of file logic_variable.cpp. References Control, NLLOGIC::CLogicVariable::getValue(), HighLimit, LowLimit, and Period.
00373 {
00374 xmlNodePtr elmPtr = xmlNewChild ( node, NULL, (const xmlChar*)"COUNTER", NULL);
00375 xmlSetProp (elmPtr, (const xmlChar*)"Name", (const xmlChar*)_Name.c_str());
00376 xmlSetProp (elmPtr, (const xmlChar*)"Value", (const xmlChar*)toString(_Value).c_str());
00377 xmlSetProp (elmPtr, (const xmlChar*)"Verbose", (const xmlChar*)toString(_Verbose).c_str());
00378 xmlSetProp (elmPtr, (const xmlChar*)"Period", (const xmlChar*)toString(Period.getValue()).c_str());
00379 xmlSetProp (elmPtr, (const xmlChar*)"Phase", (const xmlChar*)toString(Phase.getValue()).c_str());
00380 xmlSetProp (elmPtr, (const xmlChar*)"Step", (const xmlChar*)toString(Step.getValue()).c_str());
00381 xmlSetProp (elmPtr, (const xmlChar*)"LowLimit", (const xmlChar*)toString(LowLimit.getValue()).c_str());
00382 xmlSetProp (elmPtr, (const xmlChar*)"HighLimit", (const xmlChar*)toString(HighLimit.getValue()).c_str());
00383 xmlSetProp (elmPtr, (const xmlChar*)"Mode", (const xmlChar*)toString(Mode.getValue()).c_str());
00384 xmlSetProp (elmPtr, (const xmlChar*)"Control", (const xmlChar*)toString(Control.getValue()).c_str());
00385 }
|
|
|
variable name
Definition at line 52 of file logic_variable.h. |
|
|
Definition at line 134 of file logic_variable.h. Referenced by CLogicCounter(), and update(). |
|
|
variable value
Definition at line 49 of file logic_variable.h. |
|
|
true if verbose mode is active
Definition at line 55 of file logic_variable.h. Referenced by NLLOGIC::CLogicVariable::applyModification(), NLLOGIC::CLogicVariable::CLogicVariable(), NLLOGIC::CLogicVariable::read(), NLLOGIC::CLogicVariable::setValue(), NLLOGIC::CLogicVariable::setVerbose(), and NLLOGIC::CLogicVariable::write(). |
|
|
running state
Definition at line 178 of file logic_variable.h. Referenced by CLogicCounter(), read(), update(), and write(). |
|
|
higher limit for counter
Definition at line 171 of file logic_variable.h. Referenced by CLogicCounter(), manageRunningMode(), read(), update(), and write(). |
|
|
lower limit for counter
Definition at line 168 of file logic_variable.h. Referenced by CLogicCounter(), manageRunningMode(), read(), update(), and write(). |
|
|
running mode
Definition at line 175 of file logic_variable.h. |
|
|
period between inc( measured in game ticks )
Definition at line 159 of file logic_variable.h. Referenced by CLogicCounter(), read(), update(), and write(). |
|
|
time offset to apply with period
Definition at line 162 of file logic_variable.h. |
|
|
regular increment value( normally 1 or -1 )
Definition at line 165 of file logic_variable.h. |
1.3.6