Skip to content

Commit 6b04323

Browse files
committed
Load shared map colliders in server
Add a shared MapColliderDef array (Network/map_colliders.h) and update GameServer to register colliders from it instead of using hardcoded colliders. The new header defines collider categories (MAP_GROUND, MAP_CUBE, MAP_WALL), a pure-C MapColliderDef struct, MAP_COLLIDERS and MAP_COLLIDER_COUNT for client/server sync. GameServer::Initialize now iterates MAP_COLLIDERS, builds ServerCollider AABBs (auto-computes ±0.5 for MAP_CUBE, uses explicit min/max for others) and copies the isGround flag, removing the previous hardcoded ground/platform entries.
1 parent 0fb0708 commit 6b04323

File tree

2 files changed

+79
-3
lines changed

2 files changed

+79
-3
lines changed

Network/game_server.cpp

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include "game_server.h"
99
#include "enet_server_network.h"
10+
#include "map_colliders.h"
1011
#include <cmath>
1112
#include <cstdio>
1213

@@ -31,10 +32,31 @@ void GameServer::Initialize(ENetServerNetwork* pNetwork)
3132
m_CurrentTick = 0;
3233
m_Players.clear();
3334

34-
// Register ground collider (must match client CollisionWorld)
35+
// Register colliders from shared map data (must match client)
3536
m_Colliders.clear();
36-
m_Colliders.push_back({ {{ -128.0f, -1.0f, -128.0f }, { 128.0f, 0.0f, 128.0f }}, true });
37-
m_Colliders.push_back({ {{ 5.0f, 0.0f, 5.0f }, { 10.0f, 2.0f, 10.0f }}, true }); // Test platform
37+
for (int i = 0; i < MAP_COLLIDER_COUNT; i++)
38+
{
39+
const MapColliderDef& def = MAP_COLLIDERS[i];
40+
ServerCollider sc;
41+
if (def.category == MAP_CUBE)
42+
{
43+
// Cube: AABB = position ± 0.5
44+
sc.aabb = {
45+
{ def.posX - 0.5f, def.posY - 0.5f, def.posZ - 0.5f },
46+
{ def.posX + 0.5f, def.posY + 0.5f, def.posZ + 0.5f }
47+
};
48+
}
49+
else
50+
{
51+
// Explicit AABB
52+
sc.aabb = {
53+
{ def.minX, def.minY, def.minZ },
54+
{ def.maxX, def.maxY, def.maxZ }
55+
};
56+
}
57+
sc.isGround = def.isGround;
58+
m_Colliders.push_back(sc);
59+
}
3860
}
3961

4062
void GameServer::Finalize()

Network/map_colliders.h

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#pragma once
2+
//=============================================================================
3+
// map_colliders.h
4+
//
5+
// Shared map collider definitions.
6+
// This file is used by BOTH client and server — keep in sync!
7+
// No DirectXMath dependency — pure C structs.
8+
//=============================================================================
9+
10+
// Object categories
11+
enum MapCategory
12+
{
13+
MAP_GROUND = 0, // Ground plane — rendered as MeshField, has AABB
14+
MAP_CUBE = 1, // Cube block — rendered with Cube_Draw, AABB from position
15+
MAP_WALL = 2, // Invisible wall — AABB only, no rendering
16+
};
17+
18+
// Collider definition
19+
// For MAP_CUBE: AABB is auto-computed from position (±0.5 unit cube)
20+
// For MAP_GROUND / MAP_WALL: AABB is specified explicitly via min/max
21+
struct MapColliderDef
22+
{
23+
int category;
24+
float posX, posY, posZ; // position (used for cube rendering & AABB center)
25+
float minX, minY, minZ; // AABB min (explicit, ignored for MAP_CUBE)
26+
float maxX, maxY, maxZ; // AABB max (explicit, ignored for MAP_CUBE)
27+
bool isGround; // true = player can land on this surface
28+
};
29+
30+
// ============================================================================
31+
// MAP DATA — Add new colliders here!
32+
// ============================================================================
33+
static const MapColliderDef MAP_COLLIDERS[] =
34+
{
35+
// === Ground ===
36+
// cat pos(x,y,z) AABB min AABB max ground
37+
{ MAP_GROUND, 0,0,0, -128.0f,-1.0f,-128.0f, 128.0f, 0.0f, 128.0f, true },
38+
39+
// === Cube Blocks (AABB auto = pos ± 0.5) ===
40+
// y=0.5 → AABB [0,1] (sits on ground) | y=1.5 → AABB [1,2] (second layer)
41+
// cat pos(x,y,z) (min/max ignored for cubes) ground
42+
{ MAP_CUBE, 7.5f, 0.5f, 7.5f, 0,0,0, 0,0,0, true },
43+
{ MAP_CUBE, 7.5f, 0.5f, 8.5f, 0,0,0, 0,0,0, true },
44+
{ MAP_CUBE, 8.5f, 0.5f, 7.5f, 0,0,0, 0,0,0, true },
45+
{ MAP_CUBE, 8.5f, 0.5f, 8.5f, 0,0,0, 0,0,0, true },
46+
{ MAP_CUBE, 7.5f, 1.5f, 7.5f, 0,0,0, 0,0,0, true },
47+
{ MAP_CUBE, 8.5f, 1.5f, 7.5f, 0,0,0, 0,0,0, true },
48+
49+
// === Invisible Walls (map boundary) ===
50+
// cat pos(unused) AABB min AABB max ground
51+
// (Add map boundary walls here if needed)
52+
};
53+
54+
static const int MAP_COLLIDER_COUNT = sizeof(MAP_COLLIDERS) / sizeof(MAP_COLLIDERS[0]);

0 commit comments

Comments
 (0)