strichmaennchen git · main
git clone https://git.christianimmanuel.de/games/strichmaennchen.gitwget https://git.christianimmanuel.de/games/strichmaennchen/archive/strichmaennchen.tar.gzobject.h raw
#ifndef GAMEOBJECT_H
#define GAMEOBJECT_H
#include "linalg.h"
#include "mesh.h"
#include "renderer.h"
#include "camera.h"
typedef struct {
Vec3 position; // world-space center of the collider
Vec3 half_extents; // half-width, half-height, half-depth (OBB)
Vec3 rotation; // orientation (Euler or quaternion)
Vec3 axes[3]; // cached orthonormal basis vectors (X, Y, Z of the OBB)
bool isStatic;
} Collider;
typedef enum {
OBJ_TRIANGLE,
OBJ_PYRAMID,
OBJ_AXES,
OBJ_CUBE,
OBJ_CYLINDER,
OBJ_CYLINDER_STATIC,
OBJ_SPHERE,
OBJ_HUMAN,
OBJ_HUMAN_PLAYER,
OBJ_GROUND,
OBJ_TREE,
OBJ_HOUSE_MAIN,
OBJ_BARN,
OBJ_WALL,
} ObjectType;
typedef struct {
ObjectType type;
VertexPreset vertex;
Vec3 position; // object feet/base
Vec3 position_center; // center offset (mesh alignment)
Vec3 rotation;
Mesh mesh;
Vec3 color;
Collider collider; // attached collider
Vec3 velocity;
Vec3 angular_velocity;
Vec3 movement;
bool is_grounded;
int weight;
int strength;
} Object;
Object *Object_create(ObjectType type, VertexPreset vertex, Vec3 position, Vec3 size, float weight);
void Object_render(Object *obj, Renderer *renderer, Camera *camera, Time* time);
void Object_destroy(Object* obj);
bool AABB_overlap(Object* o_a, Object* o_b);
void Collider_positionGround(Object* obj, Object* ground);
void Object_setRotation(Object *obj, Vec3 rot);
void Object_rotate(Object *obj, Vec3 delta);
void Object_applyGravity(Object *obj, float dt);
void Object_resolveCollisions(Object *obj, Object **worldObjects, int count);
void Object_update(Object *obj, Object **worldObjects, int count, float dt);
void Object_setRotation(Object *obj, Vec3 rotation);
void Object_rotate(Object *obj, Vec3 delta);
#endif /* GAMEOBJECT_H */