104 lines
3.3 KiB
C++
104 lines
3.3 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#include "script_squirrel/cobject/cobject.h"
|
|
#include "script_squirrel/engine_vm.h"
|
|
#include "raytracer/raytracer_core.h"
|
|
#include "automation/automation_source_group.h"
|
|
#include "scene3d/scene.h"
|
|
#include "scene3d/group.h"
|
|
#include "scene3d/memitter.h"
|
|
#include "scene3d/mcamera.h"
|
|
#include "scene3d/mobject.h"
|
|
#include "scene3d/mtrigger.h"
|
|
#include "scene3d/mlight.h"
|
|
#include "scene3d/instance.h"
|
|
#include "ui/ui_cursor.h"
|
|
#include "core/raster_font.h"
|
|
#include "input/input_device.h"
|
|
|
|
using namespace GS;
|
|
using namespace GS::Script;
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
void CObject::Initialize(CObjectType t, void *o, bool m)
|
|
{
|
|
Release();
|
|
|
|
type = t;
|
|
native = o;
|
|
managed = m;
|
|
|
|
if (native)
|
|
switch (type)
|
|
{
|
|
case typetag_Picture: ((Picture *)native)->AddRef(); break;
|
|
case typetag_Texture: ((Render::Texture *)native)->AddRef(); break;
|
|
case typetag_Geometry: ((Render::Geometry *)native)->AddRef(); break;
|
|
case typetag_Material: ((Render::Material *)native)->AddRef(); break;
|
|
case typetag_InputDevice: ((Input::Device *)native)->AddRef(); break;
|
|
case typetag_AutomationSource: ((Automation::Source *)native)->AddRef(); break;
|
|
|
|
default: break;
|
|
}
|
|
}
|
|
void CObject::Release()
|
|
{
|
|
if (native == NULL)
|
|
return;
|
|
|
|
switch (type)
|
|
{
|
|
case typetag_Picture: ((Picture *)native)->RemoveRef(); break;
|
|
case typetag_Texture: ((Render::Texture *)native)->RemoveRef(); break;
|
|
case typetag_Geometry: ((Render::Geometry *)native)->RemoveRef(); break;
|
|
case typetag_Material: ((Render::Material *)native)->RemoveRef(); break;
|
|
case typetag_InputDevice: ((Input::Device *)native)->RemoveRef(); break;
|
|
case typetag_AutomationSource: ((Automation::Source *)native)->RemoveRef(); break;
|
|
|
|
default: break;
|
|
}
|
|
|
|
if (managed)
|
|
switch (type)
|
|
{
|
|
case typetag_Metafile: delete ((NML::File *)native); break;
|
|
case typetag_Raytracer: delete ((Raytrace::Raytracer *)native); break;
|
|
case typetag_RasterFont: delete ((Render::RasterFont *)native); break;
|
|
case typetag_AutomationSourceGroup: delete ((Automation::SourceGroup *)native); break;
|
|
case typetag_Group: delete ((S3D::Group *)native); break;
|
|
case typetag_Scene3d: delete ((S3D::Scene *)native); break;
|
|
case typetag_UICursor: delete ((S2D::Cursor *)native); break;
|
|
|
|
default:
|
|
__LOG_E__ << "Type " << CObjectTypeToString(type) << " should not be managed by the VM.\n";
|
|
break;
|
|
}
|
|
|
|
native = NULL;
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
|
|
//------------------------------------------------------------------------------
|
|
CObject::CObject(EngineVM *v, CObjectType t, void *o, bool managed) : vm(v)
|
|
{
|
|
list_item = vm->cobjects.Add(this);
|
|
|
|
native = NULL;
|
|
Initialize(t, o, managed);
|
|
}
|
|
CObject::~CObject()
|
|
{
|
|
if (list_item)
|
|
{
|
|
vm->cobjects.Remove(list_item);
|
|
// g_flog << "Native object alive count: " << vm->cobjects.GetCount() << "\n";
|
|
}
|
|
Release();
|
|
}
|
|
//------------------------------------------------------------------------------
|