commit x64 compilation from lulu cause the other branch dont seems to compile properly at home

This commit is contained in:
2026-07-17 16:08:20 +02:00
parent c0f3eeb00d
commit 0efa4ee6f7
625 changed files with 117283 additions and 4426 deletions

View File

@ -0,0 +1,493 @@
/* -----------------------------------------------------------------------------
GSFramework
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */
#include "script_squirrel/legacy/binding_helpers.h"
#include "project/project.h"
#include "scene3d/scene.h"
#include "ui/ui_camera.h"
#include "ui/ui.h"
using namespace GS;
using namespace GS::Core;
using namespace GS::Script;
//------------------------------------------------------------------------------
SQInteger ProjectGetClock(HSQUIRRELVM vm)
{
__SQ_GETSINGLESAFEPTR(project, Project, typetag_Project)
__SQ_RETURNSAFEPTR(project->clock.c_ptr(), typetag_Clock)
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
SQInteger ProjectSetAll2DLayerOffset(HSQUIRRELVM vm)
{
__SQ_GETSTART(3)
__SQ_GETSAFEPTR(project, Project, typetag_Project)
__SQ_GETFLOAT(x)
__SQ_GETFLOAT(y)
__SQ_GETEND
ListForeachPtr(ProjectLayer *, layer, project->layer_list)
if (layer->inst)
if (S2D::Scene *scene = layer->inst->instance_2d)
{
scene->offset_matrix = Matrix3::IdentityMatrix();
scene->offset_matrix.m[0][2] = x / scene->GetCurrentCamera()->resolution.x;
scene->offset_matrix.m[1][2] = y / scene->GetCurrentCamera()->resolution.y;
}
__SQ_RETURN
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
SQInteger ProjectLayerGetScene(HSQUIRRELVM vm)
{
__SQ_GETSINGLESAFEPTR(layer, ProjectLayer, typetag_ProjectLayer)
if (!layer->inst)
return sq_throwerror(vm, "No scene in project layer");
__SQ_RETURNSAFEPTR(layer->inst, typetag_ProjectScene)
}
SQInteger ProjectLayerSetZOrder(HSQUIRRELVM vm)
{
__SQ_GETSTART(2)
__SQ_GETSAFEPTR(layer, ProjectLayer, typetag_ProjectLayer)
__SQ_GETFLOAT(zorder)
__SQ_GETEND
layer->zorder = zorder;
__SQ_RETURN
}
SQInteger ProjectLayerGetZOrder(HSQUIRRELVM vm)
{
__SQ_GETSINGLESAFEPTR(layer, ProjectLayer, typetag_ProjectLayer)
__SQ_RETURNFLOAT(layer->zorder)
}
SQInteger ProjectAddLayer(HSQUIRRELVM vm)
{
__SQ_GETSTART(3)
__SQ_GETSAFEPTR(project, Project, typetag_Project)
__SQ_GETSAFEPTR(instance, ProjectSceneInstance, typetag_ProjectScene)
__SQ_GETFLOAT(zorder)
__SQ_GETEND
__SQ_RETURNSAFEPTR(project->AddLayer(instance, zorder), typetag_ProjectLayer)
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
SQInteger ProjectNewScene3D(HSQUIRRELVM vm)
{
__SQ_GETSINGLESAFEPTR(project, Project, typetag_Project)
__SQ_RETURNMANAGEDSAFEPTR(project->Instantiate(new S3D::Scene(project->vm)), typetag_ProjectScene)
}
SQInteger ProjectNewScene2D(HSQUIRRELVM vm)
{
__SQ_GETSINGLESAFEPTR(project, Project, typetag_Project)
__SQ_RETURNMANAGEDSAFEPTR(project->Instantiate(new S2D::Scene(project->vm)), typetag_ProjectScene)
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
SQInteger ProjectGetSceneLayerList(HSQUIRRELVM vm)
{
__SQ_GETSTART(2)
__SQ_GETSAFEPTR(project, Project, typetag_Project)
__SQ_GETSAFEPTR(scene, ProjectSceneInstance, typetag_ProjectScene)
__SQ_GETEND
sq_newarray(vm, 0);
for (uint n = 0; n < project->layer_list.GetCount(); ++n)
{
ProjectLayer *layer = project->layer_list[n];
if (layer->inst == scene)
{
CObject::Push(vm, (void *)layer, typetag_ProjectLayer);
sq_arrayappend(vm, -2);
}
}
return 1;
}
SQInteger ProjectInstantiateScene(HSQUIRRELVM vm)
{
__SQ_GETSTART(2)
__SQ_GETSAFEPTR(project, Project, typetag_Project)
__SQ_GETSTRING(path)
sq_collectgarbage(vm);
ProjectSceneInstance *project_scene = project->Instantiate(path);
__SQ_GETEND
__SQ_RETURNSAFEPTR(project_scene, typetag_ProjectScene)
}
SQInteger ProjectSceneIsActive(HSQUIRRELVM vm)
{
__SQ_GETSTART(2)
__SQ_GETSAFEPTR(project, Project, typetag_Project)
__SQ_GETSAFEPTR(scene, ProjectSceneInstance, typetag_ProjectScene)
__SQ_GETEND
__SQ_RETURNBOOL(project && scene ? project->IsActive(*scene) : false)
}
SQInteger ProjectSceneActivate(HSQUIRRELVM vm)
{
__SQ_GETSTART(3)
__SQ_GETSAFEPTR(project, Project, typetag_Project)
__SQ_GETSAFEPTR(scene, ProjectSceneInstance, typetag_ProjectScene)
__SQ_GETBOOL(active)
__SQ_GETEND
project->Activate(*scene, active ? true : false);
__SQ_RETURN
}
SQInteger ProjectUnloadScene(HSQUIRRELVM vm)
{
__SQ_GETSTART(2)
__SQ_GETSAFEPTR(project, Project, typetag_Project)
__SQ_GETSAFEPTR(scene, ProjectSceneInstance, typetag_ProjectScene)
__SQ_GETEND
project->Delete(scene);
__SQ_RETURN
}
SQInteger ProjectFindScene(HSQUIRRELVM vm)
{
__SQ_GETSTART(2)
__SQ_GETSAFEPTR(project, Project, typetag_Project)
__SQ_GETSTRING(path)
ProjectSceneInstance *inst = project->FindSceneInstance(path);
__SQ_GETEND
__SQ_RETURNSAFEPTR(inst, typetag_ProjectScene)
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
SQInteger ProjectSceneGetType(HSQUIRRELVM vm)
{
__SQ_GETSINGLESAFEPTR(scene, ProjectSceneInstance, typetag_ProjectScene)
__SQ_RETURNINT(scene->GetType())
}
SQInteger ProjectSceneGetInstance(HSQUIRRELVM vm)
{
__SQ_GETSINGLESAFEPTR(scene, ProjectSceneInstance, typetag_ProjectScene)
switch (scene->GetType())
{
case ProjectSceneInstance::Type_Scene2d:
__SQ_RETURNSAFEPTR(scene->instance_2d, typetag_Scene2d)
case ProjectSceneInstance::Type_Scene3d:
__SQ_RETURNSAFEPTR(scene->instance_3d, typetag_Scene3d)
default: break;
}
return sq_throwerror(vm, "Invalid project scene");
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
SQInteger ProjectGetFileName(HSQUIRRELVM vm)
{
__SQ_GETSINGLESAFEPTR(project, Project, typetag_Project)
__SQ_RETURNSTRING(project->name.CutFilePath().toUtf8())
}
SQInteger ProjectGetFilePath(HSQUIRRELVM vm)
{
__SQ_GETSINGLESAFEPTR(project, Project, typetag_Project)
__SQ_RETURNSTRING(project->name.CutFileName().toUtf8())
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
SQInteger ProjectSceneSetGlobal(HSQUIRRELVM vm)
{
__SQ_GETSINGLESAFEPTR(scene, ProjectSceneInstance, typetag_ProjectScene)
if (scene && (scene->GetType() == ProjectSceneInstance::Type_Scene3d))
scene->instance_3d->SetAsScriptGlobalScene();
__SQ_RETURN
}
SQInteger ProjectGetScriptInstance(HSQUIRRELVM vm)
{
__SQ_GETSINGLESAFEPTR(project, Project, typetag_Project)
if (!project)
return sq_suspendvm(vm);
if (!project->script_unit->Self())
return sq_throwerror(vm, "No script assigned to this project.");
__SQ_RETURNOBJECT(((Script::SquirrelObject *)project->script_unit->Self())->object);
}
SQInteger ProjectEnd(HSQUIRRELVM vm)
{
__SQ_GETSINGLESAFEPTR(project, Project, typetag_Project)
if (project)
project->flags.Set(Project::ProjectFlagEnd);
// exit(0);
__SQ_RETURN
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
SQInteger ProjectLoadFont(HSQUIRRELVM vm)
{
__SQ_GETSTART(2)
__SQ_GETSAFEPTR(project, Project, typetag_Project)
__SQ_GETSTRING(path)
FontEx *font = project->font_cache->LoadFont(path);
if (!font)
return sq_throwerror(vm, String::Format("Failed to load font '%s'.", path));
__SQ_GETEND
__SQ_RETURNSAFEPTR(font, typetag_Font)
}
SQInteger ProjectLoadFontAliased(HSQUIRRELVM vm)
{
__SQ_GETSTART(3)
__SQ_GETSAFEPTR(project, Project, typetag_Project)
__SQ_GETSTRING(path)
__SQ_GETSTRING(alias)
FontEx *font = project->font_cache->LoadFont(path, alias);
if (!font)
return sq_throwerror(vm, String::Format("Failed to load font '%s' under alias '%s'.", path, alias));
__SQ_GETEND
__SQ_RETURNSAFEPTR(font, typetag_Font)
}
SQInteger ProjectDeleteFontAlias(HSQUIRRELVM vm)
{
__SQ_GETSTART(2)
__SQ_GETSAFEPTR(project, Project, typetag_Project)
__SQ_GETSTRING(alias)
project->font_cache->DeleteAlias(alias);
__SQ_GETEND
__SQ_RETURN
}
SQInteger ProjectGetFont(HSQUIRRELVM vm)
{
__SQ_GETSTART(2)
__SQ_GETSAFEPTR(project, Project, typetag_Project)
__SQ_GETSTRING(path)
FontEx *font = project->font_cache->GetAliasedFont(path);
if (!font)
return sq_throwerror(vm, String::Format("Font '%s' not found.", path));
__SQ_GETEND
__SQ_RETURNSAFEPTR(font, typetag_Font)
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void RegisterProjectBinding(HSQUIRRELVM vm)
{
/*#
Topic: Project
Type: Project
Type: ProjectLayer
#*/
/*#
Section: ProjectGeneral
Desc: General project functions
#*/
/*#
Func: ProjectGetClock
Proto: Clock:Project
Desc: Get the project clock object.
#*/
sq_register(vm, ProjectGetClock, "ProjectGetClock", _SC(".x"));
/*#
Func: ProjectGetScriptInstance
Proto: Instance:Project
Desc: Get the project script instance.
#*/
sq_register(vm, ProjectGetScriptInstance, "ProjectGetScriptInstance", _SC(".x"));
/*#
Func: ProjectEnd
Proto: void:Project
Desc: Exit project.
#*/
sq_register(vm, ProjectEnd, "ProjectEnd", _SC(".x"));
/*#
Section: ProjectFontManagement
Desc: UI Font management functions
#*/
/*#
Func: ProjectLoadFont
Proto: Font:Project, string path
Desc: Load a TrueType font in the project font cache.
#*/
sq_register(vm, ProjectLoadFont, "ProjectLoadFont", _SC(".xs"));
sq_register(vm, ProjectLoadFont, "ProjectLoadUIFont", _SC(".xs"));
/*#
Func: ProjectLoadFontAliased
Proto: Font:Project, string path, string alias
Desc: Load a TrueType font under a specific alias.
#*/
sq_register(vm, ProjectLoadFontAliased, "ProjectLoadFontAliased", _SC(".xss"));
sq_register(vm, ProjectLoadFontAliased, "ProjectLoadUIFontAliased", _SC(".xss"));
/*#
Func: ProjectDeleteFontAlias
Proto: void:Project, string alias
Desc: Delete a font alias from the font cache.
#*/
sq_register(vm, ProjectDeleteFontAlias, "ProjectDeleteFontAlias", _SC(".xs"));
sq_register(vm, ProjectDeleteFontAlias, "ProjectDeleteUIFontAlias", _SC(".xs"));
/*#
Func: ProjectGetFont
Proto: Font:Project, string name
Desc: Retrieve a font from its name.
#*/
sq_register(vm, ProjectGetFont, "ProjectGetFont", _SC(".xs"));
sq_register(vm, ProjectGetFont, "ProjectGetUIFont", _SC(".xs"));
/*#
Section: ProjectLayerManagement
Desc: Layer management functions
#*/
/*#
Func: ProjectLayerGetScene
Proto: ProjectScene:ProjectLayer
Desc: Return the scene instance a layer is displaying.
#*/
sq_register(vm, ProjectLayerGetScene, "ProjectLayerGetScene", _SC(".x"));
/*#
Func: ProjectAddLayer
Proto: ProjectLayer:Project,ProjectScene,float zorder
Desc: Create a new layer to display a project scene.
Note: A scene can be added to several layers at once.
#*/
sq_register(vm, ProjectAddLayer, "ProjectAddLayer", _SC(".xxn"));
/*#
Func: ProjectLayerSetZOrder
Proto: void:ProjectLayer,float
Desc: Set layer Z order.
Note: Smaller Z values are closer to the viewer.
#*/
sq_register(vm, ProjectLayerSetZOrder, "ProjectLayerSetZOrder", _SC(".xn"));
/*#
Func: ProjectLayerGetZOrder
Proto: float:ProjectLayer
Desc: Get layer Z order.
#*/
sq_register(vm, ProjectLayerGetZOrder, "ProjectLayerGetZOrder", _SC(".x"));
/*#
Func: ProjectSetAll2DLayerOffset
Proto: void:Project,float x,float y
Desc: Set the offset of all 2d layer in the current project stack. The offset is specified in the layer reference resolution.
#*/
sq_register(vm, ProjectSetAll2DLayerOffset, "ProjectSetAll2DLayerOffset", _SC(".xnn"));
/*#
Section: ProjectSceneManagement
Desc: Scene management functions
#*/
/*#
Func: ProjectNewScene3D
Proto: ProjectScene:Project
Desc: Create a new scene 3D.
Note: You need to add the newly created scene to a project layer to display it.
Example:
local project_scene = ProjectNewScene3D(g_project)
ProjectAddLayer(g_project, project_scene, 0.5) // add the 3d scene to a project layer with Z offset of 0.5
#*/
sq_register(vm, ProjectNewScene3D, "ProjectNewScene", _SC(".x"));
sq_register(vm, ProjectNewScene3D, "ProjectNewScene3D", _SC(".x"));
/*#
Func: ProjectNewScene2D
Proto: ProjectScene:Project
Desc: Create a new scene 2D.
Note: You need to add the newly created scene to a project layer to display it.
Example:
local project_scene = ProjectNewScene2D(g_project)
ProjectAddLayer(g_project, project_scene, 0.5) // add the 2d scene to a project layer with Z offset of 0.5
#*/
sq_register(vm, ProjectNewScene2D, "ProjectNewScene2D", _SC(".x"));
/*#
Func: ProjectFindScene
Proto: ProjectScene:Project,string path
Desc: Returns an instance of a specific scene in the project, returns an invalid object if no such instance could be found.
#*/
sq_register(vm, ProjectFindScene, "ProjectFindScene", _SC(".xs"));
/*#
Func: ProjectGetSceneLayerList
Proto: Array:Project,ProjectScene
Desc: Return all the project layers displaying a specific scene instance. A scene might be displayed by several different layers (eg. in order to display a split-screen view).
#*/
sq_register(vm, ProjectGetSceneLayerList, "ProjectGetSceneLayerList", _SC(".xx"));
/*#
Func: ProjectSceneIsActive
Proto: bool:Project,ProjectScene
Desc: Return the active state of a project scene.
#*/
sq_register(vm, ProjectSceneIsActive, "ProjectSceneIsActive", _SC(".xx"));
sq_register(vm, ProjectSceneIsActive, "ProjectIsSceneActive", _SC(".xx"));
/*#
Func: ProjectSceneActivate
Proto: void:Project,ProjectScene,bool
Desc: Activate or deactivate a project scene. When deactivated a scene is not updated or displayed anymore.
#*/
sq_register(vm, ProjectSceneActivate, "ProjectSceneActivate", _SC(".xxb"));
sq_register(vm, ProjectSceneActivate, "ProjectActivateScene", _SC(".xxb"));
/*#
Func: ProjectInstantiateScene
Proto: ProjectScene:Project,string path
Desc: Instantiate a project scene.
Note: You need to add the project scene to a layer to display it. This function will detect the type of scene to instantiate, 2d or 3d, from the input file.
See: ProjectSceneGetType, ProjectDeleteScene
Example:
local project_scene = ProjectInstantiateScene(g_project, "scene_file.nms")
ProjectAddLayer(g_project, project_scene, 0.5)
#*/
sq_register(vm, ProjectInstantiateScene, "ProjectInstantiateScene", _SC(".xs"));
/*#
Func: ProjectSceneSetGlobal
Proto: void:ProjectScene
Desc: Register scene as the global scene script object (g_scene).
Note: The project automatically updates g_scene before updating or displaying a scene.
#*/
sq_register(vm, ProjectSceneSetGlobal, "ProjectSceneSetGlobal", _SC(".x"));
/*#
Func: ProjectDeleteScene
Proto: void:Project,ProjectScene
Desc: Delete a project scene.
Note: All layers displaying this scene will be destroyed as well.
#*/
sq_register(vm, ProjectUnloadScene, "ProjectDeleteScene", _SC(".xx"));
sq_register(vm, ProjectUnloadScene, "ProjectUnloadScene", _SC(".xx"));
/*#
Func: ProjectSceneGetType
Proto: ProjectSceneType:ProjectScene
Desc: Get a project scene type.
#*/
sq_register(vm, ProjectSceneGetType, "ProjectSceneGetType", _SC(".x"));
/*#
Func: ProjectSceneGetInstance
Proto: Scene:ProjectScene
Desc: Get the scene object of type Scene or UI from a project scene object.
Example:
local scene = ProjectSceneGetInstace(project_scene) // this project scene encapsulates a 3d scene
SceneAddLight(scene, "MyLight")
#*/
sq_register(vm, ProjectSceneGetInstance, "ProjectSceneGetInstance", _SC(".x"));
/*#
Func: ProjectGetFileName
Proto: String:Project
Desc: Return the project file name, without the project path.
See: ProjectGetFilePath
#*/
sq_register(vm, ProjectGetFileName, "ProjectGetFileName", _SC(".x"));
/*#
Func: ProjectGetFilePath
Proto: String:Project
Desc: Return the project path.
See: ProjectGetFileName
#*/
sq_register(vm, ProjectGetFilePath, "ProjectGetFilePath", _SC(".x"));
/*#
Enum: ProjectSceneType
Values: ProjectSceneTypeScene2d,ProjectSceneTypeScene3d
#*/
sq_pushstring(vm, "ProjectSceneTypeScene2d", -1); sq_pushinteger(vm, ProjectSceneInstance::Type_Scene2d); sq_newslot(vm, -3, true);
sq_pushstring(vm, "ProjectSceneTypeScene3d", -1); sq_pushinteger(vm, ProjectSceneInstance::Type_Scene3d); sq_newslot(vm, -3, true);
sq_pushstring(vm, "NullItem", -1); CObject::Push(vm, NULL, typetag_Item); sq_newslot(vm, -3, true);
}
//------------------------------------------------------------------------------