10 float tileSize,
const Model& playerModel,
11 float playerModelSize,
12 const Model& eggModel,
float eggModelSize,
15 float closestDist = FLT_MAX;
20 Vector3 pos = player.visual.pos;
22 MatrixMultiply(MatrixScale(playerModelSize, playerModelSize, playerModelSize),
23 MatrixTranslate(pos.x, pos.y, pos.z));
25 for (
int m = 0; m < playerModel.meshCount; m++) {
26 RayCollision collision = GetRayCollisionMesh(ray, playerModel.meshes[m], transform);
27 if (collision.hit && collision.distance < closestDist) {
28 closestDist = collision.distance;
36 for (
const auto& [
id, egg] : state.
world.
eggs) {
42 pos.x += dx * tileSize;
43 pos.z += dz * tileSize;
45 Matrix transform = MatrixMultiply(MatrixScale(eggModelSize, eggModelSize, eggModelSize),
46 MatrixTranslate(pos.x, pos.y, pos.z));
48 for (
int m = 0; m < eggModel.meshCount; m++) {
49 RayCollision collision = GetRayCollisionMesh(ray, eggModel.meshes[m], transform);
50 if (collision.hit && collision.distance < closestDist) {
51 closestDist = collision.distance;
59 RayCollision collision =
65 if (collision.hit && collision.distance < closestDist) {
66 float offsetX = (state.
world.
width * tileSize) / 2.0f;
67 float offsetZ = (state.
world.
height * tileSize) / 2.0f;
69 int tileX = (int)((collision.point.x + offsetX) / tileSize);
70 int tileY = (int)((collision.point.z + offsetZ) / tileSize);
72 if (tileX >= 0 && tileX < state.world.width && tileY >= 0 && tileY < state.
world.
height) {
74 newSelection.
tileX = tileX;
75 newSelection.
tileY = tileY;
static Vector3 tileToWorld(int tileX, int tileY, int worldWidth, int worldHeight, float tileSize)
Converts tile coordinates to world coordinates (centered on tile).
static Selection findFromRay(const Ray &ray, const GameState &state, float tileSize, const Model &playerModel, float playerModelSize, const Model &eggModel, float eggModelSize, const TileSlotMap &slotMap)
Performs raycast and finds closest entity.