mirror of
https://github.com/LostArtefacts/TRX.git
synced 2025-04-28 20:58:07 +03:00
creature: move Creature_CheckBaddieOverlap to trx
This commit is contained in:
parent
c79f80486f
commit
7718406bbe
6 changed files with 33 additions and 62 deletions
|
@ -462,6 +462,38 @@ void Creature_Neck(ITEM *const item, const int16_t required)
|
|||
CLAMP(creature->neck_rotation, -M_HEAD_ARC, M_HEAD_ARC);
|
||||
}
|
||||
|
||||
bool Creature_CheckBaddieOverlap(const int16_t item_num)
|
||||
{
|
||||
const ITEM *item = Item_Get(item_num);
|
||||
|
||||
const int32_t x = item->pos.x;
|
||||
const int32_t y = item->pos.y;
|
||||
const int32_t z = item->pos.z;
|
||||
const int32_t radius = SQUARE(Object_Get(item->object_id)->radius);
|
||||
|
||||
int16_t link = Room_Get(item->room_num)->item_num;
|
||||
while (link != NO_ITEM && link != item_num) {
|
||||
item = Item_Get(link);
|
||||
if (item != Lara_GetItem() && item->status == IS_ACTIVE
|
||||
&& item->speed != 0) {
|
||||
const XYZ_32 delta = {
|
||||
item->pos.x - x,
|
||||
item->pos.y - y,
|
||||
item->pos.z - z,
|
||||
};
|
||||
const int32_t distance =
|
||||
SQUARE(delta.x) + SQUARE(delta.y) + SQUARE(delta.z);
|
||||
if (distance < radius) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
link = item->next_item;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void Creature_Collision(
|
||||
const int16_t item_num, ITEM *const lara_item, COLL_INFO *const coll)
|
||||
{
|
||||
|
|
|
@ -15,6 +15,7 @@ void Creature_Tilt(ITEM *item, int16_t angle);
|
|||
void Creature_Head(ITEM *item, int16_t required);
|
||||
void Creature_Neck(ITEM *item, int16_t required);
|
||||
|
||||
bool Creature_CheckBaddieOverlap(int16_t item_num);
|
||||
void Creature_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll);
|
||||
|
||||
extern bool Creature_IsHostile(const ITEM *item);
|
||||
|
|
|
@ -18,38 +18,6 @@
|
|||
#include <libtrx/game/math.h>
|
||||
#include <libtrx/log.h>
|
||||
|
||||
bool Creature_CheckBaddieOverlap(int16_t item_num)
|
||||
{
|
||||
const ITEM *item = Item_Get(item_num);
|
||||
|
||||
int32_t x = item->pos.x;
|
||||
int32_t y = item->pos.y;
|
||||
int32_t z = item->pos.z;
|
||||
const int32_t radius = SQUARE(Object_Get(item->object_id)->radius);
|
||||
|
||||
int16_t link = Room_Get(item->room_num)->item_num;
|
||||
do {
|
||||
item = Item_Get(link);
|
||||
|
||||
if (link == item_num) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (item != g_LaraItem && item->status == IS_ACTIVE
|
||||
&& item->speed != 0) {
|
||||
int32_t distance = SQUARE(item->pos.x - x) + SQUARE(item->pos.y - y)
|
||||
+ SQUARE(item->pos.z - z);
|
||||
if (distance < radius) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
link = item->next_item;
|
||||
} while (link != NO_ITEM);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Creature_Animate(int16_t item_num, int16_t angle, int16_t tilt)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
#define CREATURE_SHOOT_RANGE SQUARE(WALL_L * 7) // = 51380224
|
||||
#define CREATURE_MISS_CHANCE 0x2000
|
||||
|
||||
bool Creature_CheckBaddieOverlap(int16_t item_num);
|
||||
bool Creature_CanTargetEnemy(ITEM *item, AI_INFO *info);
|
||||
bool Creature_ShootAtLara(
|
||||
ITEM *item, int32_t distance, BITE *gun, int16_t extra_rotation,
|
||||
|
|
|
@ -29,34 +29,6 @@
|
|||
#define CREATURE_SHOOT_RANGE SQUARE(WALL_L * 8) // = 0x4000000 = 67108864
|
||||
#define CREATURE_SHOOT_HIT_CHANCE 0x2000
|
||||
|
||||
int32_t Creature_CheckBaddieOverlap(const int16_t item_num)
|
||||
{
|
||||
const ITEM *item = Item_Get(item_num);
|
||||
|
||||
const int32_t x = item->pos.x;
|
||||
const int32_t y = item->pos.y;
|
||||
const int32_t z = item->pos.z;
|
||||
const int32_t radius = SQUARE(Object_Get(item->object_id)->radius);
|
||||
|
||||
int16_t link = Room_Get(item->room_num)->item_num;
|
||||
while (link != NO_ITEM && link != item_num) {
|
||||
item = Item_Get(link);
|
||||
if (item != g_LaraItem && item->status == IS_ACTIVE
|
||||
&& item->speed != 0) {
|
||||
const int32_t distance =
|
||||
(SQUARE(item->pos.z - z) + SQUARE(item->pos.y - y)
|
||||
+ SQUARE(item->pos.x - x));
|
||||
if (distance < radius) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
link = item->next_item;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void Creature_Die(const int16_t item_num, const bool explode)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
#include <libtrx/game/creature.h>
|
||||
|
||||
int32_t Creature_CheckBaddieOverlap(int16_t item_num);
|
||||
void Creature_Die(int16_t item_num, bool explode);
|
||||
void Creature_Float(int16_t item_num);
|
||||
void Creature_Underwater(ITEM *item, int32_t depth);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue