Просмотр исходного кода

Entity: ability to remove collider

SG 1 год назад
Родитель
Сommit
4961b5aa77
2 измененных файлов с 16 добавлено и 13 удалено
  1. 11 4
      entity.c
  2. 5 9
      entity.h

+ 11 - 4
entity.c

@@ -48,6 +48,13 @@ void entity_collider_add_rect(Entity* entity, float width, float height) {
     entity->collider_dirty = true;
 }
 
+void entity_collider_remove(Entity* entity) {
+    furi_check(entity->collider != NULL, "Collider not added");
+    free(entity->collider);
+    entity->collider = NULL;
+    entity->collider_dirty = false;
+}
+
 void entity_collider_offset_set(Entity* entity, Vector offset) {
     entity->collider_offset = offset;
     entity->collider_dirty = true;
@@ -93,15 +100,15 @@ void* entity_context_get(Entity* entity) {
     return entity->context;
 }
 
-void entity_call_start(Level* level, Entity* entity) {
+void entity_call_start(Entity* entity, GameManager* manager) {
     if(entity->description && entity->description->start) {
-        entity->description->start(entity, level, entity->context);
+        entity->description->start(entity, manager, entity->context);
     }
 }
 
-void entity_call_stop(Level* level, Entity* entity) {
+void entity_call_stop(Entity* entity, GameManager* manager) {
     if(entity->description && entity->description->stop) {
-        entity->description->stop(entity, level, entity->context);
+        entity->description->stop(entity, manager, entity->context);
     }
 }
 

+ 5 - 9
entity.h

@@ -1,4 +1,5 @@
 #pragma once
+#include "vector.h"
 #include "game_engine.h"
 #include <stdlib.h>
 
@@ -10,13 +11,6 @@ typedef struct Entity Entity;
 
 typedef struct Level Level;
 
-typedef struct {
-    float x;
-    float y;
-} Vector;
-
-#define VECTOR_ZERO ((Vector){0, 0})
-
 typedef union {
     uint32_t value;
     void* pointer;
@@ -32,8 +26,8 @@ typedef struct Level Level;
 typedef struct GameManager GameManager;
 
 typedef struct {
-    void (*start)(Entity* self, Level* level, void* context);
-    void (*stop)(Entity* self, Level* level, void* context);
+    void (*start)(Entity* self, GameManager* manager, void* context);
+    void (*stop)(Entity* self, GameManager* manager, void* context);
     void (*update)(Entity* self, GameManager* manager, void* context);
     void (*render)(Entity* self, GameManager* manager, Canvas* canvas, void* context);
     void (*collision)(Entity* self, Entity* other, GameManager* manager, void* context);
@@ -53,6 +47,8 @@ void entity_collider_add_circle(Entity* entity, float radius);
 
 void entity_collider_add_rect(Entity* entity, float width, float height);
 
+void entity_collider_remove(Entity* entity);
+
 void entity_collider_offset_set(Entity* entity, Vector offset);
 
 Vector entity_collider_offset_get(Entity* entity);