Skip to content
Snippets Groups Projects
Commit 5b237b4d authored by kwolekr's avatar kwolekr
Browse files

ObjDefManager: Set replacement object's handle info after calling set()

Make gamedef optional when constructing an ObjDefManager
Add note about object ownership
parent 5704fb36
No related branches found
No related tags found
No related merge requests found
......@@ -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 @@ class ObjDef {
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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment