Nimbin2git.christianimmanuel.de / Games / strichmaennchen / object.h

strichmaennchen git · main

git clone https://git.christianimmanuel.de/games/strichmaennchen.gitwget https://git.christianimmanuel.de/games/strichmaennchen/archive/strichmaennchen.tar.gz
object.h 1.8 KB · 67 lines 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 */