first commit
This commit is contained in:
145
include/engine/project/project.h
Normal file
145
include/engine/project/project.h
Normal file
@ -0,0 +1,145 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
GSFramework
|
||||
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
||||
----------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#ifndef __NPROJECT__
|
||||
#define __NPROJECT__
|
||||
|
||||
|
||||
#include "project/project_factory_interface.h"
|
||||
#include "project/project_scene_instance.h"
|
||||
#include "project/project_script_unit.h"
|
||||
#include "project/project_layer.h"
|
||||
#include "core/resource_factories.h"
|
||||
#include "core/raster_font.h"
|
||||
#include "core/clock.h"
|
||||
#include "script/script_unit.h"
|
||||
#include "script/script_vm.h"
|
||||
#include "font/font_factory.h"
|
||||
#include "font/font_cache.h"
|
||||
|
||||
|
||||
namespace GS {
|
||||
|
||||
namespace Audio { struct IMixer; }
|
||||
namespace Render { class Renderer; }
|
||||
|
||||
namespace Core {
|
||||
using Audio::IMixer;
|
||||
using Render::Renderer;
|
||||
|
||||
//
|
||||
class Project
|
||||
{
|
||||
protected:
|
||||
|
||||
sResourceFactories factories;
|
||||
|
||||
AutoList <ProjectSceneInstance *> instance_list;
|
||||
|
||||
bool prohibit_project_action; ///< Disable all instance creation and layer stack modifications.
|
||||
|
||||
/// Check whether project action are allowed.
|
||||
bool IsProjectActionAllowed(const char *f);
|
||||
|
||||
public:
|
||||
|
||||
String file_path;
|
||||
String name, authors, description, company;
|
||||
|
||||
Script::sVM vm;
|
||||
|
||||
sClock clock;
|
||||
sFontCache font_cache;
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
/// @short Render flags.
|
||||
enum RenderFlag
|
||||
{
|
||||
FlagNone = 0,
|
||||
FlagDisableScript = (1 << 0),
|
||||
|
||||
FlagDefault = FlagNone
|
||||
};
|
||||
|
||||
enum ProjectFlag
|
||||
{
|
||||
ProjectFlagNone = 0,
|
||||
ProjectFlagEnd = (1 << 0),
|
||||
ProjectFlagDebugPhysics = (1 << 1)
|
||||
};
|
||||
|
||||
BitField flags;
|
||||
|
||||
AutoList <ProjectLayer *> layer_list;
|
||||
|
||||
void Update(uint scene_update_flag);
|
||||
void Render(Renderer &, RenderFlag = FlagDefault);
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
/// Draw profiler.
|
||||
void DrawProfilerText(Renderer &, Render::RasterFont *font[2], float &x, float &y);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
StringList root_script_list, search_path;
|
||||
|
||||
bool CompileRootScripts();
|
||||
|
||||
AutoPtr <ProjectScriptUnit> script_unit;
|
||||
|
||||
void UpdateScriptClock();
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
AutoPtr <IProjectFactory> iproject_factory;
|
||||
|
||||
ProjectSceneInstance *FindSceneInstance(const char *) const;
|
||||
ProjectSceneInstance *FindSceneInstance(const S3D::Scene *) const;
|
||||
ProjectSceneInstance *FindSceneInstance(const S2D::Scene *) const;
|
||||
|
||||
ProjectSceneInstance *Instantiate(const char *name);
|
||||
ProjectSceneInstance *Instantiate(S3D::Scene *);
|
||||
ProjectSceneInstance *Instantiate(S2D::Scene *);
|
||||
|
||||
void Delete(ProjectSceneInstance *scene);
|
||||
|
||||
/// Create a layer for a given project scene.
|
||||
ProjectLayer *AddLayer(ProjectSceneInstance *, float zorder = 0.5);
|
||||
|
||||
bool IsActive(const ProjectSceneInstance &inst) const { return inst.active; }
|
||||
void Activate(ProjectSceneInstance &, bool activate);
|
||||
|
||||
/// Return the number of instantiated layer in the display stack.
|
||||
uint GetInstanceCount() const { return instance_list.GetCount(); }
|
||||
/// Get scene instance list.
|
||||
const AutoList <ProjectSceneInstance *> &GetInstanceList() const { return instance_list; }
|
||||
/// Return the number of active layer in the display stack.
|
||||
uint GetActiveCount() const;
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void ResetStatistics();
|
||||
|
||||
void New();
|
||||
|
||||
bool Open(bool project_mode = true);
|
||||
bool Setup();
|
||||
void Close();
|
||||
|
||||
bool FromMetaTag(NML::Tag &);
|
||||
NML::Tag *AsMetaTag() const;
|
||||
|
||||
Project(ResourceFactories *, IFontFactory *, Script::IVM * = 0);
|
||||
virtual ~Project();
|
||||
};
|
||||
|
||||
} // Core
|
||||
} // GS
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
#define __PROJECT_ACTION_SAFETY_CHECK(__RET__) { if (!IsProjectActionAllowed(__FUNCTION__)) return __RET__; }
|
||||
#define __PROJECT_ACTION_SAFETY_CHECK_RAW { if (!IsProjectActionAllowed(__FUNCTION__)) return; }
|
||||
|
||||
|
||||
#endif // __NPROJECT__
|
||||
Reference in New Issue
Block a user