???
Математика на уровне МГУ

Показано с 1 по 25 из 789

Тема: Вопросы.

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пилот Аватар для LePage
    Регистрация
    17.07.2009
    Адрес
    Simbirsk
    Возраст
    56
    Сообщений
    511

    Re: Вопросы.

    Цитата Сообщение от Small_Bee Посмотреть сообщение
    Страна-производитель, имхо, тебе мало поможет. Потому что у одной и той же страны та же скорость может измеряться и в милях и в узлах (поправьте, если не прав).

    Я бы примерно вот так сделал, навскидку.

    Класс AircraftObserver, уже упомянутый. В OnTickGame обновляет состояние; смотрит за GamePlay.gpPlayer().Place() - самолет/что угодно, где сидит игрок в сингл-плеере.
    Он же, в зависимости от того, что в GamePlay.gpPlayer().Place() создает требуемый конкретный экземпляр IMeasureConverter (по стране, по типу самолета или предпочтениям юзера)
    Структура, скажем AircraftParameters, содержащая снятые в текущей итерации данные по самолету и идентификатор скина, согласно текущему IMeasureConverter
    В AircraftObserver публичный метод, возвращающий текущую AircraftParameters по запросу с клиента. Данные сериализуются и отправляется клиенту.
    Клиент на основании полученных данных ставит нужный скин и нужные положения стрелочек/индикаторов. Все.
    Вот и где их найти?
    Можно вообще задачу перевода из одной системы в другую отдать клиенту, что бы сама миссия поменьше считала, отдавать сырые данные и идентификатор скина/"во что надо переводить".
    Так и хочу, но getParameter отдает данные в системе конкретных приборов кокпита, если пересел с мерса в спит данные тут-же идут уже в футах/милях. И вот ищу этот «идентификатор скина», сиречь идентификатор кокпита. Есть возможность читать абсолютные данные (Z_Orientation и т.д., они всегда в метрах) как сейчас сделал в версии Beta 2.3, но это немного читерно , в онлайн точно не стоит.
    Крайний раз редактировалось LePage; 09.12.2012 в 22:18.
    a` la guerre comme a` la guerre
    profile: Core i5-3570K 3.4GHz, ASUS GTX660 2Gb GDDR5, ASUS GT520 Silent 1Gb, LCD 1600x1200x32 IPS, LCD 1600x1200x32 MVA, LCD 800х600 TFT,
    RAM DDR3 32GB, OCZ Vertex 4 128 Gb, OCZ Vertex 450 128 Gb, 4xHDD WD 1 Tb FAEX, RAID10, WD 2 Tb FAEX, Win 7 x64, БП FSP 600Вт
    lepage.sytes.net:21000

  2. #2

    Re: Вопросы.

    Цитата Сообщение от LePage Посмотреть сообщение
    Вот и где их найти?
    Брать самолет, смотреть какие у него там приборы и в чем передают, и делать конвертер персонально. По каждому летабу. После смотреть на AiAircraft.InternalTypeName() и подставлять соответствующий.
    Например будет у тебя метод IMeasureConverter GetConverterForAircraft(string internalTypeName).

    Отсюда (примерный код)

    Код:
    AiAircraft airc = GamePlay.gpPlayer().Place() as AiAircraft;
    if (airc != null)
    {
        IMeasureConverter converter = GetConverterForAircraft(airc.InternalTypeName());
        AircraftObserver observer = new AircraftObserver(airc, converter);
    
        // юзаем observer;
    
    }


    --- Добавлено ---

    Цитата Сообщение от LePage Посмотреть сообщение
    в онлайн точно не стоит.
    Если сделаешь онлайн, а после объяснишь, как сделал, цены тебе не будет!

  3. #3
    Пилот Аватар для LePage
    Регистрация
    17.07.2009
    Адрес
    Simbirsk
    Возраст
    56
    Сообщений
    511

    Re: Вопросы.

    Цитата Сообщение от Small_Bee Посмотреть сообщение
    Брать самолет, смотреть какие у него там приборы и в чем передают, и делать конвертер персонально. По каждому летабу. После смотреть на AiAircraft.InternalTypeName() и подставлять соответствующий.
    Например будет у тебя метод IMeasureConverter GetConverterForAircraft(string internalTypeName).

    Отсюда (примерный код)

    Код:
    AiAircraft airc = GamePlay.gpPlayer().Place() as AiAircraft;
    if (airc != null)
    {
        IMeasureConverter converter = GetConverterForAircraft(airc.InternalTypeName());
        AircraftObserver observer = new AircraftObserver(airc, converter);
    
        // юзаем observer;
    
    }


    --- Добавлено ---



    Если сделаешь онлайн, а после объяснишь, как сделал, цены тебе не будет!
    Спасибо за AiAircraft.InternalTypeName(). Имхо, проще его значение передать клиенту и там отпарсить на предмет модели крафта. И уже понятно в чем данные идут.
    Эх, жаль нет подробного описания на манер этого http://www.sukhoi.ru/forum/attachmen...7&d=1311685400
    Naryv, у Вас еще чего нибудь подобного не завалялось в закромах?

    С онлайном, ИМХО, думаю так, как и сейчас поднимать HTTP-сервер в хост-миссии на дедикейтед-сервере, передавать ему хост-миссию, по IP идентифицировать игрока, и отсылать ему данные по его запросу + плюшки по управлению геймплеем. Оценочный траффик 100 кбит/с на игрока.
    a` la guerre comme a` la guerre
    profile: Core i5-3570K 3.4GHz, ASUS GTX660 2Gb GDDR5, ASUS GT520 Silent 1Gb, LCD 1600x1200x32 IPS, LCD 1600x1200x32 MVA, LCD 800х600 TFT,
    RAM DDR3 32GB, OCZ Vertex 4 128 Gb, OCZ Vertex 450 128 Gb, 4xHDD WD 1 Tb FAEX, RAID10, WD 2 Tb FAEX, Win 7 x64, БП FSP 600Вт
    lepage.sytes.net:21000

  4. #4

    Re: Вопросы.

    Цитата Сообщение от LePage Посмотреть сообщение
    Спасибо за AiAircraft.InternalTypeName(). Имхо, проще его значение передать клиенту и там отпарсить на предмет модели крафта. И уже понятно в чем данные идут.
    Эх, жаль нет подробного описания на манер этого http://www.sukhoi.ru/forum/attachmen...7&d=1311685400
    Naryv, у Вас еще чего нибудь подобного не завалялось в закромах?

    С онлайном, ИМХО, думаю так, как и сейчас поднимать HTTP-сервер в хост-миссии на дедикейтед-сервере, передавать ему хост-миссию, по IP идентифицировать игрока, и отсылать ему данные по его запросу + плюшки по управлению геймплеем. Оценочный траффик 100 кбит/с на игрока.
    Да в студии прямо открой и смотри все методы, свойства и т.п. Там все практически ясно без слов.
    С HTTP сервер не завалишь? Имхо тяжеловато будет.

  5. #5
    Пилот Аватар для LePage
    Регистрация
    17.07.2009
    Адрес
    Simbirsk
    Возраст
    56
    Сообщений
    511

    Re: Вопросы.

    Цитата Сообщение от Small_Bee Посмотреть сообщение
    Да в студии прямо открой и смотри все методы, свойства и т.п. Там все практически ясно без слов.
    С HTTP сервер не завалишь? Имхо тяжеловато будет.
    Нифига в студии неясно. maddox.game.world.AiAircraft.TypedName(), maddox.game.world.AiAircraft.Type(), maddox.game.world.AiActor.Name(), maddox.game.world.AiCart.InternalTypeName() : все что про них написано - тип и член . Найдите 10 отличий.
    Нажмите на изображение для увеличения. 

