[ create a new paste ] login | about

Link: http://codepad.org/RgfDjFKE    [ raw code | fork ]

Plain Text, pasted on Jul 10:
diff --git a/src/activeobject.h b/src/activeobject.h
index a9838e748..ca0aa3c46 100644
--- a/src/activeobject.h
+++ b/src/activeobject.h
@@ -128,6 +128,7 @@ class ActiveObject
 	virtual void clearParentAttachment() {}
 	virtual void addAttachmentChild(int child_id) {}
 	virtual void removeAttachmentChild(int child_id) {}
+	virtual void attachCamera(int cam_id) {}
 protected:
 	u16 m_id; // 0 is invalid, "no id"
 };
diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp
index e7639e5c1..261d5b17e 100644
--- a/src/client/content_cao.cpp
+++ b/src/client/content_cao.cpp
@@ -550,12 +550,11 @@ void GenericCAO::removeAttachmentChild(int child_id)
 	m_attachment_child_ids.erase(child_id);
 }
 
-void GenericCAO::attachCamera(int parent_id)
+void GenericCAO::attachCamera(int cam_id)
 {
-	
+	std::cout << "GenericCAO::attachCamera (ID): " << cam_id << std::endl;
 }
 
-
 ClientActiveObject* GenericCAO::getParent() const
 {
 	return m_attachment_parent_id ? m_env->getActiveObject(m_attachment_parent_id) :
@@ -1902,9 +1901,8 @@ void GenericCAO::processMessage(const std::string &data)
 
 		addAttachmentChild(child_id);
 	} else if (cmd == AO_CMD_ATTACH_CAMERA) {
-		u16 parent_id = readS16(is);
-
-		attachCamera(parent_id);
+		u16 cam_id = readS16(is);
+		attachCamera(cam_id);
 
 	} else if (cmd == AO_CMD_OBSOLETE1) {
 		// Don't do anything and also don't log a warning
diff --git a/src/client/content_cao.h b/src/client/content_cao.h
index d0a046d88..377817105 100644
--- a/src/client/content_cao.h
+++ b/src/client/content_cao.h
@@ -227,7 +227,7 @@ class GenericCAO : public ClientActiveObject
 	const std::unordered_set<int> &getAttachmentChildIds() const
 	{ return m_attachment_child_ids; }
 	void updateAttachments();
-	void attachCamera(int parent_id);
+	void attachCamera(int cam_id);
 
 	void removeFromScene(bool permanent);
 
diff --git a/src/script/lua_api/l_camera_server.h b/src/script/lua_api/l_camera_server.h
index 85c08b93e..aeb592cf1 100644
--- a/src/script/lua_api/l_camera_server.h
+++ b/src/script/lua_api/l_camera_server.h
@@ -78,6 +78,8 @@ class LuaCamera
 		const v3f &pos, const v3f &rot);
 
 	~LuaCamera();
+
+	int getId() const { return m_cam->getID(); };
 	
 	void setPosition(v3f &pos);
 	v3f getPosition() const { return m_cam->getPosition(); };
diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp
index 9c97d08e6..8492606ca 100644
--- a/src/script/lua_api/l_object.cpp
+++ b/src/script/lua_api/l_object.cpp
@@ -2341,41 +2341,19 @@ int ObjectRef::l_respawn(lua_State *L)
 	return 1;
 }
 
-// respawn(self)
+// attach_camera(self, cam)
 int ObjectRef::l_attach_camera(lua_State *L)
 {
-	//NO_MAP_LOCK_REQUIRED;
 	GET_ENV_PTR;
-
 	ObjectRef *ref = checkobject(L, 1);
-	RemotePlayer *player = getplayer(ref);
-	if (player == nullptr)
-		return 0;
-/*
-	void *ud = luaL_checkudata(L, 2, "ModApiCamera");
-	if (!ud)
-		luaL_typerror(L, 2, "ModApiCamera");
-
-	LuaCamera *cam = ModApiCamera::getobject(*(ModApiCamera **)ud);
 	ServerActiveObject *sao = getobject(ref);
+	int id = readParam<int>(L, 2);
 
-	
-	ServerActiveObject *old_parent = env->getActiveObject(parent_id);
-	old_parent->removeAttachmentChild(sao->getId());
-	
-
-	session_t peer_id = player->getPeerId();
-	//ClientActiveObject *cao = env.getActiveObject(peer_id);
-	GenericCAO *cao = static_cast<GenericCAO *>(
-		dynamic_cast<ClientEnvironment *>(env)->getActiveObject(peer_id));
-
-	//GenericCAO *playercao = getClient(L)->getEnv().getLocalPlayer()->getCAO();
-
-	scene::ISceneNode *node = cao->getSceneNode();
-	cam->getCamera()->setParent(node);*/
+	if (!sao)
+		return 0;
 
-	lua_pushboolean(L, true);
-	return 1;
+	sao->attachCamera(id);
+	return 0;
 }
 
 
diff --git a/src/server/unit_sao.cpp b/src/server/unit_sao.cpp
index 9a49b0f43..e1407a1f5 100644
--- a/src/server/unit_sao.cpp
+++ b/src/server/unit_sao.cpp
@@ -177,6 +177,11 @@ void UnitSAO::getAttachment(int *parent_id, std::string *bone, v3f *position,
 	*force_visible = m_force_visible;
 }
 
+void UnitSAO::attachCamera(int cam_id)
+{
+	std::cout << "UnitSAO::attachCamera" << std::endl;
+}
+
 void UnitSAO::clearChildAttachments()
 {
 	for (int child_id : m_attachment_child_ids) {
diff --git a/src/server/unit_sao.h b/src/server/unit_sao.h
index a21e055c5..a4388ec6a 100644
--- a/src/server/unit_sao.h
+++ b/src/server/unit_sao.h
@@ -72,6 +72,7 @@ class UnitSAO : public ServerActiveObject
 	void addAttachmentChild(int child_id);
 	void removeAttachmentChild(int child_id);
 	const std::unordered_set<int> &getAttachmentChildIds() const;
+	void attachCamera(int cam_id);
 
 	// Object properties
 	ObjectProperties *accessObjectProperties();



Create a new paste based on this one


Comments: