Add hp, Add attack collision detection, Add destroy on death
This commit is contained in:
		
							parent
							
								
									589d56dd82
								
							
						
					
					
						commit
						5e441e1a13
					
				| @ -815,6 +815,36 @@ void FP_Update(TELY_Platform *platform, FP_Game *game, TELY_PlatformInput *input | ||||
|                 entity->local_pos += delta_pos; | ||||
|             } | ||||
|         } | ||||
|          | ||||
|         // NOTE: Attack collisions =================================================================
 | ||||
|         { | ||||
|             // NOTE: Check if there's an active attack box
 | ||||
|             if (entity->attack_box_size.x != 0 && entity->attack_box_size.y != 0) { | ||||
|                 Dqn_Rect entity_attack_box = {}; | ||||
|                 // NOTE: Convert from centre origin to top-left origin
 | ||||
|                 entity_attack_box.pos  = entity->local_pos + entity->attack_box_offset - (entity->attack_box_size * 0.5f); | ||||
|                 entity_attack_box.size = entity->attack_box_size; | ||||
| 
 | ||||
|                 for (FP_GameEntityIterator target_it = {}; FP_Game_DFSPreOrderWalkEntityTree(game, &target_it, game->root_entity);) { | ||||
|                     FP_GameEntity *target = target_it.entity; | ||||
|                     if (target->handle == entity->handle) | ||||
|                         continue; | ||||
| 
 | ||||
|                     // TODO(josh): This check should be updated based on an entity attackable flag
 | ||||
|                     if (target->flags & FP_GameEntityFlag_Attackable) { | ||||
|                         Dqn_Rect target_world_hit_box = FP_Game_CalcEntityWorldHitBox(game, target->handle); | ||||
| 
 | ||||
|                         if (Dqn_Rect_Intersects(entity_attack_box, target_world_hit_box)) { | ||||
|                             target->hp -= 1; | ||||
| 
 | ||||
|                             if (target->hp <= 0) { | ||||
|                                 FP_Game_DeleteEntity(game, target->handle); | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // NOTE: Move entity by mouse ==============================================================
 | ||||
|         if (game->active_entity == entity->handle && entity->flags & FP_GameEntityFlag_MoveByMouse) { | ||||
|  | ||||
| @ -44,11 +44,13 @@ static FP_GameEntityHandle FP_Entity_CreateSmoochie(FP_Game *game, Dqn_V2 pos, D | ||||
|     va_end(args); | ||||
| 
 | ||||
|     entity->type                 = FP_EntityType_Smoochie; | ||||
|     entity->hp                   = 3; | ||||
|     entity->local_pos            = pos; | ||||
|     entity->sprite_height.meters = 1.6f; | ||||
|     entity->local_hit_box_size   = Dqn_V2_InitNx2(0.4f, 1.6f) * FP_Game_MetersToPixels(game); | ||||
|     FP_Entity_AddDebugEditorFlags(game, entity->handle); | ||||
|     entity->flags              |= FP_GameEntityFlag_NonTraversable; | ||||
|     entity->flags              |= FP_GameEntityFlag_Attackable; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -15,6 +15,7 @@ enum FP_GameEntityFlag | ||||
|     FP_GameEntityFlag_MobSpawner                          = 1 << 7, | ||||
|     FP_GameEntityFlag_MobSpawnerWaypoint                  = 1 << 8, | ||||
|     FP_GameEntityFlag_AggrosWhenNearTerry                 = 1 << 9, | ||||
|     FP_GameEntityFlag_Attackable                          = 1 << 9, | ||||
| }; | ||||
| 
 | ||||
| enum FP_GameShapeType | ||||
| @ -118,6 +119,7 @@ struct FP_GameEntity | ||||
|     uint64_t                              spawn_cap; | ||||
| 
 | ||||
|     uint64_t                              flags; | ||||
|     uint64_t                              hp; | ||||
|     FP_GameDirection                      direction; | ||||
|     Dqn_V2                                local_pos; | ||||
|     Dqn_f64                               alive_time_s; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user