Explorar el Código

world: fix ID decoding

Daniele Bartolini hace 5 meses
padre
commit
63d897d32e
Se han modificado 4 ficheros con 19 adiciones y 10 borrados
  1. 11 0
      src/core/unit_tests.cpp
  2. 8 1
      src/world/types.h
  3. 0 6
      src/world/unit_manager.cpp
  4. 0 3
      src/world/unit_manager.h

+ 11 - 0
src/core/unit_tests.cpp

@@ -48,6 +48,7 @@
 #include "core/time.h"
 #include "core/time.h"
 #include "resource/expression_language.h"
 #include "resource/expression_language.h"
 #include "resource/lua_resource.h"
 #include "resource/lua_resource.h"
+#include "world/types.h"
 #include <stdlib.h> // EXIT_SUCCESS, EXIT_FAILURE
 #include <stdlib.h> // EXIT_SUCCESS, EXIT_FAILURE
 #include <stdio.h>  // printf
 #include <stdio.h>  // printf
 
 
@@ -2165,6 +2166,15 @@ static void test_expression_language()
 	memory_globals::shutdown();
 	memory_globals::shutdown();
 }
 }
 
 
+static void test_unit_id()
+{
+	{
+		UnitId u = make_unit(100, 50);
+		ENSURE(u.index() == 100);
+		ENSURE(u.id() == 50);
+	}
+}
+
 #define RUN_TEST(name)      \
 #define RUN_TEST(name)      \
 	do {                    \
 	do {                    \
 		printf(#name "\n"); \
 		printf(#name "\n"); \
@@ -2205,6 +2215,7 @@ int main_unit_tests()
 	RUN_TEST(test_lua_resource);
 	RUN_TEST(test_lua_resource);
 	RUN_TEST(test_time);
 	RUN_TEST(test_time);
 	RUN_TEST(test_expression_language);
 	RUN_TEST(test_expression_language);
+	RUN_TEST(test_unit_id);
 
 
 	return EXIT_SUCCESS;
 	return EXIT_SUCCESS;
 }
 }

+ 8 - 1
src/world/types.h

@@ -226,6 +226,7 @@ struct EventType
 #define UNIT_INDEX_MASK 0x003fffff
 #define UNIT_INDEX_MASK 0x003fffff
 #define UNIT_ID_BITS    8
 #define UNIT_ID_BITS    8
 #define UNIT_ID_MASK    0x3fc00000
 #define UNIT_ID_MASK    0x3fc00000
+CE_STATIC_ASSERT(UNIT_INDEX_BITS + UNIT_ID_BITS <= 30);
 
 
 /// Unit id.
 /// Unit id.
 ///
 ///
@@ -241,7 +242,7 @@ struct UnitId
 
 
 	u32 id() const
 	u32 id() const
 	{
 	{
-		return (_idx >> UNIT_INDEX_BITS) & UNIT_ID_MASK;
+		return _idx >> UNIT_INDEX_BITS;
 	}
 	}
 
 
 	bool is_valid()
 	bool is_valid()
@@ -250,6 +251,12 @@ struct UnitId
 	}
 	}
 };
 };
 
 
+inline UnitId make_unit(u32 idx, u8 gen)
+{
+	UnitId unit = { idx | u32(gen) << UNIT_INDEX_BITS };
+	return unit;
+}
+
 inline bool operator==(const UnitId &a, const UnitId &b)
 inline bool operator==(const UnitId &a, const UnitId &b)
 {
 {
 	return a._idx == b._idx;
 	return a._idx == b._idx;

+ 0 - 6
src/world/unit_manager.cpp

@@ -20,12 +20,6 @@ UnitManager::UnitManager(Allocator &a)
 	list::init_head(_callbacks.node);
 	list::init_head(_callbacks.node);
 }
 }
 
 
-UnitId UnitManager::make_unit(u32 idx, u8 gen)
-{
-	UnitId unit = { idx | u32(gen) << UNIT_INDEX_BITS };
-	return unit;
-}
-
 UnitId UnitManager::create()
 UnitId UnitManager::create()
 {
 {
 	u32 idx;
 	u32 idx;

+ 0 - 3
src/world/unit_manager.h

@@ -24,9 +24,6 @@ struct UnitManager
 	///
 	///
 	explicit UnitManager(Allocator &a);
 	explicit UnitManager(Allocator &a);
 
 
-	///
-	UnitId make_unit(u32 idx, u8 gen);
-
 	/// Creates a new empty unit.
 	/// Creates a new empty unit.
 	UnitId create();
 	UnitId create();