Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - kenking

Страницы: 1 ... 11 12 [13] 14 15 16
181
Чуток ещё изменил код для "Neon". Добавил отключение неона при взрыве или перевёртывании транспорта. Проверку по времени перенёс из функции CanEnableNeonOnThisVehicle в функцию RenderNeonForVehicle для того, чтобы неон не только включался, но и выключался в нужное время.
Можно добавить этот пример в sdk examples?

Код: C++
  1. #include "plugin.h"
  2. #include "game_sa\CClock.h"
  3. #include "game_sa\CShadows.h"
  4. #include "game_sa\common.h"
  5. #include "KeyCheck.h"
  6. #include "game_sa\CModelInfo.h"
  7. #include "game_sa\CTimer.h"
  8.  
  9. #define TURN_ON_OFF_DELAY 500
  10.  
  11. using namespace plugin;
  12. using namespace std;
  13.  
  14. RwTexture *&pWhiteTex = *(RwTexture **)0xB4E3EC;
  15.  
  16. class NeonLights {
  17. public:
  18.     enum eNeonColor {
  19.         NEON_YELLOW, NEON_GREEN, NEON_RED, NEON_BLUE, NEON_PURPLE
  20.     };
  21.  
  22.     class Neon {
  23.     public:
  24.         unsigned char color;
  25.         bool activated;
  26.         bool processed;
  27.  
  28.         Neon(CVehicle *) { activated = processed = false; }
  29.  
  30.         void Enable(eNeonColor Color) {
  31.             color = Color;
  32.             activated = true;
  33.         }
  34.  
  35.         void Disable() { activated = false; }
  36.     };
  37.  
  38.     static VehicleExtendedData<Neon> VehNeon;
  39.  
  40.     static bool CanEnableNeonOnThisVehicle(CVehicle *vehicle) {
  41.         CVehicleModelInfo *vehModel = reinterpret_cast<CVehicleModelInfo *>(CModelInfo::ms_modelInfoPtrs[vehicle->m_wModelIndex]);
  42.         return vehicle->m_pDriver
  43.             && (vehModel->m_nClass == 1 || vehModel->m_nClass == 2 || vehModel->m_nClass == 3)
  44.             && (vehicle->m_dwVehicleSubClass == VEHICLE_AUTOMOBILE || vehicle->m_dwVehicleSubClass == VEHICLE_MTRUCK || vehicle->m_dwVehicleSubClass == VEHICLE_QUAD);
  45.     }
  46.  
  47.     static void ProcessNpcVehicle(CVehicle *vehicle) {
  48.         if (CanEnableNeonOnThisVehicle(vehicle) && !VehNeon.Get(vehicle).processed) {
  49.             VehNeon.Get(vehicle).processed = true;
  50.             if (rand() % 3 == 1) {
  51.                 VehNeon.Get(vehicle).activated = true;
  52.                 VehNeon.Get(vehicle).color = rand() % 5;
  53.             }
  54.         }
  55.     }
  56.  
  57.     static void ProcessVehicles() {
  58.         KeyCheck::Update();
  59.         CVehicle *playaVeh = FindPlayerVehicle(0, false);
  60.         if (playaVeh
  61.             && (playaVeh->m_dwVehicleSubClass == VEHICLE_AUTOMOBILE
  62.                 || playaVeh->m_dwVehicleSubClass == VEHICLE_MTRUCK
  63.                 || playaVeh->m_dwVehicleSubClass == VEHICLE_QUAD)) {
  64.             if (KeyCheck::Check(VK_SHIFT)) {
  65.                 if (KeyCheck::CheckJustDown('1'))
  66.                     VehNeon.Get(playaVeh).Enable(NEON_YELLOW);
  67.                 else if (KeyCheck::CheckJustDown('2'))
  68.                     VehNeon.Get(playaVeh).Enable(NEON_GREEN);
  69.                 else if (KeyCheck::CheckJustDown('3'))
  70.                     VehNeon.Get(playaVeh).Enable(NEON_RED);
  71.                 else if (KeyCheck::CheckJustDown('4'))
  72.                     VehNeon.Get(playaVeh).Enable(NEON_BLUE);
  73.                 else if (KeyCheck::CheckJustDown('5'))
  74.                     VehNeon.Get(playaVeh).Enable(NEON_PURPLE);
  75.                 else if (KeyCheck::CheckJustDown('0'))
  76.                     VehNeon.Get(playaVeh).Disable();
  77.             }
  78.         }
  79.         for (int i = 0; i < CPools::ms_pVehiclePool->m_Size; i++) {
  80.             CVehicle *vehicle = CPools::ms_pVehiclePool->GetAt(i);
  81.             if (vehicle && vehicle != playaVeh)
  82.                 ProcessNpcVehicle(vehicle);
  83.         }
  84.     }
  85.  
  86.     static void RenderNeonForVehicle(CVehicle *vehicle) {
  87.         if (vehicle->m_fHealth < 1.0f || vehicle->IsUpsideDown())
  88.             VehNeon.Get(vehicle).Disable();
  89.         if (VehNeon.Get(vehicle).activated && CClock::GetIsTimeInRange(21, 6)) {
  90.             unsigned char r, g, b;
  91.             switch (VehNeon.Get(vehicle).color) {
  92.             case NEON_YELLOW: r = 255; g = 200; b = 0;    break;
  93.             case NEON_GREEN:  r = 0;   g = 255; b = 0;    break;
  94.             case NEON_RED:    r = 255; g = 0;   b = 0;    break;
  95.             case NEON_BLUE:   r = 0;   g = 0;   b = 255;  break;
  96.             case NEON_PURPLE: r = 255; g = 0;   b = 255;  break;
  97.             }
  98.             if (CTimer::m_snTimeInMilliseconds % (TURN_ON_OFF_DELAY + 250) < TURN_ON_OFF_DELAY) {
  99.                 CVector Pos = CModelInfo::ms_modelInfoPtrs[vehicle->m_wModelIndex]->m_pColModel->m_boundBox.m_vSup;
  100.                 CVector center = vehicle->TransformFromObjectSpace(CVector(0.0f, 0.0f, 0.0f));
  101.                 CVector up = vehicle->TransformFromObjectSpace(CVector(0.0f, -Pos.y - 0.5f, 0.0f)) - center;
  102.                 CVector right = vehicle->TransformFromObjectSpace(CVector(Pos.x + 0.2f, 0.0f, 0.0f)) - center;
  103.                 CShadows::StoreShadowToBeRendered(2, pWhiteTex, &center, up.x, up.y, right.x, right.y, 255, r, g, b, 2.0f, false, 1.0f, 0, true);
  104.             }
  105.         }
  106.     }
  107.  
  108.     NeonLights() {
  109.         Events::gameProcessEvent += ProcessVehicles;
  110.         Events::vehicleRenderEvent += RenderNeonForVehicle;
  111.     }
  112. } neon;
  113.  
  114. VehicleExtendedData<NeonLights::Neon> NeonLights::VehNeon;


