AviaSkins.Forums

Вернуться   AviaSkins.Forums > Основные разделы > Моделирование и конструирование

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.04.2019, 15:25   #401
Vasya
Звичайна людина на Землі
 
Аватар для Vasya
 
Регистрация: 06.11.2011
Адрес: Україна, м.Київ, Печерський район, вул. Кіквідзе
Сообщений: 7,133
Радость

Конечно хуки.
Без хуков 3До в окне простого редактора не соберётся.
На нахер вар_класс.
Только Property.set(class1.
Я всегда исправляю, что бы Ил не сходил с ума от разночтений в коде.
Vasya вне форума   Ответить с цитированием
Старый 15.10.2019, 11:14   #402
Vasya
Звичайна людина на Землі
 
Аватар для Vasya
 
Регистрация: 06.11.2011
Адрес: Україна, м.Київ, Печерський район, вул. Кіквідзе
Сообщений: 7,133
Вопрос

У меня большая прозьба:
нужно организовать ручное управление радиатором при автомате шага.
Такой вид кода не компилится.
Код:
public void onAircraftLoaded()
    {
        super.onAircraftLoaded();
        if(super.FM.isPlayers())
            ((FlightModelMain) (super.FM)).EI.engines[0].setControlRadiatorAuto(false);        
    }
Как правильно записать ручное управление радиатором?
При том, что в классе уже есть метод радиатора.
Код:
public void update(float f)
    {
        if(Math.abs(flapps - kangle) > 0.01F)
        {
            flapps = kangle;
            hierMesh().chunkSetAngles("Oil1_D0", 0.0F, -20F * kangle, 0.0F);
        }
        kangle = 0.95F * kangle + 0.05F * FM.EI.engines[0].getControlRadiator();
        if(kangle > 1.0F)
            kangle = 1.0F;
        afterburnerhud();
        super.update(f);
    }
Vasya вне форума   Ответить с цитированием
Старый 15.10.2019, 21:21   #403
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,659
По умолчанию

Василий, я не специалист и у нас разные компиляторы-декомпиляторы, но постараюсь помочь.
Первое, у меня не компилировался код с двумя методами управления чем либо, створки юбки капота, или масляный радиатор, управляющие поверхности, не важно. Метод управления для данной части должен быть один.
Вот как на Ки-30 (на скрине).
Требуется уточнение, для каких частей системы охлаждения мотора нужна анимация? К примеру на Гамма-5 или R-5 есть анимация только масляного радиатора. Вот пример выдвижного радиатора Р-5
Код:
    
    public void update(float f) {
	float f_6_ = FM.EI.engines[0].getControlRadiator();
	Aircraft.xyz[0] = 0.0F;
	Aircraft.xyz[1] = 0.0F;
	Aircraft.xyz[2] = f_6_ * -0.45F;
	Aircraft.ypr[0] = 0.0F;
	Aircraft.ypr[1] = 0.0F;
	Aircraft.ypr[2] = 0.0F;
	if (Math.abs(flapps - xyz[2]) > 0.01F) {
	    flapps = xyz[2];
	    hierMesh().chunkSetLocate("Water_D0", Aircraft.xyz, Aircraft.ypr);
	}
Миниатюры
Нажмите на изображение для увеличения
Название: Новый рисунок.jpg
Просмотров: 134
Размер:	249.2 Кб
ID:	62572  
tvister вне форума   Ответить с цитированием
Старый 15.10.2019, 21:35   #404
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,659
По умолчанию

Вот пример Ки-51, у этой модели анимированы и створки юбки капота и масляный радиатор.
Код:
    
    public void update(float f) {
	super.update(f);
	float f_2_ = FM.EI.engines[0].getControlRadiator();
	if (Math.abs(flapps - f_2_) > 0.01F) {
	    flapps = f_2_;
	    hierMesh().chunkSetAngles("Oil_radiat_D0", 0.0F, -15.0F * f_2_,
				      0.0F);
	    for (int i = 1; i < 11; i++)
		hierMesh().chunkSetAngles("Water" + i + "_D0", 0.0F,
					  22.0F * f_2_, 0.0F);
	}
Причем масляный радиатор не опускается под прямым углом к корпусу как у Р-5, а поворачивается на -15 градусов поперек оси движения самолета.
tvister вне форума   Ответить с цитированием
Старый 15.10.2019, 22:28   #405
Vasya
Звичайна людина на Землі
 
Аватар для Vasya
 
Регистрация: 06.11.2011
Адрес: Україна, м.Київ, Печерський район, вул. Кіквідзе
Сообщений: 7,133
По умолчанию

Цитата:
Сообщение от tvister Посмотреть сообщение
Василий, я не специалист и у нас разные компиляторы-декомпиляторы, но постараюсь помочь.
................
Спасибо за отклик!
Мне не анимация нужна.
Анимацию я вписывать немного умею - несколько створок заставить двигаться - не проблема.
У меня другой вопрос:
нужно заставить работать радиатор именно в ручном режиме.,
сейчас радиатор в автоматическом режиме.,
пропеллер тип-8(лучше - конечно - тип 7, так будет оригиналнее).,
у Фоки-4-8 нет раздела анимации створок, поэтому радиатор ручной.,
у Фоки-9 есть в классе код анимации, поэтому шаг автоматический.,
для Темпеста нужно заставить кодом работать радиатор в ручном режиме
при автомате винта, а они увязаны в коде в глубинах классов.
Если поставить шаг винта ручной - то и радиатор будет ручной.
Но.... у мотора Темпеста обороты 3700 и винт весом 225 кг.
При сбросе газа самолёт переворачивается и устремляется к земле,
никакие манипуляции русом не помогают, только добавление тяги до 100 проц.
Это такой баг в игре - сильно большие обороты - не стандартные для Ила.
В дефолте обороты снизили до 3150, что бы не было бага переворачивания самолёта.
Поэтому и спрашивал тут как вписать принудительное регулирование радиатора именно кодом в классе.
Есть код на тип афтербуннера - и он работает.
Причём тип и название афтербуннера пишется двумя разными методами
и они прекрасно уживаются в одном классе.
Такие пояснения относительного моего вопроса.

Последний раз редактировалось Vasya; 15.10.2019 в 22:39.
Vasya вне форума   Ответить с цитированием
Старый 15.10.2019, 23:15   #406
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,659
По умолчанию

Цитата:
Сообщение от Vasya Посмотреть сообщение
У меня другой вопрос:
нужно заставить работать радиатор именно в ручном режиме.,
сейчас радиатор в автоматическом режиме.,
Увы Василий, я немножко разобрался с анимацией, но более высокие материи мне не по плечу .
Коллеги, может кто, что дельное подскажет?
tvister вне форума   Ответить с цитированием
Старый 15.03.2021, 01:40   #407
ildar
Чёрный бомбер
 
Аватар для ildar
 
Регистрация: 26.11.2018
Адрес: Бишкек, Кыргызстан
Сообщений: 224
По умолчанию

Вопрос к знатокам:

Как из одного класса запустить другой класс?
__________________
Я всё понял! Это неправильные пчёлы! И они, наверное, делают неправильный мёд! © Вирпилы о картоделах, админах серверов и разрабах игры
От этих пчёл всего можно ждать. Разве знаешь, что придёт в голову этим пчёлам... © Картоделы, админы серверов и разрабы игры о вирпилах
ildar вне форума   Ответить с цитированием
Старый 15.03.2021, 09:27   #408
Asura
Модератор
 
Аватар для Asura
 
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,558
По умолчанию

Цитата:
Сообщение от ildar Посмотреть сообщение
Вопрос к знатокам:

Как из одного класса запустить другой класс?
Не совсем понятен вопрос... Что конкретно надо сделать?
__________________
Их восемь — нас двое. Расклад перед боем
Не наш, но мы будем играть!
Серёжа! Держись, нам не светит с тобою,
Но козыри надо равнять.

© В. Высоцкий
__________________

Asura вне форума   Ответить с цитированием
Старый 15.03.2021, 12:52   #409
ildar
Чёрный бомбер
 
Аватар для ildar
 
Регистрация: 26.11.2018
Адрес: Бишкек, Кыргызстан
Сообщений: 224
По умолчанию

Цитата:
Сообщение от Asura Посмотреть сообщение
Не совсем понятен вопрос... Что конкретно надо сделать?
Как бы это не звучало банально, но надо буквально, чтобы один класс запускал на выполнение другой класс, как программы через батник.

Теперь более подробно, что нужно.

Есть мой мод радаров. Он состоит из трех классов:

RotatingRadarGeneric - главный класс
RotatingRadar - класс, содержащий список радаров
RadarFreya - дополнительный класс под каждый радар, содержит код анимации вращения антенны и запускает цикл работы мода в RotatingRadarGeneric

Каждый радар выводит на экран игрока свои команды наведения на свою цель. При большом количестве радаров на карте это создает проблему.

Я сейчас делаю дополнительный функционал в виде КП наведения, который обрабатывает поступающие данные о целях с нескольких радаров, выбирает одну из них и наводить на неё самолет игрока.

По мере работы узнал, что игра для каждого радара запускает свой отдельный экземпляр класса RotatingRadarGeneric, что не позволяет встроить код КП наведения в RotatingRadarGeneric, так как этот код также будет выполнятся в нескольких экземплярах.

Поэтому нужно выносить код КП в отдельный класс, однако есть проблема как его запускать. Тут есть два выхода: создать отдельный объект КП наведения при установке на карте которого будет запускаться его класс, либо не делать отдельный объект и запускать его класс по вызову из другого класса, хочу это сделать через RotatingRadar, надеюсь игра не запускает RotatingRadar в нескольких экземплярах, как это она делает с RotatingRadarGeneric
__________________
Я всё понял! Это неправильные пчёлы! И они, наверное, делают неправильный мёд! © Вирпилы о картоделах, админах серверов и разрабах игры
От этих пчёл всего можно ждать. Разве знаешь, что придёт в голову этим пчёлам... © Картоделы, админы серверов и разрабы игры о вирпилах
ildar вне форума   Ответить с цитированием
Старый 17.03.2021, 10:54   #410
Asura
Модератор
 
Аватар для Asura
 
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,558
По умолчанию

тут сложный вопрос - как разделить однотипные объекты?
В общем наверно можно в КП читать параметры с объектов (например высоту и удаленность) и после сортировки их выводить на экран.

то есть в RotatingRadarGeneric ты создаешь переменные

public float h;
public float d;

эти переменные внутри класса меняются у каждого объекта по своему

в классе КП

private RotatingRadarGeneric rrg;

и читаешь переменные из класса

rrg.h
rrg.d

остается вопрос - как распознать чьи это переменные? наверно можно при создании объекта генерить его уникальный код и передавать так же в КП
__________________
Их восемь — нас двое. Расклад перед боем
Не наш, но мы будем играть!
Серёжа! Держись, нам не светит с тобою,
Но козыри надо равнять.

© В. Высоцкий
__________________

Asura вне форума   Ответить с цитированием
Старый 27.03.2021, 15:32   #411
ildar
Чёрный бомбер
 
Аватар для ildar
 
Регистрация: 26.11.2018
Адрес: Бишкек, Кыргызстан
Сообщений: 224
По умолчанию

Asura
Не совсем так.

Вот код метода в классе RotatingRadarGeneric, который позволяет радару выбирать самолет противника на карте:

Код:
      List var1 = Engine.targets();      \\ Создается массив всех целей на карте (самолетов\кораблей\танков\артиллерии и т.д.)
      int var2 = var1.size();         \\ определяется размер  этого массива (если проще количество целей на карте)
      Actor var3;   \\ создается переменная для цели

      for(int var4 = 0; var4 < var2; ++var4) {    \\ создается цикл, который начинает проверять все цели в массиве на соответствие выбранным ниже фильтрам 
         var3 = (Actor)var1.get(var4);    \\ присвоение переменной цели название конкретной цели из массива для проверки
		 
         if (var3 instanceof Aircraft && var3.getArmy() != World.getPlayerArmy()) {	 \\ фильтр, выбирает из массива целей только самолеты, которые не принадлежат команде игрока

       HUD.log("Противник " + var3);  \\ пример, дальнейшего действия с полученным названием противника, в данном случае на экране игрока выводится надпись "Противник com.maddox.il2.objects.air.HS_129B2@31e6", где жирный шрифтом указано название цели для игры (синим шрифтом указан его уникальный ID на данной карте)
                                 }
               }
Здесь приведен сильно упрощенный код, в моде он гораздо сложнее с кучей проверок

Таким образом в переменной var3 мы получаем нужное нам уникальное название цели, с которым мы можем дальше работать.

Так вот, этот метод вызывается с определенной периодичностью (обычно 30 секунд).
Нам нужно этот var3 внести в другой массив, с которым и будет работать наш КП.

Для этого используется такой код

Код:
List enemy = new ArrayList();   \\ создаем пустой саморасширяющийся массив enemy, так как мы заранее не знаем сколько будет целей
enemy.add(var3);    \\   команда добавление значение переменной var3 в массив enemy
Далее КП уже работает с этим массивом enemy

Так вот, этот код нельзя вставить в метод поиска целей радаром, так как первая команда создает пустой массив, а так как метод поиска целей цикличен (запускается каждый 30 секунд), то при каждом своем выполнение он будет удалять и заново создавать массив enemy

Таким образом массив надо создавать вне этого метода, а в методе надо оставить только команду enemy.add(var3);

Однако, создавать массив enemy также нельзя создавать и в самом классе RotatingRadarGeneric потому, что как было установлено выше, для каждого радара запускается свой экземпляр класса RotatingRadarGeneric

В результате имеем следующее: массив enemy создается в классе КП, в методе поиска радаром целей в классе RotatingRadarGeneric оставляем только команду добавления var3 в массив enemy в классе КП

Вопрос в следующем, как именно из метода передать значение var3 в массив enemy в другом классе КП.

Если сделать так:
В RotatingRadarGeneric добавляем строку Private GroundControlInterception gci;
в методе поиска целей добавить gci.enemy.add(var3);
а в самом классе КП сделать enemy открытым строкой public Actor enemy;

То при компиляции получим следующую ошибку

Код:
RotatingRadarGeneric.java:766: error: cannot find symbol
gci.enemy.add(var3);
           ^
  symbol:   method add(Actor)
  location: variable enemy of type Actor
1 error
__________________
Я всё понял! Это неправильные пчёлы! И они, наверное, делают неправильный мёд! © Вирпилы о картоделах, админах серверов и разрабах игры
От этих пчёл всего можно ждать. Разве знаешь, что придёт в голову этим пчёлам... © Картоделы, админы серверов и разрабы игры о вирпилах

Последний раз редактировалось ildar; 27.03.2021 в 15:39.
ildar вне форума   Ответить с цитированием
Старый 28.03.2021, 13:07   #412
Asura
Модератор
 
Аватар для Asura
 
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,558
По умолчанию

А если попробовать сделать так -

Сделать основной класс NewRadarGeneric, в нем создавать массив целей. Класс RotatingRadarGeneric сделать наследником NewRadarGeneric

public class RotatingRadarGeneric extends NewRadarGeneric

и в нем заполнять массив

класс КП тоже наследник NewRadarGeneric - в нем читать массив и выдавать целеуказания.
__________________
Их восемь — нас двое. Расклад перед боем
Не наш, но мы будем играть!
Серёжа! Держись, нам не светит с тобою,
Но козыри надо равнять.

© В. Высоцкий
__________________

Asura вне форума   Ответить с цитированием
Старый 28.03.2021, 13:19   #413
Asura
Модератор
 
Аватар для Asura
 
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,558
По умолчанию

А если попробовать сделать так -

Сделать основной класс NewRadarGeneric, в нем создавать массив целей. Класс RotatingRadarGeneric сделать наследником NewRadarGeneric

public class RotatingRadarGeneric extends NewRadarGeneric

и в нем заполнять массив

класс КП тоже наследник NewRadarGeneric - в нем читать массив и выдавать целеуказания.
__________________
Их восемь — нас двое. Расклад перед боем
Не наш, но мы будем играть!
Серёжа! Держись, нам не светит с тобою,
Но козыри надо равнять.

© В. Высоцкий
__________________

Asura вне форума   Ответить с цитированием
Старый 28.03.2021, 13:50   #414
ildar
Чёрный бомбер
 
Аватар для ildar
 
Регистрация: 26.11.2018
Адрес: Бишкек, Кыргызстан
Сообщений: 224
По умолчанию

Цитата:
Сообщение от Asura Посмотреть сообщение
А если попробовать сделать так -

Сделать основной класс NewRadarGeneric, в нем создавать массив целей. Класс RotatingRadarGeneric сделать наследником NewRadarGeneric

public class RotatingRadarGeneric extends NewRadarGeneric

и в нем заполнять массив

класс КП тоже наследник NewRadarGeneric - в нем читать массив и выдавать целеуказания.
Не получится, RotatingRadarGeneric уже является наследником:

Код:
public abstract class RotatingRadarGeneric extends ActorHMesh implements MsgExplosionListener, MsgShotListener, Obstacle, Prey, ActorAlign
__________________
Я всё понял! Это неправильные пчёлы! И они, наверное, делают неправильный мёд! © Вирпилы о картоделах, админах серверов и разрабах игры
От этих пчёл всего можно ждать. Разве знаешь, что придёт в голову этим пчёлам... © Картоделы, админы серверов и разрабы игры о вирпилах
ildar вне форума   Ответить с цитированием
Старый 28.03.2021, 15:15   #415
Asura
Модератор
 
Аватар для Asura
 
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,558
По умолчанию

А наследником ActorHMesh сделать класс КП. Изменить иерархию.
__________________
Их восемь — нас двое. Расклад перед боем
Не наш, но мы будем играть!
Серёжа! Держись, нам не светит с тобою,
Но козыри надо равнять.

© В. Высоцкий
__________________

Asura вне форума   Ответить с цитированием
Старый 28.03.2021, 17:06   #416
ildar
Чёрный бомбер
 
Аватар для ildar
 
Регистрация: 26.11.2018
Адрес: Бишкек, Кыргызстан
Сообщений: 224
По умолчанию

Цитата:
Сообщение от Asura Посмотреть сообщение
А наследником ActorHMesh сделать класс КП. Изменить иерархию.
В общем, вышестоящую ошибку при компиляции я убрал при помощи замены:

Код:
public Actor enemy;
на

Код:
public List enemy;
Однако, в игре идет ошибка (см. скрин)



По номеру строки указано это:

Код:
gci.enemy.add(var3);
Сменил extend у класса КП на ActorHMesh

Все равно такая же ошибка, что и на скине.

Решил вообще сделать самую простую проверку:

Цитата:
то есть в RotatingRadarGeneric ты создаешь переменные

public float h;
public float d;

эти переменные внутри класса меняются у каждого объекта по своему

в классе КП

private RotatingRadarGeneric rrg;

и читаешь переменные из класса

rrg.h
rrg.d
менял extend у класса КП и на ActorHMesh и на RotatingRadarGeneric

Везде ошибка, что и на скрине, игра ругается на строку, где указана сокращенная ссылка rrg.h

То есть способ с
Код:
private RotatingRadarGeneric rrg;
rrg.h
почему то не работает в игре, хотя все компилируется без проблем
Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 90
Размер:	595.9 Кб
ID:	69587  
__________________
Я всё понял! Это неправильные пчёлы! И они, наверное, делают неправильный мёд! © Вирпилы о картоделах, админах серверов и разрабах игры
От этих пчёл всего можно ждать. Разве знаешь, что придёт в голову этим пчёлам... © Картоделы, админы серверов и разрабы игры о вирпилах

Последний раз редактировалось ildar; 28.03.2021 в 17:14.
ildar вне форума   Ответить с цитированием
Старый 28.03.2021, 17:39   #417
Asura
Модератор
 
Аватар для Asura
 
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,558
По умолчанию

Я бы все таки попробовал сделать по аналогии классов тех же маяков - поменять иерархию наследования.
__________________
Их восемь — нас двое. Расклад перед боем
Не наш, но мы будем играть!
Серёжа! Держись, нам не светит с тобою,
Но козыри надо равнять.

© В. Высоцкий
__________________

Asura вне форума   Ответить с цитированием
Старый 28.03.2021, 21:31   #418
ildar
Чёрный бомбер
 
Аватар для ildar
 
Регистрация: 26.11.2018
Адрес: Бишкек, Кыргызстан
Сообщений: 224
По умолчанию

Цитата:
Сообщение от Asura Посмотреть сообщение
Я бы все таки попробовал сделать по аналогии классов тех же маяков - поменять иерархию наследования.
В общем разобрался.

Посмотрел как реализован игровой массив Engine.targets и как туда игра добавляет новые значения, и выяснил следующее:

Вместо команды

Код:
Engine.targets.add(var24);
должна быть такая команда

Код:
Engine.targets().add(var24);
То есть должны быть круглые скобки перед .add

Теперь все заработало!
__________________
Я всё понял! Это неправильные пчёлы! И они, наверное, делают неправильный мёд! © Вирпилы о картоделах, админах серверов и разрабах игры
От этих пчёл всего можно ждать. Разве знаешь, что придёт в голову этим пчёлам... © Картоделы, админы серверов и разрабы игры о вирпилах
ildar вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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


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


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