Ver código fonte

Add World.camera_create()

Daniele Bartolini 9 anos atrás
pai
commit
c94cf771e2
3 arquivos alterados com 22 adições e 3 exclusões
  1. 19 0
      src/lua/lua_api.cpp
  2. 2 2
      src/world/world.cpp
  3. 1 1
      src/world/world.h

+ 19 - 0
src/lua/lua_api.cpp

@@ -1323,6 +1323,24 @@ static int world_camera(lua_State* L)
 	return 1;
 }
 
+static int camera_create(lua_State* L)
+{
+	LuaStack stack(L);
+	World* world = stack.get_world(1);
+	UnitId unit = stack.get_unit(2);
+
+	CameraDesc cd;
+	cd.type       = name_to_projection_type(stack.get_string(3));
+	cd.fov        = stack.get_float(4);
+	cd.near_range = stack.get_float(5);
+	cd.far_range  = stack.get_float(6);
+
+	Matrix4x4 pose = stack.get_matrix4x4(7);
+
+	stack.push_camera(world->camera_create(unit, cd, pose));
+	return 1;
+}
+
 static int camera_set_projection_type(lua_State* L)
 {
 	LuaStack stack(L);
@@ -3203,6 +3221,7 @@ void load_api(LuaEnvironment& env)
 	env.add_module_function("World", "num_units",                       world_num_units);
 	env.add_module_function("World", "units",                           world_units);
 	env.add_module_function("World", "camera",                          world_camera);
+	env.add_module_function("World", "camera_create",                   camera_create);
 	env.add_module_function("World", "camera_set_projection_type",      camera_set_projection_type);
 	env.add_module_function("World", "camera_projection_type",          camera_projection_type);
 	env.add_module_function("World", "camera_fov",                      camera_fov);

+ 2 - 2
src/world/world.cpp

@@ -198,7 +198,7 @@ void World::render(const Matrix4x4& view, const Matrix4x4& projection)
 	_lines->reset();
 }
 
-CameraInstance World::camera_create(UnitId id, const CameraDesc& cd)
+CameraInstance World::camera_create(UnitId id, const CameraDesc& cd, const Matrix4x4& /*tr*/)
 {
 	Camera camera;
 	camera.unit            = id;
@@ -546,7 +546,7 @@ void spawn_units(World& w, const UnitResource& ur, const Vector3& pos, const Qua
 			const CameraDesc* cd = (const CameraDesc*)data;
 			for (u32 i = 0; i < component->num_instances; ++i, ++cd)
 			{
-				w.camera_create(unit_lookup[unit_index[i]], *cd);
+				w.camera_create(unit_lookup[unit_index[i]], *cd, MATRIX4X4_IDENTITY);
 			}
 		}
 		else if (component->type == COMPONENT_TYPE_COLLIDER)

+ 1 - 1
src/world/world.h

@@ -92,7 +92,7 @@ public:
 	void units(Array<UnitId>& units) const;
 
 	/// Creates a new camera.
-	CameraInstance camera_create(UnitId id, const CameraDesc& cd);
+	CameraInstance camera_create(UnitId id, const CameraDesc& cd, const Matrix4x4& tr);
 
 	/// Destroys the camera @a id.
 	void camera_destroy(CameraInstance i);