feat(collision): Added collider type to combine a shape with a rigidbody and additional physics settings
This commit is contained in:
parent
29b2852cea
commit
6a2a612594
53
core/src/collider.c
Normal file
53
core/src/collider.c
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
#include "collider.h"
|
||||||
|
#include "collision.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
struct Collider {
|
||||||
|
Shape* shape;
|
||||||
|
RigidBody* body;
|
||||||
|
PhysicsMask layers;
|
||||||
|
int overlap;
|
||||||
|
};
|
||||||
|
|
||||||
|
Collider* collider_new(RigidBody* body, Shape* shape, int overlap, PhysicsMask layers) {
|
||||||
|
Collider* self = malloc(sizeof(Collider));
|
||||||
|
ASSERT_RETURN(self != NULL, NULL, "Failed to allocate space for Collider");
|
||||||
|
*self = (Collider) {
|
||||||
|
.shape = shape,
|
||||||
|
.body = body,
|
||||||
|
.layers = layers,
|
||||||
|
.overlap = overlap,
|
||||||
|
};
|
||||||
|
rigidbody_add_collider(self->body, self);
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
void collider_destroy(Collider* self) {
|
||||||
|
shape_destroy(self->shape);
|
||||||
|
rigidbody_remove_collider(self->body, self);
|
||||||
|
free(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
PhysicsQuery collider_to_query(Collider* self) {
|
||||||
|
return (PhysicsQuery) {
|
||||||
|
.shape = self->shape,
|
||||||
|
.transform = rigidbody_get_transform(self->body),
|
||||||
|
.mask = self->layers
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
Shape* collider_get_shape(Collider* self) {
|
||||||
|
return self->shape;
|
||||||
|
}
|
||||||
|
|
||||||
|
RigidBody* collider_get_rigidbody(Collider* self) {
|
||||||
|
return self->body;
|
||||||
|
}
|
||||||
|
|
||||||
|
int collider_is_overlap(Collider* self) {
|
||||||
|
return self->overlap;
|
||||||
|
}
|
||||||
|
|
||||||
|
void collider_set_overlap(Collider* self, int value) {
|
||||||
|
self->overlap = value;
|
||||||
|
}
|
19
core/src/collider.h
Normal file
19
core/src/collider.h
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
#ifndef _fencer_collider_h
|
||||||
|
#define _fencer_collider_h
|
||||||
|
|
||||||
|
#include "shape.h"
|
||||||
|
#include "rigidbody.h"
|
||||||
|
|
||||||
|
typedef struct Collider Collider;
|
||||||
|
|
||||||
|
extern Collider* collider_new(RigidBody* owner, Shape* shape, int overlap, PhysicsMask layers);
|
||||||
|
extern void collider_destroy(Collider* self);
|
||||||
|
extern PhysicsQuery collider_to_query(Collider* self);
|
||||||
|
|
||||||
|
extern Shape* collider_get_shape(Collider* self);
|
||||||
|
extern RigidBody* collider_get_rigidbody(Collider* self);
|
||||||
|
|
||||||
|
extern int collider_is_overlap(Collider* self);
|
||||||
|
extern void collider_set_overlap(Collider* self, int value);
|
||||||
|
|
||||||
|
#endif // !_fencer_collider_h
|
Loading…
Reference in a new issue