UPD:
Пример добавил.

Просьба показать вызов методов CMatrix.
Код: C++
  1. reinterpret_cast<CMatrix*>(&automobile->m_aCarNodes[CAR_MISC_A]->modelling)->SetRotateXOnly(angle);
Правильно?

182
Просьба протестировать этот плагин на XP (это кар спаунер + сообщение при аттаче).
Ребята протестили. Теперь работает и на XP.
http://gta.com.ua/forum/index.php?showtopic=3382&p=2224761

Сделал новый шаблон проекта (для SA).

Для сборки под XP выбрать режим Rel-XP.
Собрал для теста два плагина с новым шаблоном. Проверил у родственников на компьютере с Windows XP SP2 - работают!  :D Спасибо!  ;)

183
У тебя же плагин нормально собирается и работает. Значит это у меня, что-то не так или с настройками, или с самой студией. Кстати, в свойствах sdk plugin_sa и plugin_vc тулсет выставлен на XP, но в позиции целевая платформа надписи Windows нет.


184
Может и так, а может я просто с настройками что-то не так делаю. Скинь пожалуйста настроенный пустой проект, проверю, если будет также, как сейчас - значит дело в версии студии, если будет нормально - значит я, что-то с настройками напутал.

185
Я у меня её нет. Не пойму, что я делаю не так. :( Версия Visual Studio 2015 у меня Community. Версия Windows 7 максимальная SP1.

Можешь скинуть мне свой пустой проект?


UPD:

Да, покажи пожалуйста такие примеры для открытия и закрытия, например, капота авто функциями RwMatrixRotate/RwFrameRotate и методом CMatrix.
С вызовом RwMatrixRotate/RwFrameRotate  разобрался.

Просьба показать вызов методов CMatrix.

186
У меня пустой проект с настройками для XP (тулсет, субсистема) нормально запускается (проверил на виртуальной машине с XP SP3).
А у тебя  в позиции целевая платформа надпись Windows при этом есть?

Также есть функции RwMatrixRotate/RwFrameRotate, которые вращают матрицу/фрейм вокруг оси (ось можно задать своим вектором).
Ну и ещё вариант - вращение методами CMatrix: RotateX,RotateY,RotateZ и другими (см. файл CMatrix.h) Eсли будет нужно, то покажу на примере.
Да, покажи пожалуйста такие примеры для открытия и закрытия, например, капота авто функциями RwMatrixRotate/RwFrameRotate и методом CMatrix.

187
Я пробовал так. Создал новый пустой проект. Выставил тулсет на xp и сразу в целевой платформе надпись Windows пропадает. Дальнейшая настройка проекта ничего в этой позиции не меняет. Пробовал и так - создал новый пустой проект. Выставил SubSystem на Windows. Потом поменял тулсет на xp. Всё тоже самое. Ерунда какая-то.
Ну что же, придётся писать, что плагины на XP не работают. Хотя пользователей с XP не так много осталось, но они есть.

188
Попробуй поставить SubSystem на Windows.

Поставил. Предупреждение при сборке проекта исчезло, но в позиции целевая платформа надпись Windows также исчезает.




Какая именно ошибка выходит на WinXP?
Плагин просто не работает, т.е. ничего не происходит. Я собирал для ребят твои примеры GPS и Универсальные поворотники. Скинул на тест эти же плагины, собранные по-новой. Протестируют, посмотрим какой будет результат. Но по-любому в целевой платформе надпись Windows так и не появилась.  :(


UPD:
Ребята протестировали, плагины на XP не работают.  >:(

189
Собирать с тулсетом для XP (v140_xp).
Если у тебя он не установлен, можно скачать и установить.

Я пробовал, но когда я выбираю режим Visual Studio 2015 - Windows XP (v140_xp), то в позиции целевая платформа надпись Windows исчезает.


при сборке выходит предупреждение
Цитировать
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targets(1193,5): warning MSB8030: The linker switch "Minimum Required Version" requires "SubSystem" to be set.  Without "SubSystem", the "Minimum Required Version" would not be passed to linker and could prevent to the output binary from running on older Operating Systems.

и плагин на Windows XP не работает (ребята проверяли, у меня семёрка установлена).

Когда устанавливал студию, то инструменты для поддержки XP ставил. Сейчас специально обновил, всё тоже самое.
Не пойму в чём дело.  :(

190
Спасибо за очередные примеры и пояснения!

1)
Цитировать
Обновил код, т.к. могли возникнуть проблемы с порядком создания обьектов (главного класса и вектора).
Вот в такой вот ситуации
А если так, то будет нормально, правильно я понимаю?
Код: C++
  1. vector<int> vec; // определяем переменную vec (вызывается конструктор std::vector)
  2. class A {
  3.              
  4.     A() { // Конструктор класса A
  5.         vec.push_back(5); // Добавляем элемент в вектор
  6.     }
  7. } a; // определяем обьект a класса A (вызывается конструктор A)

2) При сборке какого-либо проекта с подключением
Код: C++
  1. #include "game_sa\CTxdStore.h"
проект собирается, но студия выдаёт предупреждение
Цитировать
>d:\projects\plugin-sdk\plugin_sa\game_sa\TxdDef.h(19): warning C4161: #pragma pack(pop...): число извлечений из стека превышает число занесений

3) С поддержкой Windows XP какой-либо проект нельзя собрать?

4) Если объединять примеры для zr350 и тягачей, то считывание с vehicle_advanced.dat надо делать так?
Код: C++
  1. #include "plugin.h"
  2. #include <vector>
  3. #include <fstream>
  4. #include <string>
  5. #include <sstream>
  6. #include "game_sa\common.h"
  7. #include "game_sa\CFont.h"
  8.  
  9. using namespace plugin;
  10. using namespace std;
  11.  
  12. vector<unsigned int> truckIDs;
  13.  
  14. class ZR350 {
  15. public:
  16.     struct MyData {
  17.         unsigned int baseModelId;
  18.         float value;
  19.     };
  20.  
  21.     static vector<MyData>& GetDataVector() {
  22.         static vector<MyData> vec; // глобальная переменная vec, доступ к которой осуществляется вызовом GetDataVector()
  23.         return vec;
  24.     }
  25.  
  26.     static void ReadSettingsFile() {
  27.         ifstream stream("vehicle_advanced.dat");
  28.         for (string line; getline(stream, line); ) {
  29.             if (line[0] != ';' && line[0] != '#') {
  30.                 if (!line.compare("zr350")) {
  31.                     while (getline(stream, line) && line.compare("endzr350")) {
  32.                         if (line[0] != ';' && line[0] != '#') {
  33.                             MyData entry;
  34.                             if (sscanf(line.c_str(), "%d, %f", &entry.baseModelId, &entry.value) == 2)
  35.                                 GetDataVector().push_back(entry); // теперь мы точно знаем, что обращаемся к уже построенному обьекту
  36.                             else
  37.                                 Error("Failed to scan line: %s", line.c_str());
  38.                         }
  39.                     }
  40.                 }
  41.                 if (!line.compare("trucks")) {
  42.                     while (getline(stream, line) && line.compare("endtrucks")) {
  43.                         if (line[0] != ';' && line[0] != '#') {
  44.                             std::stringstream ss(line);
  45.                             int i;
  46.                             while (ss >> i) {
  47.                                 truckIDs.push_back(i);
  48.                                 if (ss.peek() == ',')
  49.                                     ss.ignore();
  50.                             }
  51.                         }
  52.                     }
  53.                 }
  54.             }
  55.         }
  56.     }
  57.  
  58.     static MyData *GetDataInfoForModel(unsigned int BaseModelId) {
  59.         for (unsigned int i = 0; i < GetDataVector().size(); i++) {
  60.             if (GetDataVector()[i].baseModelId == BaseModelId)
  61.                 return &GetDataVector()[i];
  62.         }
  63.         return nullptr;
  64.     }
  65.  
  66.     static bool IsTruckModel(unsigned int modelId) {
  67.         for (unsigned int i : truckIDs) {
  68.             if (i == modelId)
  69.                 return true;
  70.         }
  71.         return false;
  72.     }
  73.  
  74.     static void Test() {
  75.         CVehicle *vehicle = FindPlayerVehicle(-1, false);
  76.         if (vehicle) {
  77.             CFont::SetScale(0.5f, 1.0f);
  78.             CFont::SetColor(CRGBA(255, 255, 255, 255));
  79.             CFont::SetAlignment(ALIGN_LEFT);
  80.             CFont::SetOutlinePosition(1);
  81.             CFont::SetDropColor(CRGBA(0, 0, 0, 255));
  82.             CFont::SetBackground(false, false);
  83.             CFont::SetFontStyle(FONT_SUBTITLES);
  84.             CFont::SetProp(true);
  85.             CFont::SetWrapx(600.0f);
  86.             static char str[32];
  87.             MyData *entryModel = GetDataInfoForModel(vehicle->m_wModelIndex);
  88.             if (entryModel) {
  89.                 sprintf(str, "yes %d %.2f", entryModel->baseModelId, entryModel->value);
  90.                 CFont::PrintString(5.0f, 445.0f, str);
  91.             }
  92.             else {
  93.                 sprintf(str, "no %d", vehicle->m_wModelIndex);
  94.                 CFont::PrintString(5.0f, 445.0f, str);
  95.             }
  96.             if (IsTruckModel(vehicle->m_wModelIndex)) {
  97.                 sprintf(str, "yes truck %d", vehicle->m_wModelIndex);
  98.                 CFont::PrintString(205.0f, 445.0f, str);
  99.             }
  100.             else {
  101.                 sprintf(str, "no truck %d", vehicle->m_wModelIndex);
  102.                 CFont::PrintString(205.0f, 445.0f, str);
  103.             }
  104.         }
  105.     }
  106.  
  107.     ZR350() {
  108.         ReadSettingsFile();
  109.         for (unsigned int i = 0; i < GetDataVector().size(); i++)
  110.             Error("Entry %d: %d - %.2f", i + 1, GetDataVector()[i].baseModelId, GetDataVector()[i].value);
  111.         Events::drawingEvent += Test;
  112.     }
  113. } test;