Название:	Untitled-5.gif 
Просмотров:	85 
Размер:	88.5 Кб 
ID:	162516

    з/ы/ Разработчики вроде писали что просчет миссий вынесли в отдельный поток? Но и сам НТТР-сервер простой до безобразия.
    a` la guerre comme a` la guerre
    profile: Core i5-3570K 3.4GHz, ASUS GTX660 2Gb GDDR5, ASUS GT520 Silent 1Gb, LCD 1600x1200x32 IPS, LCD 1600x1200x32 MVA, LCD 800х600 TFT,
    RAM DDR3 32GB, OCZ Vertex 4 128 Gb, OCZ Vertex 450 128 Gb, 4xHDD WD 1 Tb FAEX, RAID10, WD 2 Tb FAEX, Win 7 x64, БП FSP 600Вт
    lepage.sytes.net:21000

  6. #6
    Старший Офицер Форума
    Регистрация
    15.02.2002
    Адрес
    Moscow
    Возраст
    47
    Сообщений
    6,905
    Images
    51

    Re: Вопросы.

    Цитата Сообщение от LePage Посмотреть сообщение
    Нифига в студии неясно. maddox.game.world.AiAircraft.TypedName(), maddox.game.world.AiAircraft.Type(), maddox.game.world.AiActor.Name(), maddox.game.world.AiCart.InternalTypeName() : все что про них написано - тип и член . Найдите 10 отличий.
    Нажмите на изображение для увеличения. 

