AviaSkins.Forums

Вернуться   AviaSkins.Forums > Основные разделы > Моды для Ил-2 > Баллада об оружии

Важная информация

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.02.2010, 22:11   #11
23AG_Black
Местный
 
Регистрация: 11.11.2009
Сообщений: 243
По умолчанию

Цитата:
Сообщение от 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 метров... (или откуда черпали вдохновение илоделы)...
Цирк уехал, клоуны остались...

Последний раз редактировалось 23AG_Black; 12.02.2010 в 22:13.
23AG_Black вне форума   Ответить с цитированием
 


Здесь присутствуют: 2 (пользователей: 0 , гостей: 2)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 11:41. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
Рейтинг@Mail.ru