191
Можно. Но и сами текстуры надо будет куда-то добавлять (например, в txd авто).
Да, в txd авто - это самый приемлемый вариант.

Есть функции поиска текстуры в txd.
Код: C++
  1. RwTexture* RwTexDictionaryFindNamedTexture(RwTexDictionary* dict, const RwChar* name); // поиск по имени, RenderWare.h
  2. RwTexture* RwTexDictionaryFindHashNamedTexture(RwTexDictionary* txd, unsigned int hash);  // поиск по хеш-ключу, common.h
Вторая функция добавлена в последнем коммите.
TXD можно достать из пула (если она загружена).
Ты хочешь загружать из дополнительного txd или из уже существующего?
Из существующего txd модели. У некоторых моделей есть по два набора покрасок (по четыре покрасочных работ в каждом наборе). Приходится ставить на выбор 4 из них. Если остальные 4 поместить в txd модели, доставать их оттуда и ставить таким образом
Код: C++
  1. vehicle->m_pRemapTexture = pMyTexture;
Можно пример, как достать текстуру (несколько текстур) из txd модели.

Обьявляй всё как статические члены (static).
Статические переменные дополнительно определяй за пределами класса.
Вот с объявлением 
Код: C++
  1. MyData *GetDataInfoForModel(unsigned int BaseModelId)
