feat: add experimental game engine & demo game, fix ACPI events
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* collision.h
|
||||
* MontaukOS 2D Game Engine - Collision Detection
|
||||
* AABB overlap testing and tile-based collision response
|
||||
* Copyright (c) 2026 Daniel Hammer
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include <cstdint>
|
||||
#include "engine/tilemap.h"
|
||||
|
||||
namespace engine {
|
||||
|
||||
struct AABB {
|
||||
float x, y, w, h;
|
||||
|
||||
bool overlaps(const AABB& other) const {
|
||||
return x < other.x + other.w && x + w > other.x &&
|
||||
y < other.y + other.h && y + h > other.y;
|
||||
}
|
||||
|
||||
bool contains_point(float px, float py) const {
|
||||
return px >= x && px < x + w && py >= y && py < y + h;
|
||||
}
|
||||
};
|
||||
|
||||
// Try to move an entity by (dx, dy) on the tilemap.
|
||||
// Uses separate X/Y axis resolution so the entity slides along walls.
|
||||
// box: the entity's collision box in world pixel coordinates.
|
||||
// Returns adjusted dx, dy after collision.
|
||||
inline void resolve_tilemap_collision(const Tilemap& map,
|
||||
float bx, float by, float bw, float bh,
|
||||
float& dx, float& dy) {
|
||||
// Try X movement
|
||||
float new_x = bx + dx;
|
||||
if (map.collides((int)new_x, (int)by, (int)bw, (int)bh)) {
|
||||
dx = 0.0f;
|
||||
new_x = bx;
|
||||
}
|
||||
|
||||
// Try Y movement
|
||||
float new_y = by + dy;
|
||||
if (map.collides((int)new_x, (int)new_y, (int)bw, (int)bh)) {
|
||||
dy = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace engine
|
||||
Reference in New Issue
Block a user