commit x64 compilation from lulu cause the other branch dont seems to compile properly at home
This commit is contained in:
121
include/engine/project/project_runtime.cpp
Normal file
121
include/engine/project/project_runtime.cpp
Normal file
@ -0,0 +1,121 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
GSFramework
|
||||
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
||||
----------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#include "project/project.h"
|
||||
#include "scene3d/scene.h"
|
||||
#include "ui/ui.h"
|
||||
#include "core/renderer.h"
|
||||
#include "script/script_engine_types.h"
|
||||
#include "script/script_variant.h"
|
||||
|
||||
using namespace GS::Core;
|
||||
using namespace GS::Script;
|
||||
|
||||
|
||||
static float CompareLayerZOrder(const ProjectLayer *c, const ProjectLayer *n) { return c->zorder - n->zorder; }
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void Project::Render(Renderer &renderer, RenderFlag render_flag)
|
||||
{
|
||||
__PROJECT_ACTION_SAFETY_CHECK_RAW
|
||||
|
||||
bool send_events = render_flag & FlagDisableScript ? false : true;
|
||||
|
||||
// Sort the layer list.
|
||||
layer_list.Sort(CompareLayerZOrder);
|
||||
|
||||
// OnRender callback.
|
||||
if (script_unit->SetupFunctionCall("OnRender"))
|
||||
script_unit->DoFunctionCall();
|
||||
|
||||
// Render the layer display list.
|
||||
int active_layer = 0;
|
||||
|
||||
ListForeachPtr(ProjectLayer *, layer, layer_list)
|
||||
if (layer->inst && IsActive(*layer->inst))
|
||||
{
|
||||
// OnRenderScene callback.
|
||||
if (send_events && script_unit->SetupFunctionCall("OnRenderScene"))
|
||||
{
|
||||
switch (layer->inst->GetType())
|
||||
{
|
||||
case ProjectSceneInstance::Type_Scene2d:
|
||||
script_unit->PushFunctionCallArgument(Script::Variant(layer->inst->instance, typetag_Scene2d));
|
||||
break;
|
||||
|
||||
case ProjectSceneInstance::Type_Scene3d:
|
||||
script_unit->PushFunctionCallArgument(Script::Variant(layer->inst->instance, typetag_Scene3d));
|
||||
break;
|
||||
}
|
||||
script_unit->PushFunctionCallArgument(Script::Variant(layer, typetag_ProjectLayer));
|
||||
script_unit->DoFunctionCall();
|
||||
}
|
||||
|
||||
// Specialized rendering.
|
||||
prohibit_project_action = true;
|
||||
|
||||
switch (layer->inst->GetType())
|
||||
{
|
||||
case ProjectSceneInstance::Type_Scene2d:
|
||||
{
|
||||
GS::S2D::Scene *scene = layer->inst->instance_2d;
|
||||
|
||||
if (active_layer == 0)
|
||||
renderer.Clear(0, 0, 0);
|
||||
scene->Render(renderer);
|
||||
}
|
||||
break;
|
||||
|
||||
case ProjectSceneInstance::Type_Scene3d:
|
||||
{
|
||||
GS::S3D::Scene *scene = layer->inst->instance_3d;
|
||||
|
||||
scene->flags.Raise(S3D::Scene::FlagDebugPhysics, flags.IsSet(ProjectFlagDebugPhysics)); // synchronize scene flag with project one
|
||||
scene->Render(renderer);
|
||||
scene->RenderUI(renderer);
|
||||
}
|
||||
break;
|
||||
}
|
||||
prohibit_project_action = false;
|
||||
|
||||
++active_layer;
|
||||
}
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void Project::Update(uint eval_flag)
|
||||
{
|
||||
__PROJECT_ACTION_SAFETY_CHECK_RAW
|
||||
|
||||
// OnUpdate callback.
|
||||
if (script_unit->SetupFunctionCall("OnUpdate", script_unit->update_callback))
|
||||
script_unit->DoFunctionCall();
|
||||
|
||||
// Evaluate all instantiated scenes.
|
||||
prohibit_project_action = true;
|
||||
|
||||
ListForeachPtr(ProjectSceneInstance *, inst, instance_list)
|
||||
if (IsActive(*inst))
|
||||
switch (inst->GetType())
|
||||
{
|
||||
case ProjectSceneInstance::Type_Scene2d:
|
||||
if (inst->instance_2d)
|
||||
inst->instance_2d->Update();
|
||||
break;
|
||||
|
||||
case ProjectSceneInstance::Type_Scene3d:
|
||||
if (inst->instance_3d)
|
||||
{
|
||||
inst->instance_3d->SetAsScriptGlobalScene();
|
||||
inst->instance_3d->Update(eval_flag);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
prohibit_project_action = false;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user