| 1352 | //---------------------------------------------------------------------------- |
| 1353 | |
| 1354 | void ShapeBase::processTick(const Move* move) |
| 1355 | { |
| 1356 | PROFILE_SCOPE( ShapeBase_ProcessTick ); |
| 1357 | |
| 1358 | // Energy management |
| 1359 | if (mDamageState == Enabled && mDataBlock->inheritEnergyFromMount == false) { |
| 1360 | F32 store = mEnergy; |
| 1361 | mEnergy += mRechargeRate; |
| 1362 | if (mEnergy > mDataBlock->maxEnergy) |
| 1363 | mEnergy = mDataBlock->maxEnergy; |
| 1364 | else |
| 1365 | if (mEnergy < 0) |
| 1366 | mEnergy = 0; |
| 1367 | |
| 1368 | // Virtual setEnergyLevel is used here by some derived classes to |
| 1369 | // decide whether they really want to set the energy mask bit. |
| 1370 | if (mEnergy != store) |
| 1371 | setEnergyLevel(mEnergy); |
| 1372 | } |
| 1373 | |
| 1374 | // Repair management |
| 1375 | if (mDataBlock->isInvincible == false) |
| 1376 | { |
| 1377 | F32 store = mDamage; |
| 1378 | mDamage -= mRepairRate; |
| 1379 | mDamage = mClampF(mDamage, 0.f, mDataBlock->maxDamage); |
| 1380 | |
| 1381 | if (mRepairReserve > mDamage) |
| 1382 | mRepairReserve = mDamage; |
| 1383 | if (mRepairReserve > 0.0) |
| 1384 | { |
| 1385 | F32 rate = getMin(mDataBlock->repairRate, mRepairReserve); |
| 1386 | mDamage -= rate; |
| 1387 | mRepairReserve -= rate; |
| 1388 | } |
| 1389 | |
| 1390 | if (store != mDamage) |
| 1391 | { |
| 1392 | updateDamageLevel(); |
| 1393 | if (isServerObject()) { |
| 1394 | setMaskBits(DamageMask); |
| 1395 | mDataBlock->onDamage_callback( this, mDamage - store ); |
| 1396 | } |
| 1397 | } |
| 1398 | } |
| 1399 | |
| 1400 | if (isServerObject()) { |
| 1401 | // Server only... |
| 1402 | advanceThreads(TickSec); |
| 1403 | updateServerAudio(); |
| 1404 | |
| 1405 | // update wet state |
| 1406 | setImageWetState(0, mWaterCoverage > 0.4); // more than 40 percent covered |
| 1407 | |
| 1408 | // update motion state |
| 1409 | mMoveMotion = false; |
| 1410 | if (move && (move->x || move->y || move->z)) |
| 1411 | { |
nothing calls this directly
no test coverage detected