mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-10 20:46:47 +03:00
Added provisional LOT priority
This commit is contained in:
parent
0af567b7fd
commit
e527acc3cf
5 changed files with 134 additions and 10 deletions
|
@ -22,7 +22,15 @@
|
|||
#define BIFF_AVOID_TURN 1536
|
||||
#define FEELER_DISTANCE 512
|
||||
#define FEELER_ANGLE ANGLE(45.0f)
|
||||
#ifdef CREATURE_AI_PRIORITY_OPTIMIZATION
|
||||
|
||||
constexpr int HIGH_PRIO = 8;
|
||||
constexpr int MEDIUM_PRIO = HIGH_PRIO + HIGH_PRIO * (HIGH_PRIO / 6.0f);
|
||||
constexpr int LOW_PRIO = MEDIUM_PRIO + MEDIUM_PRIO * (MEDIUM_PRIO / 24.0f);
|
||||
constexpr int NONE_PRIO = LOW_PRIO + LOW_PRIO * (LOW_PRIO / 32.0f);
|
||||
constexpr auto FRAME_PRIO_BASE = 4;
|
||||
constexpr auto FRAME_PRIO_EXP = 1.5;
|
||||
#endif // CREATURE_AI_PRIORITY_OPTIMIZATION
|
||||
void DropBaddyPickups(ITEM_INFO* item)
|
||||
{
|
||||
ITEM_INFO* pickup = NULL;
|
||||
|
@ -1071,7 +1079,23 @@ int SearchLOT(LOT_INFO* LOT, int depth)
|
|||
return true;
|
||||
}
|
||||
|
||||
int CreatureActive(short itemNumber)
|
||||
|
||||
#if CREATURE_AI_PRIORITY_OPTIMIZATION
|
||||
CREATURE_AI_PRIORITY GetCreatureLOTPriority(ITEM_INFO* item) {
|
||||
Vector3 itemPos = Vector3(item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
||||
Vector3 cameraPos = Vector3(Camera.pos.x, Camera.pos.y, Camera.pos.z);
|
||||
float distance = Vector3::Distance(itemPos, cameraPos);
|
||||
distance /= SECTOR(1);
|
||||
if(distance <= HIGH_PRIO)
|
||||
return CREATURE_AI_PRIORITY::HIGH;
|
||||
if(distance <= MEDIUM_PRIO)
|
||||
return CREATURE_AI_PRIORITY::MEDIUM;
|
||||
if(distance <= LOW_PRIO)
|
||||
return CREATURE_AI_PRIORITY::LOW;
|
||||
return CREATURE_AI_PRIORITY::NONE;
|
||||
}
|
||||
#endif
|
||||
int CreatureActive(short itemNumber)
|
||||
{
|
||||
ITEM_INFO* item = &g_Level.Items[itemNumber];
|
||||
|
||||
|
@ -1088,6 +1112,10 @@ int CreatureActive(short itemNumber)
|
|||
}
|
||||
item->status = ITEM_ACTIVE;
|
||||
}
|
||||
#ifdef CREATURE_AI_PRIORITY_OPTIMIZATION
|
||||
CREATURE_INFO* creature = (CREATURE_INFO*)item->data;
|
||||
creature->priority = GetCreatureLOTPriority(item);
|
||||
#endif // CREATURE_AI_PRIORITY_OPTIMIZATION
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1611,8 +1639,37 @@ void CreatureMood(ITEM_INFO* item, AI_INFO* info, int violent)
|
|||
|
||||
if (LOT->targetBox == NO_BOX)
|
||||
TargetBox(LOT, item->boxNumber);
|
||||
#ifdef CREATURE_AI_PRIORITY_OPTIMIZATION
|
||||
|
||||
bool shouldUpdateTarget = false;
|
||||
switch(creature->priority) {
|
||||
case CREATURE_AI_PRIORITY::HIGH:
|
||||
shouldUpdateTarget = true;
|
||||
break;
|
||||
case CREATURE_AI_PRIORITY::MEDIUM:
|
||||
{
|
||||
if(creature->framesSinceLOTUpdate > std::pow(FRAME_PRIO_BASE, FRAME_PRIO_EXP))
|
||||
shouldUpdateTarget = true;
|
||||
}
|
||||
break;
|
||||
case CREATURE_AI_PRIORITY::LOW:
|
||||
{
|
||||
if(creature->framesSinceLOTUpdate > std::pow(FRAME_PRIO_BASE,FRAME_PRIO_EXP*2))
|
||||
shouldUpdateTarget = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if(shouldUpdateTarget) {
|
||||
CalculateTarget(&creature->target, item, &creature->LOT);
|
||||
creature->framesSinceLOTUpdate = 0;
|
||||
} else {
|
||||
creature->framesSinceLOTUpdate++;
|
||||
}
|
||||
#else
|
||||
CalculateTarget(&creature->target, item, &creature->LOT);
|
||||
#endif // CREATURE_AI_PRIORITY_OPTIMIZATION
|
||||
|
||||
creature->jumpAhead = false;
|
||||
creature->monkeyAhead = false;
|
||||
|
|
|
@ -64,6 +64,14 @@ struct CREATURE_TARGET {
|
|||
short roomNumber;
|
||||
|
||||
};
|
||||
|
||||
enum class CREATURE_AI_PRIORITY {
|
||||
HIGH,
|
||||
MEDIUM,
|
||||
LOW,
|
||||
NONE
|
||||
};
|
||||
|
||||
struct CREATURE_INFO {
|
||||
short jointRotation[4];
|
||||
short maximumTurn;
|
||||
|
@ -83,4 +91,8 @@ struct CREATURE_INFO {
|
|||
short itemNum;
|
||||
PHD_VECTOR target;
|
||||
LOT_INFO LOT;
|
||||
#ifdef CREATURE_AI_PRIORITY_OPTIMIZATION
|
||||
CREATURE_AI_PRIORITY priority;
|
||||
size_t framesSinceLOTUpdate;
|
||||
#endif
|
||||
};
|
|
@ -105,8 +105,9 @@ void DisableBaddieAI(short itemNumber)
|
|||
if (creature)
|
||||
{
|
||||
creature->itemNum = NO_ITEM;
|
||||
item->data = nullptr;
|
||||
ActiveCreatures.erase(std::find(ActiveCreatures.begin(), ActiveCreatures.end(), creature));
|
||||
item->data = nullptr;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<WarningLevel>TurnOffAllWarnings</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;TR5MAIN_EXPORTS;_WINDOWS;_USRDLL;NOMINMAX;NEW_INV;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;TR5MAIN_EXPORTS;_WINDOWS;_USRDLL;NOMINMAX;NEW_INV;CREATURE_AI_PRIORITY_OPTIMIZATION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>false</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>D:\Dokumente\TR5Main\TR5Main\Game\itemdata;$(SolutionDir)TR5Main\Game\itemdata;$(SolutionDir)TR5Main;$(SolutionDir)TR5Main\Game;$(SolutionDir)TR5Main\Game\Lara;$(SolutionDir)TR5Main\Objects;$(SolutionDir)TR5Main\Objects\Utils;$(SolutionDir)TR5Main\Objects\Effects;$(SolutionDir)TR5Main\Objects\Generic;$(SolutionDir)TR5Main\Objects\Generic\Switches;$(SolutionDir)TR5Main\Objects\Generic\Object;$(SolutionDir)TR5Main\Objects\TR1;$(SolutionDir)TR5Main\Objects\TR1\Entity;$(SolutionDir)TR5Main\Objects\TR1\Trap;$(SolutionDir)TR5Main\Objects\TR2;$(SolutionDir)TR5Main\Objects\TR2\Entity;$(SolutionDir)TR5Main\Objects\TR2\Trap;$(SolutionDir)TR5Main\Objects\TR2\Vehicles;$(SolutionDir)TR5Main\Objects\TR3;$(SolutionDir)TR5Main\Objects\TR3\Entity;$(SolutionDir)TR5Main\Objects\TR3\Trap;$(SolutionDir)TR5Main\Objects\TR3\Vehicles;$(SolutionDir)TR5Main\Objects\TR4;$(SolutionDir)TR5Main\Objects\TR4\Entity;$(SolutionDir)TR5Main\Objects\TR4\Trap;$(SolutionDir)TR5Main\Objects\TR4\Object;$(SolutionDir)TR5Main\Objects\TR4\Floor;$(SolutionDir)TR5Main\Objects\TR4\Switch;$(SolutionDir)TR5Main\Objects\TR4\Vehicles;$(SolutionDir)TR5Main\Objects\TR5;$(SolutionDir)TR5Main\Objects\TR5\Entity;$(SolutionDir)TR5Main\Objects\TR5\Trap;$(SolutionDir)TR5Main\Objects\TR5\Light;$(SolutionDir)TR5Main\Objects\TR5\Emitter;$(SolutionDir)TR5Main\Objects\TR5\Shatter;$(SolutionDir)TR5Main\Objects\TR5\Switch;$(SolutionDir)TR5Main\Objects\TR5\Object;$(SolutionDir)TR5Main\Objects\Vehicles;$(SolutionDir)TR5Main\Renderer;$(SolutionDir)TR5Main\Scripting;$(SolutionDir)TR5Main\Specific;$(SolutionDir)TR5Main\Specific\IO;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
|
@ -95,7 +95,7 @@ xcopy /Y "$(ProjectDir)Shaders\HUD\*.hlsl" "$(TargetDir)\Shaders\HUD\"</Command>
|
|||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<WarningLevel>TurnOffAllWarnings</WarningLevel>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;TR5MAIN_EXPORTS;_WINDOWS;_USRDLL;NOMINMAX;NEW_INV;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;TR5MAIN_EXPORTS;_WINDOWS;_USRDLL;NOMINMAX;NEW_INV;CREATURE_AI_PRIORITY_OPTIMIZATION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>false</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)TR5Main;$(SolutionDir)TR5Main\Game;$(SolutionDir)TR5Main\Game\Lara;$(SolutionDir)TR5Main\Objects;$(SolutionDir)TR5Main\Objects\Utils;$(SolutionDir)TR5Main\Objects\Effects;$(SolutionDir)TR5Main\Objects\Generic;$(SolutionDir)TR5Main\Objects\Generic\Switches;$(SolutionDir)TR5Main\Objects\Generic\Object;$(SolutionDir)TR5Main\Objects\TR1;$(SolutionDir)TR5Main\Objects\TR1\Entity;$(SolutionDir)TR5Main\Objects\TR1\Trap;$(SolutionDir)TR5Main\Objects\TR2;$(SolutionDir)TR5Main\Objects\TR2\Entity;$(SolutionDir)TR5Main\Objects\TR2\Trap;$(SolutionDir)TR5Main\Objects\TR2\Vehicles;$(SolutionDir)TR5Main\Objects\TR3;$(SolutionDir)TR5Main\Objects\TR3\Entity;$(SolutionDir)TR5Main\Objects\TR3\Trap;$(SolutionDir)TR5Main\Objects\TR3\Vehicles;$(SolutionDir)TR5Main\Objects\TR4;$(SolutionDir)TR5Main\Objects\TR4\Entity;$(SolutionDir)TR5Main\Objects\TR4\Trap;$(SolutionDir)TR5Main\Objects\TR4\Object;$(SolutionDir)TR5Main\Objects\TR4\Floor;$(SolutionDir)TR5Main\Objects\TR4\Switch;$(SolutionDir)TR5Main\Objects\TR4\Vehicles;$(SolutionDir)TR5Main\Objects\TR5;$(SolutionDir)TR5Main\Objects\TR5\Entity;$(SolutionDir)TR5Main\Objects\TR5\Trap;$(SolutionDir)TR5Main\Objects\TR5\Light;$(SolutionDir)TR5Main\Objects\TR5\Emitter;$(SolutionDir)TR5Main\Objects\TR5\Shatter;$(SolutionDir)TR5Main\Objects\TR5\Switch;$(SolutionDir)TR5Main\Objects\TR5\Object;$(SolutionDir)TR5Main\Objects\Vehicles;$(SolutionDir)TR5Main\Renderer;$(SolutionDir)TR5Main\Scripting;$(SolutionDir)TR5Main\Specific;$(SolutionDir)TR5Main\Specific\IO;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
|
|
|
@ -780,9 +780,6 @@
|
|||
<ClInclude Include="Game\memory\qmalloc.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Game\memory\malloc.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Game\memory\MemoryPoolAllocator.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
|
@ -1086,6 +1083,63 @@
|
|||
<ClInclude Include="Game\control\trigger.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Game\door_data.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Game\item.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Game\roomvector.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Objects\TR2\Vehicles\boat_info.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Game\creature_info.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Game\itemdata\itemdata.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Game\Lara\lara_info.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Objects\TR2\Vehicles\skidoo_info.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Objects\TR3\Vehicles\biggun_info.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Objects\TR3\Vehicles\kayak_info.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Objects\TR3\Vehicles\minecart_info.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Objects\TR3\Vehicles\quad_info.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Objects\TR3\Vehicles\rubberboat_info.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Objects\TR3\Vehicles\upv_info.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Objects\TR4\Entity\tr4_wraith_info.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Objects\TR4\Vehicles\jeep_info.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Objects\TR4\Vehicles\motorbike_info.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Objects\TR5\Entity\tr5_laserhead_info.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Objects\TR5\Object\tr5_pushableblock_info.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Game\box.cpp">
|
||||
|
@ -1736,9 +1790,6 @@
|
|||
<ClCompile Include="Renderer\RenderView\RenderView.cpp">
|
||||
<Filter>File di origine</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Game\memory\malloc.cpp">
|
||||
<Filter>File di origine</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Game\Lara\lara.cpp">
|
||||
<Filter>File di origine</Filter>
|
||||
</ClCompile>
|
||||
|
@ -1997,6 +2048,9 @@
|
|||
<ClCompile Include="Game\control\trigger.cpp">
|
||||
<Filter>File di origine</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Game\itemdata\itemdata.cpp">
|
||||
<Filter>File di origine</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue