Есть такая процедурка:
Код:
protected void hitChunk (String chunk, Shot shot) {
// --- Resolving the Chunk -------------------------------------------------
if(chunk.lastIndexOf("_")==-1) chunk += "_D"+chunkDamageVisible(chunk);
// --- Hit Energy in TNT Units ---------------------------------------------
float energy = shot.powerToTNT();
// --- Hit Energy in "Damage State Shift" Units ----------------------------
if(chunk.endsWith("_D0") && !chunk.startsWith("Gear")) {
if(energy>defaultUnitHit) {
energy = 1.0f + ((energy-defaultUnitHit)/FM.Sq.getToughness(part(chunk)));
}else {
energy /= defaultUnitHit;
}
}else {
energy /= FM.Sq.getToughness(part(chunk));
}
energy += FM.Sq.eAbsorber[part(chunk)];
// --- Damage State Shifts -------------------------------------------------
int nHits = (int)energy;
FM.Sq.eAbsorber[part(chunk)] = energy - nHits;
if(nHits>0) setDamager(shot.initiator,nHits);
nextDMGLevels(nHits, HIT_SHOT, chunk, shot.initiator);
}
вызывается в hitBone:
Код:
}else if(bone.startsWith("xwing")) { // --- wings --------------------------
if(bone.startsWith("xwinglin")) { // --- wing l in -----------------------
if(chunkDamageVisible("WingLIn")<3) {
hitChunk("WingLIn", shot);
}
}
Процедура nextDMGLevel включает очередной _Dx в зависимости от текущего...
__________________
Их восемь — нас двое. Расклад перед боем
Не наш, но мы будем играть!
Серёжа! Держись, нам не светит с тобою,
Но козыри надо равнять.
© В. Высоцкий
__________________