60 lines
1.7 KiB
C
60 lines
1.7 KiB
C
#if !defined(HANDMADE_WORLD_H)
|
|
/* ========================================================================
|
|
$File: $
|
|
$Date: $
|
|
$Revision: $
|
|
$Creator: Casey Muratori $
|
|
$Notice: (C) Copyright 2015 by Molly Rocket, Inc. All Rights Reserved. $
|
|
======================================================================== */
|
|
|
|
introspect(category:"world") struct world_position
|
|
{
|
|
// TODO(casey): It seems like we have to store ChunkX/Y/Z with each
|
|
// entity because even though the sim region gather doesn't need it
|
|
// at first, and we could get by without it, entity references pull
|
|
// in entities WITHOUT going through their world_chunk, and thus
|
|
// still need to know the ChunkX/Y/Z
|
|
|
|
s32 ChunkX;
|
|
s32 ChunkY;
|
|
s32 ChunkZ;
|
|
|
|
// NOTE(casey): These are the offsets from the chunk center
|
|
v3 Offset_;
|
|
};
|
|
|
|
// TODO(casey): Could make this just tile_chunk and then allow multiple tile chunks per X/Y/Z
|
|
struct world_entity_block
|
|
{
|
|
uint32 EntityCount;
|
|
uint32 LowEntityIndex[16];
|
|
world_entity_block *Next;
|
|
};
|
|
|
|
struct world_chunk
|
|
{
|
|
int32 ChunkX;
|
|
int32 ChunkY;
|
|
int32 ChunkZ;
|
|
|
|
// TODO(casey): Profile this and determine if a pointer would be better here!
|
|
world_entity_block FirstBlock;
|
|
|
|
world_chunk *NextInHash;
|
|
};
|
|
|
|
struct world
|
|
{
|
|
v3 ChunkDimInMeters;
|
|
|
|
world_entity_block *FirstFree;
|
|
|
|
// TODO(casey): WorldChunkHash should probably switch to pointers IF
|
|
// tile entity blocks continue to be stored en masse directly in the tile chunk!
|
|
// NOTE(casey): A the moment, this must be a power of two!
|
|
world_chunk ChunkHash[4096];
|
|
};
|
|
|
|
#define HANDMADE_WORLD_H
|
|
#endif
|