fp: Add mobbing behaviour to surround club terry
This commit is contained in:
+31
-4
@@ -651,19 +651,19 @@ static Dqn_V2 FP_Game_CalcWaypointWorldPos(FP_Game *game, FP_GameWaypoint const
|
||||
Dqn_Rect entity_rect = FP_Game_CalcEntityWorldHitBox(game, waypoint_entity->handle);
|
||||
switch (waypoint->type_direction) {
|
||||
case FP_GameDirection_Up: {
|
||||
result = Dqn_V2_InitNx2(entity_rect.pos.x + entity_rect.size.w * .5f, entity_rect.pos.y - entity_rect.size.h * .5f);
|
||||
result = Dqn_V2_InitNx2(entity_rect.pos.x + entity_rect.size.w * .5f, entity_rect.pos.y + entity_rect.size.h * .1f);
|
||||
} break;
|
||||
|
||||
case FP_GameDirection_Down: {
|
||||
result = Dqn_V2_InitNx2(entity_rect.pos.x + entity_rect.size.w * .5f, entity_rect.pos.y + entity_rect.size.h + (entity_rect.size.h * .5f));
|
||||
result = Dqn_V2_InitNx2(entity_rect.pos.x + entity_rect.size.w * .5f, entity_rect.pos.y + entity_rect.size.h + entity_rect.size.h * .1f);
|
||||
} break;
|
||||
|
||||
case FP_GameDirection_Left: {
|
||||
result = Dqn_V2_InitNx2(entity_rect.pos.x - entity_rect.size.w * .5f, entity_rect.pos.y + entity_rect.size.h * .5f);
|
||||
result = Dqn_V2_InitNx2(entity_rect.pos.x - entity_rect.size.w * .1f, entity_rect.pos.y + entity_rect.size.h * .5f);
|
||||
} break;
|
||||
|
||||
case FP_GameDirection_Right: {
|
||||
result = Dqn_V2_InitNx2(entity_rect.pos.x + entity_rect.size.w + entity_rect.size.w * .5f, entity_rect.pos.y + entity_rect.size.h * .5f);
|
||||
result = Dqn_V2_InitNx2(entity_rect.pos.x + entity_rect.size.w + entity_rect.size.w * .1f, entity_rect.pos.y + entity_rect.size.h * .5f);
|
||||
} break;
|
||||
|
||||
case FP_GameDirection_Count: DQN_INVALID_CODE_PATH; break;
|
||||
@@ -674,4 +674,31 @@ static Dqn_V2 FP_Game_CalcWaypointWorldPos(FP_Game *game, FP_GameWaypoint const
|
||||
return result;
|
||||
}
|
||||
|
||||
FP_GameFindClosestEntityResult FP_Game_FindClosestEntityWithType(FP_Game *game, FP_GameEntityHandle src_entity_handle, FP_EntityType type)
|
||||
{
|
||||
FP_GameFindClosestEntityResult result = {};
|
||||
FP_GameEntity *src_entity = FP_Game_GetEntity(game, src_entity_handle);
|
||||
if (FP_Game_IsNilEntity(src_entity))
|
||||
return result;
|
||||
|
||||
Dqn_V2 src_pos = FP_Game_CalcEntityWorldPos(game, src_entity_handle);
|
||||
result.dist_squared = DQN_F32_MAX;
|
||||
result.pos = Dqn_V2_InitNx1(DQN_F32_MAX);
|
||||
|
||||
for (FP_GameEntityIterator it = {}; FP_Game_DFSPostOrderWalkEntityTree(game, &it, game->root_entity); ) {
|
||||
FP_GameEntity *it_entity = it.entity;
|
||||
if (it_entity->type != type)
|
||||
continue;
|
||||
|
||||
Dqn_V2 pos = FP_Game_CalcEntityWorldPos(game, it_entity->handle);
|
||||
Dqn_f32 dist = Dqn_V2_LengthSq_V2x2(pos, src_pos);
|
||||
if (dist < result.dist_squared) {
|
||||
result.pos = pos;
|
||||
result.dist_squared = dist;
|
||||
result.entity = it_entity->handle;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user