Показать сообщение отдельно
Старый 12.02.2010, 23:45   #11
ZloyPetrushkO
Местный
 
Регистрация: 31.05.2008
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от SLON Посмотреть сообщение

Осколочное действие

расчет количества осколков
void computeSplinterParams(float f) {
float f_0_ = f * 0.9F;
по нашим прикидкам -это определение массы корпуса
nSplinters = f_0_ / 0.015F; количество полезных осколков массой 15гр
if (nSplinters < 0.5F) не понятно, но так думаем - условие округления
nSplinters = 0.0F;
}
эт вроде все точно написал, добавить нечего


Цитата:
Сообщение от SLON Посмотреть сообщение


расчет скорости осколка на траектории разлета
public float computeSplinterSpeed(float f) {
if (f <= 0.01F)
f - 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_; я предполагаю, что это определение скорости летящего осколка
}
почти все верно, внес небольшие правки красным


Цитата:
Сообщение от SLON Посмотреть сообщение


распределение осколков
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; площадь окружности радиусом поражения бомбы(radius)
float f_5_ = 12.566371F * f_3_ * f_3_;площадь окружности с диаметром, равным расстоянию между целью и взрывом
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_);
условие если ... больше половины количества осколков то брать половину.
}
Цитата:
Сообщение от SLON Посмотреть сообщение



public boolean isMirage() {
if (!Actor.isValid(initiator))
return true;
return initiator.isNetMirror();
}
кажется условие поражения осколками, просчет ведется думаю еще где-то, если кто дополнит буду признателен, нерехожу на фугас.
непарься с етим. ето нужно для сетевой игры, когда взрыв рассчитываеться на др компе, а игрок видит только етот самый "мираж"
ZloyPetrushkO вне форума   Ответить с цитированием