за пределами класса у меня как раз и непонятка возникла. Покажи пожалуйста.

192
В первом примере надо определить переменную entries.
Код: C++
  1. vector<SettingsTest::MyData> SettingsTest::entries;

Разобрался, спасибо!

Упс... оказывается не полностью разобрался.  :(
Подскажи пожалуйста, как таким же образом определить MyData *GetDataInfoForModel(unsigned int BaseModelId)
Код: C++
  1.     static void Test() {
  2.         CVehicle *vehicle = FindPlayerVehicle(-1, false);
  3.             if (vehicle) {
  4.                 CFont::SetScale(0.5f, 1.0f);
  5.                 CFont::SetColor(CRGBA(255, 255, 255, 255));
  6.                 CFont::SetAlignment(ALIGN_LEFT);
  7.                 CFont::SetOutlinePosition(1);
  8.                 CFont::SetDropColor(CRGBA(0, 0, 0, 255));
  9.                 CFont::SetBackground(false, false);
  10.                 CFont::SetFontStyle(FONT_SUBTITLES);
  11.                 CFont::SetProp(true);
  12.                 CFont::SetWrapx(600.0f);
  13.                 static char str[32];
  14.                 MyData *entryModel = GetDataInfoForModel(vehicle->m_wModelIndex);
  15.                 if (entryModel) {
  16.                     sprintf(str, "yes %.d %.2f", entryModel->baseModelId, entryModel->value);
  17.                     CFont::PrintString(5.0f, 355.0f, str);
  18.                 }
  19.                 else {
  20.                     sprintf(str, "no %.d", vehicle->m_wModelIndex);
  21.                     CFont::PrintString(5.0f, 355.0f, str);
  22.                 }
  23.             }
  24.     }
  25.  
  26.     ZR350() {
  27.         ReadSettingsFile();
  28.         Events::drawingEvent += Test;
  29.     }
В этой строчке
Код: C++
  1. MyData *entryModel = GetDataInfoForModel(vehicle->m_wModelIndex);
студия ругается, что не статическая ссылка на член должна указываться относительно заданного объекта. Если записать так
Код: C++
  1. static MyData *GetDataInfoForModel(unsigned int BaseModelId)
то код не срабатывает.
Вынес
struct MyData
vector<MyData> entries;
void ReadSettingsFile()
MyData *GetDataInfoForModel(unsigned int BaseModelId)
за пределы класса, тогда работает.
Это из примера, что ты показывал здесь http://forum.gtabuilder.ru/index.php?topic=337.msg2414#msg2414

193
1)
Ещё например, установка винила на авто.
С этим разобрался. Набросал пример:
Код: C++
  1. #include "plugin.h"
  2. #include "game_sa\common.h"
  3. #include "game_sa\CTimer.h"
  4. #include "game_sa\CGeneral.h"
  5. #include "game_sa\CModelInfo.h"
  6.  
  7. using namespace plugin;
  8.  
  9. class Remap {
  10. public:
  11.     class RemapInfo {
  12.     public:
  13.         bool permitRemap;
  14.        
  15.         RemapInfo(CVehicle *vehicle) {
  16.             unsigned int random = CGeneral::GetRandomNumberInRange(0, 3);
  17.             if (random == 1)
  18.                 permitRemap = true;
  19.             else permitRemap = false;
  20.         }
  21.     };
  22.  
  23.     Remap() {
  24.         static VehicleExtendedData<RemapInfo> remInfo;
  25.         static unsigned int m_nLastTimeWhenAnyActionWasEnabled = 0;
  26.         static unsigned int randomRemap;
  27.         static unsigned int amountRemap;
  28.         static int currentRemap = -1;
  29.  
  30.         Events::vehicleRenderEvent += [](CVehicle *vehicle) {
  31.             if (vehicle) {
  32.                 RemapInfo &info = remInfo.Get(vehicle);
  33.                 if (info.permitRemap) {
  34.                     CVehicleModelInfo *vehModel = reinterpret_cast<CVehicleModelInfo *>(CModelInfo::ms_modelInfoPtrs[vehicle->m_wModelIndex]);
  35.                     amountRemap = vehModel->GetNumRemaps();
  36.                     if (amountRemap > 0) {
  37.                         randomRemap = CGeneral::GetRandomNumberInRange(0, amountRemap);
  38.                         vehicle->SetRemap(randomRemap);
  39.                     }
  40.                     info.permitRemap = false;
  41.                 }
  42.             }
  43.         };
  44.  
  45.         Events::gameProcessEvent += [] {
  46.             CVehicle *plVehicle = FindPlayerVehicle(-1, false);
  47.             if (plVehicle) {
  48.                 if (CTimer::m_snTimeInMilliseconds >(m_nLastTimeWhenAnyActionWasEnabled + 1000) && KeyPressed(75)) {
  49.                     m_nLastTimeWhenAnyActionWasEnabled = CTimer::m_snTimeInMilliseconds;
  50.                     CVehicleModelInfo *plVehModel = reinterpret_cast<CVehicleModelInfo *>(CModelInfo::ms_modelInfoPtrs[plVehicle->m_wModelIndex]);
  51.                     amountRemap = plVehModel->GetNumRemaps();
  52.                     if (amountRemap > 0) {
  53.                         if (currentRemap < static_cast<int>(amountRemap - 1))
  54.                             ++currentRemap;
  55.                         else currentRemap = -1;
  56.                         plVehicle->SetRemap(currentRemap);
  57.                     }
  58.                 }
  59.             }
  60.         };
  61.     }
  62. } remap;
  63.  

