summaryrefslogtreecommitdiffstats
path: root/src/World.h
diff options
context:
space:
mode:
authoraap <aap@papnet.eu>2019-05-15 16:52:37 +0200
committeraap <aap@papnet.eu>2019-05-15 16:52:37 +0200
commit600bf0351476a5a21aabb5429132ddf7f52ac0b9 (patch)
treed8e48b3a581679e33830fb7c98ed69e1e242e2c2 /src/World.h
downloadre3-600bf0351476a5a21aabb5429132ddf7f52ac0b9.tar
re3-600bf0351476a5a21aabb5429132ddf7f52ac0b9.tar.gz
re3-600bf0351476a5a21aabb5429132ddf7f52ac0b9.tar.bz2
re3-600bf0351476a5a21aabb5429132ddf7f52ac0b9.tar.lz
re3-600bf0351476a5a21aabb5429132ddf7f52ac0b9.tar.xz
re3-600bf0351476a5a21aabb5429132ddf7f52ac0b9.tar.zst
re3-600bf0351476a5a21aabb5429132ddf7f52ac0b9.zip
Diffstat (limited to 'src/World.h')
-rw-r--r--src/World.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/World.h b/src/World.h
new file mode 100644
index 00000000..ecd8feb3
--- /dev/null
+++ b/src/World.h
@@ -0,0 +1,66 @@
+#pragma once
+
+#include "Game.h"
+#include "Lists.h"
+
+/* Sectors span from -2000 to 2000 in x and y.
+ * With 100x100 sectors, each is 40x40 units. */
+
+#define NUMSECTORS_X 100
+#define NUMSECTORS_Y 100
+
+enum
+{
+ ENTITYLIST_BUILDINGS,
+ ENTITYLIST_BUILDINGS_OVERLAP,
+ ENTITYLIST_OBJECTS,
+ ENTITYLIST_OBJECTS_OVERLAP,
+ ENTITYLIST_VEHICLES,
+ ENTITYLIST_VEHICLES_OVERLAP,
+ ENTITYLIST_PEDS,
+ ENTITYLIST_PEDS_OVERLAP,
+ ENTITYLIST_DUMMIES,
+ ENTITYLIST_DUMMIES_OVERLAP,
+
+ NUMSECTORENTITYLISTS
+};
+
+class CSector
+{
+public:
+ CPtrList m_lists[NUMSECTORENTITYLISTS];
+};
+static_assert(sizeof(CSector) == 0x28, "CSector: error");
+
+class CWorld
+{
+ static CPtrList *ms_bigBuildingsList; // [4];
+ static CPtrList &ms_listMovingEntityPtrs;
+ static CSector (*ms_aSectors)[NUMSECTORS_X]; // [NUMSECTORS_Y][NUMSECTORS_X];
+ static uint16 &ms_nCurrentScanCode;
+
+public:
+ static bool &bNoMoreCollisionTorque;
+
+ static CSector *GetSector(int x, int y) { return &ms_aSectors[y][x]; }
+ static CPtrList &GetBigBuildingList(eLevelName i) { return ms_bigBuildingsList[i]; }
+ static CPtrList &GetMovingEntityList(void) { return ms_listMovingEntityPtrs; }
+ static uint16 GetCurrentScanCode(void) { return ms_nCurrentScanCode; }
+ static void AdvanceCurrentScanCode(void){
+ if(++CWorld::ms_nCurrentScanCode == 0){
+ CWorld::ClearScanCodes();
+ CWorld::ms_nCurrentScanCode = 1;
+ }
+ }
+ static void ClearScanCodes(void);
+
+ static float GetSectorX(float f) { return ((f + 2000.0f)/40.0f); }
+ static float GetSectorY(float f) { return ((f + 2000.0f)/40.0f); }
+ static int GetSectorIndexX(float f) { return (int)GetSectorX(f); }
+ static int GetSectorIndexY(float f) { return (int)GetSectorY(f); }
+};
+
+CVector &FindPlayerCoors(CVector &v);
+class CVehicle;
+CVehicle *FindPlayerVehicle(void);
+CVehicle *FindPlayerTrain(void);