Bläddra i källkod

Random stuff in Unit and World

Daniele Bartolini 12 år sedan
förälder
incheckning
5b41221abe
4 ändrade filer med 53 tillägg och 29 borttagningar
  1. 24 2
      engine/Unit.cpp
  2. 13 8
      engine/Unit.h
  3. 12 10
      engine/World.cpp
  4. 4 9
      engine/World.h

+ 24 - 2
engine/Unit.cpp

@@ -30,12 +30,34 @@ namespace crown
 {
 
 //-----------------------------------------------------------------------------
-Unit::Unit(SceneGraph& sg, const Vec3& pos, const Quat& rot) :
-	m_scene_graph(sg)
+void Unit::create(const Vec3& pos, const Quat& rot)
 {
 	m_root_node = m_scene_graph.create_node(pos, rot);
 }
 
+//-----------------------------------------------------------------------------
+void Unit::destroy()
+{
+
+}
+
+//-----------------------------------------------------------------------------
+void Unit::load(UnitResource* ur)
+{
+	m_resource = ur;
+}
+
+//-----------------------------------------------------------------------------
+void Unit::unload()
+{
+}
+
+//-----------------------------------------------------------------------------
+void Unit::reload(UnitResource* new_ur)
+{
+	(void)new_ur;
+}
+
 //-----------------------------------------------------------------------------
 Vec3 Unit::local_position() const
 {

+ 13 - 8
engine/Unit.h

@@ -35,15 +35,22 @@ OTHER DEALINGS IN THE SOFTWARE.
 namespace crown
 {
 
+struct UnitResource
+{
+};
+
 typedef Id UnitId;
 
 class Camera;
 
-class Unit
+struct Unit
 {
-public:
+	void			create(const Vec3& pos, const Quat& rot);
+	void			destroy();
 
-					Unit(SceneGraph& sg, const Vec3& pos, const Quat& rot);
+	void			load(UnitResource* ur);
+	void			unload();
+	void			reload(UnitResource* new_ur);
 
 	Vec3			local_position() const;
 	Quat			local_rotation() const;
@@ -57,14 +64,12 @@ public:
 	void			set_local_rotation(const Quat& rot);
 	void			set_local_pose(const Mat4& pose);
 
-private:
+public:
 
-	SceneGraph&		m_scene_graph;
+	SceneGraph		m_scene_graph;
 	NodeId			m_root_node;
 
-private:
-
-	friend class	World;
+	UnitResource*	m_resource;
 };
 
 } // namespace crown

+ 12 - 10
engine/World.cpp

@@ -40,7 +40,8 @@ UnitId World::spawn_unit(const char* /*name*/, const Vec3& pos, const Quat& rot)
 {
 	const UnitId unit = m_unit_table.create();
 
-	m_units[unit.index] = CE_NEW(m_allocator, Unit)(m_scene_graph, pos, rot);
+	m_units[unit.index].create(pos, rot);
+	// m_units[unit.index].load(ur);
 
 	return unit;
 }
@@ -58,20 +59,22 @@ void World::link_unit(UnitId child, UnitId parent)
 	CE_ASSERT(m_unit_table.has(child), "Child unit does not exist");
 	CE_ASSERT(m_unit_table.has(parent), "Parent unit does not exist");
 
-	Unit* child_unit = unit(child);
-	Unit* parent_unit = unit(parent);
+	Unit& child_unit = m_units[child.index];
+	Unit& parent_unit =  m_units[parent.index];
 
-	m_scene_graph.link(child_unit->m_root_node, parent_unit->m_root_node);
+	parent_unit.m_scene_graph.link(child_unit.m_root_node, parent_unit.m_root_node);
 }
 
 //-----------------------------------------------------------------------------
-void World::unlink_unit(UnitId child)
+void World::unlink_unit(UnitId child, UnitId parent)
 {
-	CE_ASSERT(m_unit_table.has(child), "Node does not exist");
+	CE_ASSERT(m_unit_table.has(child), "Child unit does not exist");
+	CE_ASSERT(m_unit_table.has(parent), "Parent unit does not exist");
 
-	Unit* child_unit = unit(child);
+	Unit& child_unit = m_units[child.index];
+	Unit& parent_unit =  m_units[parent.index];
 
-	m_scene_graph.unlink(child_unit->m_root_node);
+	parent_unit.m_scene_graph.unlink(child_unit.m_root_node);		
 }
 
 //-----------------------------------------------------------------------------
@@ -79,13 +82,12 @@ Unit* World::unit(UnitId unit)
 {
 	CE_ASSERT(m_unit_table.has(unit), "Unit does not exist");
 
-	return m_units[unit.index];
+	return &m_units[unit.index];
 }
 
 //-----------------------------------------------------------------------------
 void World::update(float /*dt*/)
 {
-	m_scene_graph.update();
 }
 
 } // namespace crown

+ 4 - 9
engine/World.h

@@ -34,8 +34,7 @@ OTHER DEALINGS IN THE SOFTWARE.
 namespace crown
 {
 
-#define MAX_CAMERAS 32
-#define MAX_UNITS 1024
+#define MAX_UNITS 65000
 
 class Vec3;
 class Quat;
@@ -50,7 +49,7 @@ public:
 	void			kill_unit(UnitId unit);
 
 	void			link_unit(UnitId child, UnitId parent);
-	void			unlink_unit(UnitId child);
+	void			unlink_unit(UnitId child, UnitId parent);
 
 	Unit*			unit(UnitId unit);
 
@@ -58,12 +57,8 @@ public:
 
 private:
 
-	HeapAllocator	m_allocator;
-
-	SceneGraph		m_scene_graph;
-
-	IdTable<MAX_UNITS> m_unit_table;
-	Unit*			m_units[MAX_UNITS];
+	IdTable<MAX_UNITS> 	m_unit_table;
+	Unit				m_units[MAX_UNITS];
 };
 
 } // namespace crown