Работает, как запланировал. По самому коду есть какие-либо замечания?
Функция
Код: C++
  1. int GetNumRemaps();
описание есть, а определения нет (и другие функции из CVehicleModelInfo), добавил так:
Код: C++
  1. // Converted from thiscall int CVehicleModelInfo::GetNumRemaps(void) 0x4C86B0
  2. int CVehicleModelInfo::GetNumRemaps()
  3. {
  4.     return ((int(__thiscall *)(CVehicleModelInfo*))0x4C86B0)(this);
  5. }

2) Обнаружил интересную вещь - установить покрасочную работу на авто можно ещё так:
Код: C++
  1. vehicle->m_pRemapTexture = pMyTexture;
Получается этим способом можно обойти ограничение на количество покрасочных работ для модели.

Есть ли способ "заполучить" текстуру в RwTexture *pMyTexture;  (помимо способов:)
Код: C++
  1. pMyTexture = mySprite.m_pTexture;
  2. //и
  3. pMyTexture = RwD3D9DDSTextureRead("models\\image", 0);
например, из txd, который находится в gta3.img?

3)
Код: C++
  1. static void VehicleRemoveSphere(CVehicle *vehicle) {
  2.     CColData *colData = vehicle->GetColModel()->m_pColData;
  3.     for (unsigned int i = 0; i < colData->m_wNumSpheres; i++) {
  4.         if (colData->m_pSpheres[i].m_nFlags == 19) { // windscreen col sphere
  5.             colData->m_pSpheres[i].m_fRadius = 0.0f;
  6.             colData->m_pSpheres[i].m_vCenter = {0.0f, 0.0f, 0.0f};
  7.         }
  8.     }
  9. }
