mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 09:15:29 +01:00 
			
		
		
		
	ObjDefManager: Set replacement object's handle info after calling set()
Make gamedef optional when constructing an ObjDefManager Add note about object ownership
This commit is contained in:
		@@ -434,7 +434,7 @@ void GenerateNotifier::getEvents(
 | 
			
		||||
ObjDefManager::ObjDefManager(IGameDef *gamedef, ObjDefType type)
 | 
			
		||||
{
 | 
			
		||||
	m_objtype = type;
 | 
			
		||||
	m_ndef = gamedef->getNodeDefManager();
 | 
			
		||||
	m_ndef = gamedef ? gamedef->getNodeDefManager() : NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -471,7 +471,16 @@ ObjDef *ObjDefManager::get(ObjDefHandle handle) const
 | 
			
		||||
ObjDef *ObjDefManager::set(ObjDefHandle handle, ObjDef *obj)
 | 
			
		||||
{
 | 
			
		||||
	u32 index = validateHandle(handle);
 | 
			
		||||
	return (index != OBJDEF_INVALID_INDEX) ? setRaw(index, obj) : NULL;
 | 
			
		||||
	if (index == OBJDEF_INVALID_INDEX)
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	ObjDef *oldobj = setRaw(index, obj);
 | 
			
		||||
 | 
			
		||||
	obj->uid    = oldobj->uid;
 | 
			
		||||
	obj->index  = oldobj->index;
 | 
			
		||||
	obj->handle = oldobj->handle;
 | 
			
		||||
 | 
			
		||||
	return oldobj;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -206,12 +206,15 @@ public:
 | 
			
		||||
	std::string name;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// WARNING: Ownership of ObjDefs is transferred to the ObjDefManager it is
 | 
			
		||||
// added/set to.  Note that ObjDefs managed by ObjDefManager are NOT refcounted,
 | 
			
		||||
// so the same ObjDef instance must not be referenced multiple
 | 
			
		||||
class ObjDefManager {
 | 
			
		||||
public:
 | 
			
		||||
	ObjDefManager(IGameDef *gamedef, ObjDefType type);
 | 
			
		||||
	virtual ~ObjDefManager();
 | 
			
		||||
 | 
			
		||||
	virtual const char *getObjectTitle() const = 0;
 | 
			
		||||
	virtual const char *getObjectTitle() const { return "ObjDef"; }
 | 
			
		||||
 | 
			
		||||
	virtual void clear();
 | 
			
		||||
	virtual ObjDef *getByName(const std::string &name) const;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user