Название:	Untitled-5.gif 
Просмотров:	85 
Размер:	88.5 Кб 
ID:	162516
    Пардон, проглядел . Так как GetParameter закомментированного нет, но примерно так :
    Скрытый текст:
    Код:
    AiAircraft 
        bool IsKilled(); // убит ли юнит
        Regiment Regiment(); // см. ниже описание типа
        string HullNumber(); // борт. номер
        string CallSign();  // позывной, емнип, который голосом проговаривается
        int CallSignNumber();  // позывной номер 
        string TypedName();  // модель самолёта 
        AircraftType Type(); // тип самолёта см. ниже описание енума
        bool IsAirborne();  // рождение в воздухе
        AiAirGroup AirGroup(); // группа
    
          /// <summary>
          /// Sets visible integrity of the given limb.
          /// </summary>
          /// <param name="limb">Object limb to modify</param>
          /// <param name="value">Integrity modifier.
          /// <para>Negative values degrade integrity by given value.</para>
          /// <para>Positive values set absolute value, where applicable.</para></param>
          void hitLimb ( part.LimbNames limb, double value );
    
          /// <summary>
          /// Detaches given limb.
          /// </summary>
          /// <param name="limb">Object limb to detach</param>
          void cutLimb ( part.LimbNames limb );
    
          /// <summary>
          /// Activates given named damage.
          /// </summary>
          /// <param name="type">Flag type</param>
          void hitNamed ( part.NamedDamageTypes type );
    
          /// <summary>
          /// Returns parameter.
          /// </summary>
          /// <param name="type">Parameter name or system type.</param>
          /// <param name="subtype">Subtype of given parameter, -1 is generic.</param>
          /// <returns>Value</returns>
          double getParameter ( part.ParameterTypes type, int subtype );
    
        void SayToGroup(AiAirGroup group, string msg); // сообщение для группы
    
    
    
    Regiment {
        int army();
        string name();
        string fileNameEmblem();
        string country();
        string speech();
        string id();
        int gruppeNumber();
      }
    
    public enum AircraftType {
        UNKNOWN = 0,
        Fighter         = 1 << 0, // GUI - FT (любой истребитель)
        BNZFighter      = 1 << 1, 
        TNBFighter      = 1 << 2, 
        HeavyFighter    = 1 << 3, // GUI - FT (любой истребитель) FH (тяжелый истребитель)
        JaBo            = 1 << 4, // GUI - FB (истр-бомбардировщик) FT (любой истребитель) BB (любой бомбер)
        Sturmovik       = 1 << 5, // GUI - BB (любой бомбер)
        Bomber          = 1 << 6, // GUI - BB (любой бомбер)
        DiveBomber      = 1 << 7, // GUI - DB (пикировщик) BB (любой бомбер)
        TorpedoBomber   = 1 << 8, // GUI - TB (торпедоносец) BB (любой бомбер)
        AmphibiousPlane = 1 << 9, // GUI - MS (miscellaneous, разное)
        Glider          = 1 << 10,// GUI - MS (miscellaneous, разное)
        SailPlane       = 1 << 11,// GUI - MS (miscellaneous, разное)
        Scout           = 1 << 12,// GUI - RC (разведчик) MS (miscellaneous, разное)
        Transport       = 1 << 13,// GUI - TS (транспорт) MS (miscellaneous, разное)
        Blenheim        = 1 << 14 // хак для бленхеймов, которые бомберы, но могут закладывать виражи как истребители
      }



    Цитата Сообщение от LePage Посмотреть сообщение
    з/ы/ Разработчики вроде писали что просчет миссий вынесли в отдельный поток? Но и сам НТТР-сервер простой до безобразия.
    В отдельном потоке маршруты расчитываются.
    Don't happy, be worry

  7. #7
    Пилот Аватар для LePage
    Регистрация
    17.07.2009
    Адрес
    Simbirsk
    Возраст
    56
    Сообщений
    511

    Re: Вопросы.

    Цитата Сообщение от naryv Посмотреть сообщение
    Пардон, проглядел . Так как GetParameter закомментированного нет, но примерно так :
    Скрытый текст:
    Код:
    AiAircraft 
        bool IsKilled(); // убит ли юнит
        Regiment Regiment(); // см. ниже описание типа
        string HullNumber(); // борт. номер
        string CallSign();  // позывной, емнип, который голосом проговаривается
        int CallSignNumber();  // позывной номер 
        string TypedName();  // модель самолёта 
        AircraftType Type(); // тип самолёта см. ниже описание енума
        bool IsAirborne();  // рождение в воздухе
        AiAirGroup AirGroup(); // группа
    
          /// <summary>
          /// Sets visible integrity of the given limb.
          /// </summary>
          /// <param name="limb">Object limb to modify</param>
          /// <param name="value">Integrity modifier.
          /// <para>Negative values degrade integrity by given value.</para>
          /// <para>Positive values set absolute value, where applicable.</para></param>
          void hitLimb ( part.LimbNames limb, double value );
    
          /// <summary>
          /// Detaches given limb.
          /// </summary>
          /// <param name="limb">Object limb to detach</param>
          void cutLimb ( part.LimbNames limb );
    
          /// <summary>
          /// Activates given named damage.
          /// </summary>
          /// <param name="type">Flag type</param>
          void hitNamed ( part.NamedDamageTypes type );
    
          /// <summary>
          /// Returns parameter.
          /// </summary>
          /// <param name="type">Parameter name or system type.</param>
          /// <param name="subtype">Subtype of given parameter, -1 is generic.</param>
          /// <returns>Value</returns>
          double getParameter ( part.ParameterTypes type, int subtype );
    
        void SayToGroup(AiAirGroup group, string msg); // сообщение для группы
    
    
    
    Regiment {
        int army();
        string name();
        string fileNameEmblem();
        string country();
        string speech();
        string id();
        int gruppeNumber();
      }
    
    public enum AircraftType {
        UNKNOWN = 0,
        Fighter         = 1 << 0, // GUI - FT (любой истребитель)
        BNZFighter      = 1 << 1, 
        TNBFighter      = 1 << 2, 
        HeavyFighter    = 1 << 3, // GUI - FT (любой истребитель) FH (тяжелый истребитель)
        JaBo            = 1 << 4, // GUI - FB (истр-бомбардировщик) FT (любой истребитель) BB (любой бомбер)
        Sturmovik       = 1 << 5, // GUI - BB (любой бомбер)
        Bomber          = 1 << 6, // GUI - BB (любой бомбер)
        DiveBomber      = 1 << 7, // GUI - DB (пикировщик) BB (любой бомбер)
        TorpedoBomber   = 1 << 8, // GUI - TB (торпедоносец) BB (любой бомбер)
        AmphibiousPlane = 1 << 9, // GUI - MS (miscellaneous, разное)
        Glider          = 1 << 10,// GUI - MS (miscellaneous, разное)
        SailPlane       = 1 << 11,// GUI - MS (miscellaneous, разное)
        Scout           = 1 << 12,// GUI - RC (разведчик) MS (miscellaneous, разное)
        Transport       = 1 << 13,// GUI - TS (транспорт) MS (miscellaneous, разное)
        Blenheim        = 1 << 14 // хак для бленхеймов, которые бомберы, но могут закладывать виражи как истребители
      }



    В отдельном потоке маршруты расчитываются.
    Спасибо огромное!!! Regiment.country() это как я понимаю флаг какой страны? Если так - то немного не подходит.
    А за AircraftType - отдельное спасибо - никак не мог логично интерпретировать результаты, теперь все ясно!!!

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



    p/p/s/ И походу еще вопрос

    А почему для GetParameter был выбран тип double, а не float - ИМХО точность избыточная даже для масштабов авиасимулятора, памяти экономим в два раза, скорость вычислений опять-таки?
    Наверно все вычисления в игре с этим типом double. ИМХО ресурсы разбазариваются, считаем и выбрасывает половину расчетов. 7 значащих знаков - это миллимитровая точность на расстоянии километра, в масштабах внутри самолета - микронная, в масштабах карты метровая на несколько тысяч километров - float вполне-бы хватило для всех задач, не в этом ли одна из причин тормозов?

    может есть еще возможность движок перекомпилировать на 32-х разрядную точность? К черту Point3d..
    Крайний раз редактировалось LePage; 12.12.2012 в 23:33.
    a` la guerre comme a` la guerre
    profile: Core i5-3570K 3.4GHz, ASUS GTX660 2Gb GDDR5, ASUS GT520 Silent 1Gb, LCD 1600x1200x32 IPS, LCD 1600x1200x32 MVA, LCD 800х600 TFT,
    RAM DDR3 32GB, OCZ Vertex 4 128 Gb, OCZ Vertex 450 128 Gb, 4xHDD WD 1 Tb FAEX, RAID10, WD 2 Tb FAEX, Win 7 x64, БП FSP 600Вт
    lepage.sytes.net:21000

  8. #8
    Старший Офицер Форума
    Регистрация
    15.02.2002
    Адрес
    Moscow
    Возраст
    47
    Сообщений
    6,905
    Images
    51

    Re: Вопросы.

    Цитата Сообщение от LePage Посмотреть сообщение
    Спасибо огромное!!! Regiment.country() это как я понимаю флаг какой страны? Если так - то немного не подходит.
    Да, это строковое значение страны за которую летит самолёт - "nn", "gb", "ge" и т.д.

    Цитата Сообщение от LePage Посмотреть сообщение
    з/ы/ Эх, жаль подобного механизма мы нигде больше не увидим . Кто этот светлый человек, кто предложил дать такой инструмент в руки пользователям? Передайте ему низкий поклон.
    кто предложил - не знаю, даже, наверное плод коллективного творчества

    Цитата Сообщение от LePage Посмотреть сообщение
    А почему для GetParameter был выбран тип double, а не float - ИМХО точность избыточная даже для масштабов авиасимулятора, памяти экономим в два раза, скорость вычислений опять-таки?
    параметры могут быть разных типов, в интерфейсе к double привели для однообразия, памяти и скорости экономилось бы практически нисколько.
    Цитата Сообщение от LePage Посмотреть сообщение
    Наверно все вычисления в игре с этим типом double. ИМХО ресурсы разбазариваются, считаем и выбрасывает половину расчетов. 7 значащих знаков - это миллимитровая точность на расстоянии километра, в масштабах внутри самолета - микронная, в масштабах карты метровая на несколько тысяч километров - float вполне-бы хватило для всех задач, не в этом ли одна из причин тормозов?
    вычисления с разными типами - есть и double и float, в каждом конкретном случае брались оптимальные типы.

    Цитата Сообщение от LePage Посмотреть сообщение
    может есть еще возможность движок перекомпилировать на 32-х разрядную точность? К черту Point3d..
    нет, конечно такой возможности нет - надо было бы переписать весь код, кроме того это вряд-ли дало бы прибавку в скорости даже в доли процентов.
    Don't happy, be worry

Ваши права

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