Интересная вещь!  :)
А для коллизии колёс как будет?
А можно как-то масштабировать тень модели?

194
С днём программиста!  ;)

195
Всё так же.
Из спрайта ты можешь получить доступ к текстуре.
Код: C++
  1. mySprite.m_pTexture
Спасибо. А в этом случае удалять эту текстуру надо? Т.е. если у меня в Events::initRwEvent
Код: C++
  1. Events::initRwEvent += [] {
  2.     int txd = CTxdStore::AddTxdSlot("mytxd");
  3.     CTxdStore::LoadTxd(txd, "MODELS\\SPEED.txd");
  4.     CTxdStore::AddRef(txd);
  5.     CTxdStore::PushCurrentTxd();
  6.     CTxdStore::SetCurrentTxd(txd);
  7.     mySpriteRing.SetTexture("tablon", "tablona");
  8.     mySpriteArrow.SetTexture("arrow", "arrowa");
  9.     CTxdStore::PopCurrentTxd();
  10.     pMyTextureArrow = mySpriteArrow.m_pTexture;
  11.     pMyTextureRing = mySpriteRing.m_pTexture;
  12. };
то в Events::shutdownRwEvent
Код: C++
  1. Events::shutdownRwEvent += [] {
  2.     RwTextureDestroy(pMyTextureRing);
  3.     RwTextureDestroy(pMyTextureArrow);
  4.     mySpriteRing.Delete();
  5.     mySpriteArrow.Delete();
  6.     CTxdStore::RemoveTxdSlot(CTxdStore::FindTxdSlot("mytxd"));
  7. };
или строчки
Код: C++
  1. RwTextureDestroy(pMyTextureRing);
  2. RwTextureDestroy(pMyTextureArrow);
лишние?

И ещё вопрос: как сделать, чтобы текстуры рисовались в нужных координатах независимо от разрешения экрана? Тот же вопрос и касательно вывода текста.

Страницы: 1 ... 11 12 [13] 14 15 16