Цитата:
Сообщение от SLON
Сразу скажу, что времени у меня малом, могу в некоторых моментах ошибаться...
package com.maddox.il2.ai;
import com.maddox.JGP.Point3d;
import com.maddox.il2.engine.Actor;
import com.maddox.il2.engine.ActorMesh;
public class Explosion
{
public static final int POWER_SPLASH = 0;
public static final int POWER_SPLINTERS = 1;
public static final int POWER_NAPALM = 2;
public static final float SPLINTER_MASS = 0.015F;
private static final float SPLINTERS_K = 0.9F;
public String chunkName;
public Point3d p = new Point3d();
public float radius;
public Actor initiator;
public float power;
public int powerType;
private float nSplinters;
Осколочное действие
расчет количества осколков
void computeSplinterParams(float f) {
float f_0_ = f * 0.9F; по нашим прикидкам -это определение массы корпуса
nSplinters = f_0_ / 0.015F; количество полезных осколков массой 15гр
if (nSplinters < 0.5F) не понятно, но так думаем - условие округления
nSplinters = 0.0F;
}
расчет скорости осколка на траектории разлета
public float computeSplinterSpeed(float f) {
if (f <= 0.01F) f - предполагаем, что эта некая дистанция, тогда, если выполняется то скорость = 650
return 650.0F;
if (f >= radius) если это растояние больше или равно радиусу (параметр для каждой бомбы) то скорость =150
return 150.0F;
float f_1_ = f / radius; коэффициент отношения некой дистанции к радиусу
return 650.0F * (1.0F - f_1_) + 150.0F * f_1_; я предполагаю, что это определение скорости летящего осколка
}
распределение осколков
public void computeSplintersHit(Point3d point3d, float f, float f_2_,
float[] fs) {
float f_3_ = (float) point3d.distance(p) - f; нахождение какого-то растояния
if (f_3_ <= 0.0010F) {
fs[0] = nSplinters * 0.5F;
fs[1] = computeSplinterSpeed(f_3_);
} условие и запись толи в массив, толи в матрицу
float f_4_ = 3.1415927F * f * f; площадь окружности радиусом "f"
float f_5_ = 12.566371F * f_3_ * f_3_;площадь поверхности шара радиусом "f3" считали пару строчек выше
float f_6_ = nSplinters * f_4_ / f_5_; никак не вспомню отношение площадей помноженное на ко-во осколков
if (f_6_ >= nSplinters * 0.5F)
f_6_ = nSplinters * 0.5F;
fs[0] = f_6_;
fs[1] = computeSplinterSpeed(f_3_); условие если ... больше половины количества осколков то брать половину.
}
public boolean isMirage() {
if (!Actor.isValid(initiator))
return true;
return initiator.isNetMirror();
} кажется условие поражения осколками, просчет ведется думаю еще где-то, если кто дополнит буду признателен, нерехожу на фугас.
|
писец... если это так и есть... Давно я таких шаровых коней в вакууме не видел...
Осколки мы значит по площади шара равномерненько разбрасываем... дожили, мля... Я кажется теперь догадываюсь, кто написал муйню про вероятность поражения осколками гранаты Ф1 на дистанции 200 метров... (или откуда черпали вдохновение илоделы)...
Цирк уехал, клоуны остались...