diff --git a/cmd/gox/pkg/gengo/pkg/github.com/goplus/spx/v2/export.go b/cmd/gox/pkg/gengo/pkg/github.com/goplus/spx/v2/export.go index 4399af3e..c459e7c3 100755 --- a/cmd/gox/pkg/gengo/pkg/github.com/goplus/spx/v2/export.go +++ b/cmd/gox/pkg/gengo/pkg/github.com/goplus/spx/v2/export.go @@ -72,6 +72,7 @@ func init() { NamedTypes: map[string]reflect.Type{ "Color": reflect.TypeOf((*q.Color)(nil)).Elem(), "Config": reflect.TypeOf((*q.Config)(nil)).Elem(), + "DecoratorJSON": reflect.TypeOf((*q.DecoratorJSON)(nil)).Elem(), "EffectKind": reflect.TypeOf((*q.EffectKind)(nil)).Elem(), "Game": reflect.TypeOf((*q.Game)(nil)).Elem(), "List": reflect.TypeOf((*q.List)(nil)).Elem(), diff --git a/cmd/gox/pkg/gengo/pkg/github.com/goplus/spx/v2/pkg/gdspx/pkg/engine/export.go b/cmd/gox/pkg/gengo/pkg/github.com/goplus/spx/v2/pkg/gdspx/pkg/engine/export.go index b5d2ce7f..a57cfb29 100755 --- a/cmd/gox/pkg/gengo/pkg/github.com/goplus/spx/v2/pkg/gdspx/pkg/engine/export.go +++ b/cmd/gox/pkg/gengo/pkg/github.com/goplus/spx/v2/pkg/gdspx/pkg/engine/export.go @@ -25,24 +25,25 @@ func init() { "sync": "sync", }, Interfaces: map[string]reflect.Type{ - "IAudioMgr": reflect.TypeOf((*q.IAudioMgr)(nil)).Elem(), - "ICameraMgr": reflect.TypeOf((*q.ICameraMgr)(nil)).Elem(), - "IDebugMgr": reflect.TypeOf((*q.IDebugMgr)(nil)).Elem(), - "IExtMgr": reflect.TypeOf((*q.IExtMgr)(nil)).Elem(), - "IInputMgr": reflect.TypeOf((*q.IInputMgr)(nil)).Elem(), - "ILifeCycle": reflect.TypeOf((*q.ILifeCycle)(nil)).Elem(), - "IManager": reflect.TypeOf((*q.IManager)(nil)).Elem(), - "INavigationMgr": reflect.TypeOf((*q.INavigationMgr)(nil)).Elem(), - "IPenMgr": reflect.TypeOf((*q.IPenMgr)(nil)).Elem(), - "IPhysicMgr": reflect.TypeOf((*q.IPhysicMgr)(nil)).Elem(), - "IPlatformMgr": reflect.TypeOf((*q.IPlatformMgr)(nil)).Elem(), - "IResMgr": reflect.TypeOf((*q.IResMgr)(nil)).Elem(), - "ISceneMgr": reflect.TypeOf((*q.ISceneMgr)(nil)).Elem(), - "ISpriteMgr": reflect.TypeOf((*q.ISpriteMgr)(nil)).Elem(), - "ISpriter": reflect.TypeOf((*q.ISpriter)(nil)).Elem(), - "ITilemapMgr": reflect.TypeOf((*q.ITilemapMgr)(nil)).Elem(), - "IUiMgr": reflect.TypeOf((*q.IUiMgr)(nil)).Elem(), - "IUiNode": reflect.TypeOf((*q.IUiNode)(nil)).Elem(), + "IAudioMgr": reflect.TypeOf((*q.IAudioMgr)(nil)).Elem(), + "ICameraMgr": reflect.TypeOf((*q.ICameraMgr)(nil)).Elem(), + "IDebugMgr": reflect.TypeOf((*q.IDebugMgr)(nil)).Elem(), + "IExtMgr": reflect.TypeOf((*q.IExtMgr)(nil)).Elem(), + "IInputMgr": reflect.TypeOf((*q.IInputMgr)(nil)).Elem(), + "ILifeCycle": reflect.TypeOf((*q.ILifeCycle)(nil)).Elem(), + "IManager": reflect.TypeOf((*q.IManager)(nil)).Elem(), + "INavigationMgr": reflect.TypeOf((*q.INavigationMgr)(nil)).Elem(), + "IPenMgr": reflect.TypeOf((*q.IPenMgr)(nil)).Elem(), + "IPhysicMgr": reflect.TypeOf((*q.IPhysicMgr)(nil)).Elem(), + "IPlatformMgr": reflect.TypeOf((*q.IPlatformMgr)(nil)).Elem(), + "IResMgr": reflect.TypeOf((*q.IResMgr)(nil)).Elem(), + "ISceneMgr": reflect.TypeOf((*q.ISceneMgr)(nil)).Elem(), + "ISpriteMgr": reflect.TypeOf((*q.ISpriteMgr)(nil)).Elem(), + "ISpriter": reflect.TypeOf((*q.ISpriter)(nil)).Elem(), + "ITilemapMgr": reflect.TypeOf((*q.ITilemapMgr)(nil)).Elem(), + "ITilemapparserMgr": reflect.TypeOf((*q.ITilemapparserMgr)(nil)).Elem(), + "IUiMgr": reflect.TypeOf((*q.IUiMgr)(nil)).Elem(), + "IUiNode": reflect.TypeOf((*q.IUiNode)(nil)).Elem(), }, NamedTypes: map[string]reflect.Type{ "Action0": reflect.TypeOf((*q.Action0)(nil)).Elem(), @@ -75,6 +76,7 @@ func init() { "SceneMgr": reflect.ValueOf(&q.SceneMgr), "SpriteMgr": reflect.ValueOf(&q.SpriteMgr), "TilemapMgr": reflect.ValueOf(&q.TilemapMgr), + "TilemapparserMgr": reflect.ValueOf(&q.TilemapparserMgr), "TimeSinceGameStart": reflect.ValueOf(&q.TimeSinceGameStart), "UiMgr": reflect.ValueOf(&q.UiMgr), }, diff --git a/cmd/gox/template/platform/webworker/worker.wrap.gen.js b/cmd/gox/template/platform/webworker/worker.wrap.gen.js index 0c47160d..bfdb6982 100644 --- a/cmd/gox/template/platform/webworker/worker.wrap.gen.js +++ b/cmd/gox/template/platform/webworker/worker.wrap.gen.js @@ -1,54 +1,54 @@ -/*------------------------------------------------------------------------------ -// This code was generated by template worker.wrap.gen.js.tmpl. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. Any updates should be done in -// "worker.wrap.gen.js.tmpl" so they can be included in the generated -// code. -//----------------------------------------------------------------------------*/ -function BindFFI(goBridge) { - var ffi = {} -ffi.gdspx_on_engine_start = goBridge.getGoFunction("gdspx_on_engine_start") -ffi.gdspx_on_engine_update = goBridge.getGoFunction("gdspx_on_engine_update") -ffi.gdspx_on_engine_fixed_update = goBridge.getGoFunction("gdspx_on_engine_fixed_update") -ffi.gdspx_on_engine_destroy = goBridge.getGoFunction("gdspx_on_engine_destroy") -ffi.gdspx_on_engine_reset = goBridge.getGoFunction("gdspx_on_engine_reset") -ffi.gdspx_on_engine_pause = goBridge.getGoFunction("gdspx_on_engine_pause") -ffi.gdspx_on_scene_sprite_instantiated = goBridge.getGoFunction("gdspx_on_scene_sprite_instantiated") -ffi.gdspx_on_sprite_ready = goBridge.getGoFunction("gdspx_on_sprite_ready") -ffi.gdspx_on_sprite_updated = goBridge.getGoFunction("gdspx_on_sprite_updated") -ffi.gdspx_on_sprite_fixed_updated = goBridge.getGoFunction("gdspx_on_sprite_fixed_updated") -ffi.gdspx_on_sprite_destroyed = goBridge.getGoFunction("gdspx_on_sprite_destroyed") -ffi.gdspx_on_sprite_frames_set_changed = goBridge.getGoFunction("gdspx_on_sprite_frames_set_changed") -ffi.gdspx_on_sprite_animation_changed = goBridge.getGoFunction("gdspx_on_sprite_animation_changed") -ffi.gdspx_on_sprite_frame_changed = goBridge.getGoFunction("gdspx_on_sprite_frame_changed") -ffi.gdspx_on_sprite_animation_looped = goBridge.getGoFunction("gdspx_on_sprite_animation_looped") -ffi.gdspx_on_sprite_animation_finished = goBridge.getGoFunction("gdspx_on_sprite_animation_finished") -ffi.gdspx_on_sprite_vfx_finished = goBridge.getGoFunction("gdspx_on_sprite_vfx_finished") -ffi.gdspx_on_sprite_screen_exited = goBridge.getGoFunction("gdspx_on_sprite_screen_exited") -ffi.gdspx_on_sprite_screen_entered = goBridge.getGoFunction("gdspx_on_sprite_screen_entered") -ffi.gdspx_on_mouse_pressed = goBridge.getGoFunction("gdspx_on_mouse_pressed") -ffi.gdspx_on_mouse_released = goBridge.getGoFunction("gdspx_on_mouse_released") -ffi.gdspx_on_key_pressed = goBridge.getGoFunction("gdspx_on_key_pressed") -ffi.gdspx_on_key_released = goBridge.getGoFunction("gdspx_on_key_released") -ffi.gdspx_on_action_pressed = goBridge.getGoFunction("gdspx_on_action_pressed") -ffi.gdspx_on_action_just_pressed = goBridge.getGoFunction("gdspx_on_action_just_pressed") -ffi.gdspx_on_action_just_released = goBridge.getGoFunction("gdspx_on_action_just_released") -ffi.gdspx_on_axis_changed = goBridge.getGoFunction("gdspx_on_axis_changed") -ffi.gdspx_on_collision_enter = goBridge.getGoFunction("gdspx_on_collision_enter") -ffi.gdspx_on_collision_stay = goBridge.getGoFunction("gdspx_on_collision_stay") -ffi.gdspx_on_collision_exit = goBridge.getGoFunction("gdspx_on_collision_exit") -ffi.gdspx_on_trigger_enter = goBridge.getGoFunction("gdspx_on_trigger_enter") -ffi.gdspx_on_trigger_stay = goBridge.getGoFunction("gdspx_on_trigger_stay") -ffi.gdspx_on_trigger_exit = goBridge.getGoFunction("gdspx_on_trigger_exit") -ffi.gdspx_on_ui_ready = goBridge.getGoFunction("gdspx_on_ui_ready") -ffi.gdspx_on_ui_updated = goBridge.getGoFunction("gdspx_on_ui_updated") -ffi.gdspx_on_ui_destroyed = goBridge.getGoFunction("gdspx_on_ui_destroyed") -ffi.gdspx_on_ui_pressed = goBridge.getGoFunction("gdspx_on_ui_pressed") -ffi.gdspx_on_ui_released = goBridge.getGoFunction("gdspx_on_ui_released") -ffi.gdspx_on_ui_hovered = goBridge.getGoFunction("gdspx_on_ui_hovered") -ffi.gdspx_on_ui_clicked = goBridge.getGoFunction("gdspx_on_ui_clicked") -ffi.gdspx_on_ui_toggle = goBridge.getGoFunction("gdspx_on_ui_toggle") -ffi.gdspx_on_ui_text_changed = goBridge.getGoFunction("gdspx_on_ui_text_changed") -return ffi +/*------------------------------------------------------------------------------ +// This code was generated by template worker.wrap.gen.js.tmpl. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. Any updates should be done in +// "worker.wrap.gen.js.tmpl" so they can be included in the generated +// code. +//----------------------------------------------------------------------------*/ +function BindFFI(goBridge) { + var ffi = {} +ffi.gdspx_on_engine_start = goBridge.getGoFunction("gdspx_on_engine_start") +ffi.gdspx_on_engine_update = goBridge.getGoFunction("gdspx_on_engine_update") +ffi.gdspx_on_engine_fixed_update = goBridge.getGoFunction("gdspx_on_engine_fixed_update") +ffi.gdspx_on_engine_destroy = goBridge.getGoFunction("gdspx_on_engine_destroy") +ffi.gdspx_on_engine_reset = goBridge.getGoFunction("gdspx_on_engine_reset") +ffi.gdspx_on_engine_pause = goBridge.getGoFunction("gdspx_on_engine_pause") +ffi.gdspx_on_scene_sprite_instantiated = goBridge.getGoFunction("gdspx_on_scene_sprite_instantiated") +ffi.gdspx_on_sprite_ready = goBridge.getGoFunction("gdspx_on_sprite_ready") +ffi.gdspx_on_sprite_updated = goBridge.getGoFunction("gdspx_on_sprite_updated") +ffi.gdspx_on_sprite_fixed_updated = goBridge.getGoFunction("gdspx_on_sprite_fixed_updated") +ffi.gdspx_on_sprite_destroyed = goBridge.getGoFunction("gdspx_on_sprite_destroyed") +ffi.gdspx_on_sprite_frames_set_changed = goBridge.getGoFunction("gdspx_on_sprite_frames_set_changed") +ffi.gdspx_on_sprite_animation_changed = goBridge.getGoFunction("gdspx_on_sprite_animation_changed") +ffi.gdspx_on_sprite_frame_changed = goBridge.getGoFunction("gdspx_on_sprite_frame_changed") +ffi.gdspx_on_sprite_animation_looped = goBridge.getGoFunction("gdspx_on_sprite_animation_looped") +ffi.gdspx_on_sprite_animation_finished = goBridge.getGoFunction("gdspx_on_sprite_animation_finished") +ffi.gdspx_on_sprite_vfx_finished = goBridge.getGoFunction("gdspx_on_sprite_vfx_finished") +ffi.gdspx_on_sprite_screen_exited = goBridge.getGoFunction("gdspx_on_sprite_screen_exited") +ffi.gdspx_on_sprite_screen_entered = goBridge.getGoFunction("gdspx_on_sprite_screen_entered") +ffi.gdspx_on_mouse_pressed = goBridge.getGoFunction("gdspx_on_mouse_pressed") +ffi.gdspx_on_mouse_released = goBridge.getGoFunction("gdspx_on_mouse_released") +ffi.gdspx_on_key_pressed = goBridge.getGoFunction("gdspx_on_key_pressed") +ffi.gdspx_on_key_released = goBridge.getGoFunction("gdspx_on_key_released") +ffi.gdspx_on_action_pressed = goBridge.getGoFunction("gdspx_on_action_pressed") +ffi.gdspx_on_action_just_pressed = goBridge.getGoFunction("gdspx_on_action_just_pressed") +ffi.gdspx_on_action_just_released = goBridge.getGoFunction("gdspx_on_action_just_released") +ffi.gdspx_on_axis_changed = goBridge.getGoFunction("gdspx_on_axis_changed") +ffi.gdspx_on_collision_enter = goBridge.getGoFunction("gdspx_on_collision_enter") +ffi.gdspx_on_collision_stay = goBridge.getGoFunction("gdspx_on_collision_stay") +ffi.gdspx_on_collision_exit = goBridge.getGoFunction("gdspx_on_collision_exit") +ffi.gdspx_on_trigger_enter = goBridge.getGoFunction("gdspx_on_trigger_enter") +ffi.gdspx_on_trigger_stay = goBridge.getGoFunction("gdspx_on_trigger_stay") +ffi.gdspx_on_trigger_exit = goBridge.getGoFunction("gdspx_on_trigger_exit") +ffi.gdspx_on_ui_ready = goBridge.getGoFunction("gdspx_on_ui_ready") +ffi.gdspx_on_ui_updated = goBridge.getGoFunction("gdspx_on_ui_updated") +ffi.gdspx_on_ui_destroyed = goBridge.getGoFunction("gdspx_on_ui_destroyed") +ffi.gdspx_on_ui_pressed = goBridge.getGoFunction("gdspx_on_ui_pressed") +ffi.gdspx_on_ui_released = goBridge.getGoFunction("gdspx_on_ui_released") +ffi.gdspx_on_ui_hovered = goBridge.getGoFunction("gdspx_on_ui_hovered") +ffi.gdspx_on_ui_clicked = goBridge.getGoFunction("gdspx_on_ui_clicked") +ffi.gdspx_on_ui_toggle = goBridge.getGoFunction("gdspx_on_ui_toggle") +ffi.gdspx_on_ui_text_changed = goBridge.getGoFunction("gdspx_on_ui_text_changed") +return ffi } \ No newline at end of file diff --git a/cmd/igox/pkg/github.com/goplus/spx/v2/export.go b/cmd/igox/pkg/github.com/goplus/spx/v2/export.go index 4399af3e..c459e7c3 100755 --- a/cmd/igox/pkg/github.com/goplus/spx/v2/export.go +++ b/cmd/igox/pkg/github.com/goplus/spx/v2/export.go @@ -72,6 +72,7 @@ func init() { NamedTypes: map[string]reflect.Type{ "Color": reflect.TypeOf((*q.Color)(nil)).Elem(), "Config": reflect.TypeOf((*q.Config)(nil)).Elem(), + "DecoratorJSON": reflect.TypeOf((*q.DecoratorJSON)(nil)).Elem(), "EffectKind": reflect.TypeOf((*q.EffectKind)(nil)).Elem(), "Game": reflect.TypeOf((*q.Game)(nil)).Elem(), "List": reflect.TypeOf((*q.List)(nil)).Elem(), diff --git a/cmd/igox/pkg/github.com/goplus/spx/v2/pkg/gdspx/pkg/engine/export.go b/cmd/igox/pkg/github.com/goplus/spx/v2/pkg/gdspx/pkg/engine/export.go index b5d2ce7f..a57cfb29 100755 --- a/cmd/igox/pkg/github.com/goplus/spx/v2/pkg/gdspx/pkg/engine/export.go +++ b/cmd/igox/pkg/github.com/goplus/spx/v2/pkg/gdspx/pkg/engine/export.go @@ -25,24 +25,25 @@ func init() { "sync": "sync", }, Interfaces: map[string]reflect.Type{ - "IAudioMgr": reflect.TypeOf((*q.IAudioMgr)(nil)).Elem(), - "ICameraMgr": reflect.TypeOf((*q.ICameraMgr)(nil)).Elem(), - "IDebugMgr": reflect.TypeOf((*q.IDebugMgr)(nil)).Elem(), - "IExtMgr": reflect.TypeOf((*q.IExtMgr)(nil)).Elem(), - "IInputMgr": reflect.TypeOf((*q.IInputMgr)(nil)).Elem(), - "ILifeCycle": reflect.TypeOf((*q.ILifeCycle)(nil)).Elem(), - "IManager": reflect.TypeOf((*q.IManager)(nil)).Elem(), - "INavigationMgr": reflect.TypeOf((*q.INavigationMgr)(nil)).Elem(), - "IPenMgr": reflect.TypeOf((*q.IPenMgr)(nil)).Elem(), - "IPhysicMgr": reflect.TypeOf((*q.IPhysicMgr)(nil)).Elem(), - "IPlatformMgr": reflect.TypeOf((*q.IPlatformMgr)(nil)).Elem(), - "IResMgr": reflect.TypeOf((*q.IResMgr)(nil)).Elem(), - "ISceneMgr": reflect.TypeOf((*q.ISceneMgr)(nil)).Elem(), - "ISpriteMgr": reflect.TypeOf((*q.ISpriteMgr)(nil)).Elem(), - "ISpriter": reflect.TypeOf((*q.ISpriter)(nil)).Elem(), - "ITilemapMgr": reflect.TypeOf((*q.ITilemapMgr)(nil)).Elem(), - "IUiMgr": reflect.TypeOf((*q.IUiMgr)(nil)).Elem(), - "IUiNode": reflect.TypeOf((*q.IUiNode)(nil)).Elem(), + "IAudioMgr": reflect.TypeOf((*q.IAudioMgr)(nil)).Elem(), + "ICameraMgr": reflect.TypeOf((*q.ICameraMgr)(nil)).Elem(), + "IDebugMgr": reflect.TypeOf((*q.IDebugMgr)(nil)).Elem(), + "IExtMgr": reflect.TypeOf((*q.IExtMgr)(nil)).Elem(), + "IInputMgr": reflect.TypeOf((*q.IInputMgr)(nil)).Elem(), + "ILifeCycle": reflect.TypeOf((*q.ILifeCycle)(nil)).Elem(), + "IManager": reflect.TypeOf((*q.IManager)(nil)).Elem(), + "INavigationMgr": reflect.TypeOf((*q.INavigationMgr)(nil)).Elem(), + "IPenMgr": reflect.TypeOf((*q.IPenMgr)(nil)).Elem(), + "IPhysicMgr": reflect.TypeOf((*q.IPhysicMgr)(nil)).Elem(), + "IPlatformMgr": reflect.TypeOf((*q.IPlatformMgr)(nil)).Elem(), + "IResMgr": reflect.TypeOf((*q.IResMgr)(nil)).Elem(), + "ISceneMgr": reflect.TypeOf((*q.ISceneMgr)(nil)).Elem(), + "ISpriteMgr": reflect.TypeOf((*q.ISpriteMgr)(nil)).Elem(), + "ISpriter": reflect.TypeOf((*q.ISpriter)(nil)).Elem(), + "ITilemapMgr": reflect.TypeOf((*q.ITilemapMgr)(nil)).Elem(), + "ITilemapparserMgr": reflect.TypeOf((*q.ITilemapparserMgr)(nil)).Elem(), + "IUiMgr": reflect.TypeOf((*q.IUiMgr)(nil)).Elem(), + "IUiNode": reflect.TypeOf((*q.IUiNode)(nil)).Elem(), }, NamedTypes: map[string]reflect.Type{ "Action0": reflect.TypeOf((*q.Action0)(nil)).Elem(), @@ -75,6 +76,7 @@ func init() { "SceneMgr": reflect.ValueOf(&q.SceneMgr), "SpriteMgr": reflect.ValueOf(&q.SpriteMgr), "TilemapMgr": reflect.ValueOf(&q.TilemapMgr), + "TilemapparserMgr": reflect.ValueOf(&q.TilemapparserMgr), "TimeSinceGameStart": reflect.ValueOf(&q.TimeSinceGameStart), "UiMgr": reflect.ValueOf(&q.UiMgr), }, diff --git a/game_tilemap.go b/game_tilemap.go index e81e890e..44e290b3 100644 --- a/game_tilemap.go +++ b/game_tilemap.go @@ -102,3 +102,30 @@ func (p *Game) createStaticSprite(texturePath string, pos mathf.Vec2, rot float6 colliderTypeInt := parseColliderShapeType(colliderType, 0) sceneMgr.CreateStaticSprite(engine.ToAssetPath(texturePath), pos, rot, scale, zindex, pivot, colliderTypeInt, colliderPivot, colliderParams) } + +// ============================================================================ +// Dynamic Tilemap Loading API +// ============================================================================ + +// LoadTilemap dynamically loads a tilemap from the specified path +// mapDir can be either: +// - A directory path (new format): "tilemaps/map1" -> uses C++ TileMapParser +// - A file path (old format): "tilemaps/map1.json" -> uses Go loader +// +// This will unload any currently loaded tilemap before loading the new one. +func (p *Game) LoadTilemap(mapDir string) { + p.tilemapMgr.unloadMap() + p.tilemapMgr.loadMap(mapDir) + p.tilemapMgr.parseTilemap() +} + +// UnloadTilemap unloads the currently loaded tilemap and cleans up resources +func (p *Game) UnloadTilemap() { + p.tilemapMgr.unloadMap() +} + +// TilemapName returns the name of the currently loaded tilemap +// Returns empty string if no tilemap is loaded +func (p *Game) TilemapName() string { + return p.tilemapMgr.getCurrentMap() +} diff --git a/gdspx.go b/gdspx.go index 2faa4f03..c9ef88d4 100644 --- a/gdspx.go +++ b/gdspx.go @@ -28,20 +28,21 @@ import ( // copy these variable to any namespace you want var ( - audioMgr enginewrap.AudioMgrImpl - cameraMgr enginewrap.CameraMgrImpl - inputMgr enginewrap.InputMgrImpl - physicMgr enginewrap.PhysicMgrImpl - platformMgr enginewrap.PlatformMgrImpl - resMgr enginewrap.ResMgrImpl - sceneMgr enginewrap.SceneMgrImpl - spriteMgr enginewrap.SpriteMgrImpl - uiMgr enginewrap.UiMgrImpl - extMgr enginewrap.ExtMgrImpl - penMgr enginewrap.PenMgrImpl - debugMgr enginewrap.DebugMgrImpl - navigationMgr enginewrap.NavigationMgrImpl - tilemapMgr enginewrap.TilemapMgrImpl + audioMgr enginewrap.AudioMgrImpl + cameraMgr enginewrap.CameraMgrImpl + inputMgr enginewrap.InputMgrImpl + physicMgr enginewrap.PhysicMgrImpl + platformMgr enginewrap.PlatformMgrImpl + resMgr enginewrap.ResMgrImpl + sceneMgr enginewrap.SceneMgrImpl + spriteMgr enginewrap.SpriteMgrImpl + uiMgr enginewrap.UiMgrImpl + extMgr enginewrap.ExtMgrImpl + penMgr enginewrap.PenMgrImpl + debugMgr enginewrap.DebugMgrImpl + navigationMgr enginewrap.NavigationMgrImpl + tilemapMgr enginewrap.TilemapMgrImpl + tilemapparserMgr enginewrap.TilemapparserMgrImpl ) var ( diff --git a/internal/enginewrap/sync.gen.go b/internal/enginewrap/sync.gen.go index 8fa7c814..2a5a8b74 100644 --- a/internal/enginewrap/sync.gen.go +++ b/internal/enginewrap/sync.gen.go @@ -30,26 +30,28 @@ resMgr enginewrap.ResMgrImpl sceneMgr enginewrap.SceneMgrImpl spriteMgr enginewrap.SpriteMgrImpl tilemapMgr enginewrap.TilemapMgrImpl +tilemapparserMgr enginewrap.TilemapparserMgrImpl uiMgr enginewrap.UiMgrImpl ) */ var ( - audioMgr AudioMgrImpl - cameraMgr CameraMgrImpl - debugMgr DebugMgrImpl - extMgr ExtMgrImpl - inputMgr InputMgrImpl - navigationMgr NavigationMgrImpl - penMgr PenMgrImpl - physicMgr PhysicMgrImpl - platformMgr PlatformMgrImpl - resMgr ResMgrImpl - sceneMgr SceneMgrImpl - spriteMgr SpriteMgrImpl - tilemapMgr TilemapMgrImpl - uiMgr UiMgrImpl + audioMgr AudioMgrImpl + cameraMgr CameraMgrImpl + debugMgr DebugMgrImpl + extMgr ExtMgrImpl + inputMgr InputMgrImpl + navigationMgr NavigationMgrImpl + penMgr PenMgrImpl + physicMgr PhysicMgrImpl + platformMgr PlatformMgrImpl + resMgr ResMgrImpl + sceneMgr SceneMgrImpl + spriteMgr SpriteMgrImpl + tilemapMgr TilemapMgrImpl + tilemapparserMgr TilemapparserMgrImpl + uiMgr UiMgrImpl ) type audioMgrImpl struct { @@ -117,6 +119,11 @@ type tilemapMgrImpl struct { type TilemapMgrImpl struct { tilemapMgrImpl } +type tilemapparserMgrImpl struct { +} +type TilemapparserMgrImpl struct { + tilemapparserMgrImpl +} type uiMgrImpl struct { } type UiMgrImpl struct { @@ -1639,6 +1646,37 @@ func (pself *tilemapMgrImpl) ExitTilemapEditorMode() { }) } +// ITilemapparserMgr +func (pself *tilemapparserMgrImpl) LoadTilemap(json_path string) { + callInMainThread(func() { + gdx.TilemapparserMgr.LoadTilemap(json_path) + }) +} +func (pself *tilemapparserMgrImpl) UnloadTilemap(name string) { + callInMainThread(func() { + gdx.TilemapparserMgr.UnloadTilemap(name) + }) +} +func (pself *tilemapparserMgrImpl) DestroyAllTilemaps() { + callInMainThread(func() { + gdx.TilemapparserMgr.DestroyAllTilemaps() + }) +} +func (pself *tilemapparserMgrImpl) HasTilemap(name string) bool { + var _ret1 bool + callInMainThread(func() { + _ret1 = gdx.TilemapparserMgr.HasTilemap(name) + }) + return _ret1 +} +func (pself *tilemapparserMgrImpl) GetTilemapLayerCount(name string) int64 { + var _ret1 int64 + callInMainThread(func() { + _ret1 = gdx.TilemapparserMgr.GetTilemapLayerCount(name) + }) + return _ret1 +} + // IUiMgr func (pself *uiMgrImpl) BindNode(obj gdx.Object, rel_path string) gdx.Object { var _ret1 gdx.Object diff --git a/internal/enginewrap/sync_pure.gen.go b/internal/enginewrap/sync_pure.gen.go index 59393ca1..52e7f61e 100644 --- a/internal/enginewrap/sync_pure.gen.go +++ b/internal/enginewrap/sync_pure.gen.go @@ -30,26 +30,28 @@ resMgr enginewrap.ResMgrImpl sceneMgr enginewrap.SceneMgrImpl spriteMgr enginewrap.SpriteMgrImpl tilemapMgr enginewrap.TilemapMgrImpl +tilemapparserMgr enginewrap.TilemapparserMgrImpl uiMgr enginewrap.UiMgrImpl ) */ var ( - audioMgr AudioMgrImpl - cameraMgr CameraMgrImpl - debugMgr DebugMgrImpl - extMgr ExtMgrImpl - inputMgr InputMgrImpl - navigationMgr NavigationMgrImpl - penMgr PenMgrImpl - physicMgr PhysicMgrImpl - platformMgr PlatformMgrImpl - resMgr ResMgrImpl - sceneMgr SceneMgrImpl - spriteMgr SpriteMgrImpl - tilemapMgr TilemapMgrImpl - uiMgr UiMgrImpl + audioMgr AudioMgrImpl + cameraMgr CameraMgrImpl + debugMgr DebugMgrImpl + extMgr ExtMgrImpl + inputMgr InputMgrImpl + navigationMgr NavigationMgrImpl + penMgr PenMgrImpl + physicMgr PhysicMgrImpl + platformMgr PlatformMgrImpl + resMgr ResMgrImpl + sceneMgr SceneMgrImpl + spriteMgr SpriteMgrImpl + tilemapMgr TilemapMgrImpl + tilemapparserMgr TilemapparserMgrImpl + uiMgr UiMgrImpl ) type audioMgrImpl struct { @@ -117,6 +119,11 @@ type tilemapMgrImpl struct { type TilemapMgrImpl struct { tilemapMgrImpl } +type tilemapparserMgrImpl struct { +} +type TilemapparserMgrImpl struct { + tilemapparserMgrImpl +} type uiMgrImpl struct { } type UiMgrImpl struct { @@ -752,6 +759,19 @@ func (pself *tilemapMgrImpl) GetTileWithLayer(pos Vec2, layer_index int64) strin func (pself *tilemapMgrImpl) CloseDrawTiles() {} func (pself *tilemapMgrImpl) ExitTilemapEditorMode() {} +// ITilemapparserMgr +func (pself *tilemapparserMgrImpl) LoadTilemap(json_path string) {} +func (pself *tilemapparserMgrImpl) UnloadTilemap(name string) {} +func (pself *tilemapparserMgrImpl) DestroyAllTilemaps() {} +func (pself *tilemapparserMgrImpl) HasTilemap(name string) bool { + var _ret1 bool + return _ret1 +} +func (pself *tilemapparserMgrImpl) GetTilemapLayerCount(name string) int64 { + var _ret1 int64 + return _ret1 +} + // IUiMgr func (pself *uiMgrImpl) BindNode(obj gdx.Object, rel_path string) gdx.Object { var _ret1 gdx.Object diff --git a/internal/tilemap/tilemap.go b/internal/tilemap/tilemap.go index b5ddad3d..95d33b69 100644 --- a/internal/tilemap/tilemap.go +++ b/internal/tilemap/tilemap.go @@ -13,20 +13,20 @@ type vec2i struct { Y int32 `json:"y"` } -// WorldPoint represents a 2D coordinate in world space (pixels) -type vec2 struct { +// Vec2 represents a 2D coordinate in world space (pixels) +type Vec2 struct { X float64 `json:"x"` Y float64 `json:"y"` } -func (v vec2) ToVec2() mathf.Vec2 { +func (v Vec2) ToVec2() mathf.Vec2 { return mathf.NewVec2(v.X, v.Y) } -func (v vec2) Add(other vec2) vec2 { - return vec2{X: v.X + other.X, Y: v.Y + other.Y} +func (v Vec2) Add(other Vec2) Vec2 { + return Vec2{X: v.X + other.X, Y: v.Y + other.Y} } -func (v vec2) Sub(other vec2) vec2 { - return vec2{X: v.X - other.X, Y: v.Y - other.Y} +func (v Vec2) Sub(other Vec2) Vec2 { + return Vec2{X: v.X - other.X, Y: v.Y - other.Y} } // tileSize represents the dimensions of a tile @@ -37,7 +37,7 @@ type tileSize struct { // physicsData represents physics properties of a tile type physicsData struct { - CollisionPoints []vec2 `json:"collision_points,omitempty"` + CollisionPoints []Vec2 `json:"collision_points,omitempty"` // other properties } @@ -83,18 +83,18 @@ type tileMapData struct { Layers []tilemapLayer `json:"layers"` } -// decoratorNode represents a Sprite2D node in the scene -type decoratorNode struct { +// DecoratorNode represents a Sprite2D node in the scene +type DecoratorNode struct { Name string `json:"name"` Path string `json:"path"` Parent string `json:"parent"` - Position vec2 `json:"position"` - Scale vec2 `json:"scale,omitempty"` + Position Vec2 `json:"position"` + Scale Vec2 `json:"scale,omitempty"` Ratation float64 `json:"rotation,omitempty"` - Pivot vec2 `json:"pivot,omitempty"` + Pivot Vec2 `json:"pivot,omitempty"` ZIndex int32 `json:"z_index,omitempty"` ColliderType string `json:"collider_type,omitempty"` //"none","auto","circle","rect","capsule","polygon", - ColliderPivot vec2 `json:"collider_pivot,omitempty"` + ColliderPivot Vec2 `json:"collider_pivot,omitempty"` ColliderParams []float64 `json:"collider_params,omitempty"` } @@ -103,13 +103,13 @@ type spriteNode struct { Name string `json:"name"` Path string `json:"path"` Parent string `json:"parent"` - Position vec2 `json:"position"` - Scale vec2 `json:"scale,omitempty"` + Position Vec2 `json:"position"` + Scale Vec2 `json:"scale,omitempty"` Ratation float64 `json:"rotation,omitempty"` ZIndex int32 `json:"z_index,omitempty"` - Pivot vec2 `json:"pivot,omitempty"` + Pivot Vec2 `json:"pivot,omitempty"` ColliderType string `json:"collider_type,omitempty"` //"none","auto","circle","rect","capsule","polygon", - ColliderPivot vec2 `json:"collider_pivot,omitempty"` + ColliderPivot Vec2 `json:"collider_pivot,omitempty"` ColliderParams []float64 `json:"collider_params,omitempty"` Properties map[string]interface{} `json:"properties,omitempty"` } @@ -117,7 +117,7 @@ type spriteNode struct { // TscnMapData represents the root structure for JSON output type TscnMapData struct { TileMap tileMapData `json:"tilemap"` - Decorators []decoratorNode `json:"decorators"` + Decorators []DecoratorNode `json:"decorators"` Sprites []spriteNode `json:"sprites"` } diff --git a/pkg/gdspx/cmd/codegen/gdextensionparser/clang/parser.go b/pkg/gdspx/cmd/codegen/gdextensionparser/clang/parser.go index c8e16210..55e4f406 100644 --- a/pkg/gdspx/cmd/codegen/gdextensionparser/clang/parser.go +++ b/pkg/gdspx/cmd/codegen/gdextensionparser/clang/parser.go @@ -1,403 +1,449 @@ -package clang - -import ( - "fmt" - "strings" - - "github.com/alecthomas/participle/v2" - . "github.com/alecthomas/participle/v2/lexer" - "golang.org/x/exp/slices" -) - -var ( - legacyGDExtentionInterfaceFunctionNames []string = []string{ - "GDExtensionInterfaceFunctionPtr", - } -) - -type CHeaderFileAST struct { - Expr []Expr `parser:" @@* " json:",omitempty"` -} - -func (a CHeaderFileAST) FindVariantEnumType() *TypedefEnum { - for _, e := range a.Expr { - if e.Enum != nil && e.Enum.Name != nil && *e.Enum.Name == "GDExtensionVariantType" { - return e.Enum - } - } - return nil -} - -func (a CHeaderFileAST) CollectFunctions() []TypedefFunction { - // there's a duplicate of GDExtensionClassGetPropertyList - distinct := map[string]struct{}{} - fns := make([]TypedefFunction, 0, len(a.Expr)) - - for _, e := range a.Expr { - if e.Function != nil { - if _, ok := distinct[e.Function.Name]; !ok { - fns = append(fns, *e.Function) - distinct[e.Function.Name] = struct{}{} - } - } - } - return fns -} - -func (a CHeaderFileAST) CollectFunctionsOfClass(className string) []TypedefFunction { - allFns := a.CollectFunctions() - - fns := make([]TypedefFunction, 0, len(allFns)) - - prefix := "GDExtensionSpx" + className - for _, fn := range allFns { - if strings.HasPrefix(fn.Name, prefix) && - !strings.HasPrefix(fn.Name, "GDExtensionSpxCallback") && - !strings.HasPrefix(fn.Name, "GDExtensionSpxString") && - !strings.HasPrefix(fn.Name, "GDExtensionSpxVariant") && - !strings.HasPrefix(fn.Name, "GDExtensionSpxGlobal") && - !slices.Contains(legacyGDExtentionInterfaceFunctionNames, fn.Name) { - fns = append(fns, fn) - } - } - - return fns -} - -func (a CHeaderFileAST) CollectGDExtensionManagerFunctions(managerName string) []TypedefFunction { - allFns := a.CollectFunctions() - - fns := make([]TypedefFunction, 0, len(allFns)) - - for _, fn := range allFns { - if strings.HasPrefix(fn.Name, "GDExtensionSpx") && - !strings.HasPrefix(fn.Name, "GDExtensionSpxCallback") && - !slices.Contains(legacyGDExtentionInterfaceFunctionNames, fn.Name) { - funcName := fn.Name[len("GDExtensionSpx"):] - if strings.HasPrefix(strings.ToLower(funcName), managerName) { - fns = append(fns, fn) - } - } - } - - return fns -} - -func (a CHeaderFileAST) CollectGDExtensionInterfaceFunctions() []TypedefFunction { - allFns := a.CollectFunctions() - - fns := make([]TypedefFunction, 0, len(allFns)) - - for _, fn := range allFns { - if strings.HasPrefix(fn.Name, "GDExtensionSpx") && - !strings.HasPrefix(fn.Name, "GDExtensionSpxCallback") && - !strings.HasPrefix(fn.Name, "GDExtensionSpxString") && - !strings.HasPrefix(fn.Name, "GDExtensionSpxVariant") && - !strings.HasPrefix(fn.Name, "GDExtensionSpxGlobal") && - !slices.Contains(legacyGDExtentionInterfaceFunctionNames, fn.Name) { - fns = append(fns, fn) - } - } - - return fns -} - -func (a CHeaderFileAST) CollectGDExtensionISpriteFunctions() []TypedefFunction { - allFns := a.CollectFunctions() - - fns := make([]TypedefFunction, 0, len(allFns)) - - for _, fn := range allFns { - if strings.HasPrefix(fn.Name, "GDExtensionSpxSprite") && - !slices.Contains(legacyGDExtentionInterfaceFunctionNames, fn.Name) { - fns = append(fns, fn) - } - } - - return fns -} -func (a CHeaderFileAST) CollectGDExtensionICallbackFunctions() []TypedefFunction { - allFns := a.CollectFunctions() - - fns := make([]TypedefFunction, 0, len(allFns)) - - for _, fn := range allFns { - if strings.HasPrefix(fn.Name, "GDExtensionSpxCallback") && - !slices.Contains(legacyGDExtentionInterfaceFunctionNames, fn.Name) { - fns = append(fns, fn) - } - } - return fns -} - -func (a CHeaderFileAST) CollectNonGDExtensionInterfaceFunctions() []TypedefFunction { - allFns := a.CollectFunctions() - - fns := make([]TypedefFunction, 0, len(allFns)) - - for _, fn := range allFns { - if !strings.HasPrefix(fn.Name, "GDExtensionSpx") { - fns = append(fns, fn) - } - } - - return fns -} - -func (a CHeaderFileAST) CollectStructs() []TypedefStruct { - structs := make([]TypedefStruct, 0, len(a.Expr)) - for _, e := range a.Expr { - if e.Struct != nil { - structs = append(structs, *e.Struct) - } - } - return structs -} - -func (a CHeaderFileAST) CollectAliases() []TypedefAlias { - aliases := make([]TypedefAlias, 0, len(a.Expr)) - for _, e := range a.Expr { - if e.Alias != nil { - aliases = append(aliases, *e.Alias) - } - } - return aliases -} - -func (a CHeaderFileAST) CollectEnums() []TypedefEnum { - enums := make([]TypedefEnum, 0, len(a.Expr)) - for _, e := range a.Expr { - if e.Enum != nil { - enums = append(enums, *e.Enum) - } - } - return enums -} - -type Expr struct { - Comment string `parser:" @Comment " json:",omitempty"` - Enum *TypedefEnum `parser:" | @@ ';' " json:",omitempty"` - Alias *TypedefAlias `parser:" | @@ ';' " json:",omitempty"` - Function *TypedefFunction `parser:" | @@ ';' " json:",omitempty"` - Struct *TypedefStruct `parser:" | @@ ';' " json:",omitempty"` -} - -type TypedefEnum struct { - Values []EnumValue `parser:" 'typedef' 'enum' '{' ( @@ ( ',' Comment? @@ Comment? )* ','? Comment? )? '}' " json:",omitempty"` - Name *string `parser:" @Ident " json:",omitempty"` -} - -type EnumValue struct { - Name string `parser:" @Ident " json:",omitempty"` - IntValue *int `parser:" ( '=' ( @Int " json:",omitempty"` - ConstRefValue *string `parser:" | @Ident ) )? " json:",omitempty"` -} - -type TypedefAlias struct { - Type PrimativeType `parser:" 'typedef' @@ " json:",omitempty"` - Name string `parser:" @Ident " json:",omitempty"` -} - -type TypedefFunction struct { - ReturnType PrimativeType `parser:" 'typedef' @@ " json:",omitempty"` - Name string `parser:" '(' '*' @Ident ')' " json:",omitempty"` - Arguments []Argument `parser:" '(' ( @@ ( ',' @@ )* )? ')' " json:",omitempty"` -} - -type TypedefStruct struct { - Fields []StructField `parser:" 'typedef' 'struct' '{' @@* '}' " json:",omitempty"` - Name string `parser:" @Ident " json:",omitempty"` -} - -func (t TypedefStruct) CollectFunctions() []StructFunction { - fns := make([]StructFunction, 0, len(t.Fields)) - for _, f := range t.Fields { - if f.Function != nil { - fns = append(fns, *f.Function) - } - } - return fns -} - -type StructField struct { - Variable *StructVariable `parser:" ( @@ " json:",omitempty"` - Function *StructFunction `parser:" | @@ ) ';' " json:",omitempty"` -} - -type StructVariable struct { - Type PrimativeType `parser:" @@ " json:",omitempty"` - Name string `parser:" @Ident " json:",omitempty"` -} - -type FunctionType struct { - ReturnType PrimativeType `parser:" @@ " json:",omitempty"` - Name string `parser:" '(' '*' @Ident ')' " json:",omitempty"` - Arguments []Argument `parser:" '(' ( @@ ( ',' @@ )* )? ')' " json:",omitempty"` -} - -func (t FunctionType) CStyleString() string { - sb := strings.Builder{} - sb.WriteString(t.ReturnType.CStyleString()) - sb.WriteString("(*") - sb.WriteString(t.Name) - sb.WriteString(")(") - for i := 0; i < len(t.Arguments); i++ { - if i > 0 { - sb.WriteString(",") - } - sb.WriteString(t.Arguments[i].Type.Primative.CStyleString()) - } - sb.WriteString(")") - return sb.String() -} - -type PrimativeType struct { - IsConst bool `parser:" @'const'? " json:",omitempty"` - Name string `parser:" @Ident " json:",omitempty"` - IsPointer bool `parser:" @'*'? " json:",omitempty"` -} - -func (t PrimativeType) CStyleString() string { - sb := strings.Builder{} - - if t.IsConst { - sb.WriteString("const ") - } - - sb.WriteString(t.Name) - - if t.IsPointer { - sb.WriteString(" * ") - } - - return sb.String() -} - -type Type struct { - Function *FunctionType `parser:" ( @@ " json:",omitempty"` - Primative *PrimativeType `parser:" | @@ ) " json:",omitempty"` -} - -func (t Type) CStyleString() string { - if t.Primative != nil { - return t.Primative.CStyleString() - } else if t.Function != nil { - return t.Function.CStyleString() - } - - panic("unhandled type") -} - -type StructFunction struct { - ReturnType PrimativeType `parser:" @@ " json:",omitempty"` - Name string `parser:" '(' '*' @Ident ')' " json:",omitempty"` - Arguments []Argument `parser:" '(' @@ ( ',' @@ )* ')' " json:",omitempty"` - Comment string `parser:" @Comment? " json:",omitempty"` -} - -// void (*p_func)(void *, uint32_t) -type Argument struct { - Type Type `parser:" @@ " json:",omitempty"` - Name string `parser:" ( @Ident | '(' '*' @Ident ')' )? " json:",omitempty"` -} - -func (a Argument) IsPinnable() bool { - switch { - case a.Type.Function != nil: - return false - case a.Type.Primative != nil: - switch a.Type.Primative.Name { - case "char": - return false - default: - return a.Type.Primative.IsPointer - } - } - - return false -} -func (a Argument) CStylePtrString(i int) string { - if a.Type.Function != nil { - return a.Type.CStyleString() - } - - name := a.ResolvedName(i) - typeName := a.Type.CStyleString() - typeName = typeName + "*" - return fmt.Sprintf("%s %s", typeName, name) -} -func (a Argument) ResolvedPtrName(i int) string { - if a.Type.Function != nil && a.Type.Function.Name != "" { - return a.Type.Function.Name - } - retStr := "" - if a.Name != "" { - retStr = a.Name - } else { - retStr = fmt.Sprintf("arg_%d", i) - } - retStr = "*" + retStr - return retStr -} - -func (a Argument) CStyleString(i int) string { - if a.Type.Function != nil { - return a.Type.CStyleString() - } - - name := a.ResolvedName(i) - - return fmt.Sprintf("%s %s", a.Type.CStyleString(), name) -} - -func (a Argument) ResolvedName(i int) string { - if a.Type.Function != nil && a.Type.Function.Name != "" { - return a.Type.Function.Name - } - - if a.Name != "" { - return a.Name - } - return fmt.Sprintf("arg_%d", i) -} - -func ParseCString(s string) (CHeaderFileAST, error) { - var headerFileLexer = MustStateful(Rules{ - "Root": { - {`Typedef`, `typedef`, nil}, - {`Struct`, `struct`, nil}, - {`{`, `{`, nil}, - {`}`, `}`, nil}, - {`;`, `;`, nil}, - {`,`, `,`, nil}, - {`"`, `"`, nil}, - {`(`, `\(`, nil}, - {`)`, `\)`, nil}, - {`*`, `\*`, nil}, - {`=`, `=`, nil}, - {`Const`, `const`, nil}, - {`Ident`, `[a-zA-Z_][a-zA-Z0-9_]*`, nil}, - {`Int`, `[+-]?\d+`, nil}, - {`Comment`, `[ \t\r\n]*(\/\/[^\n]*)|(\/\*(.|[\r\n])*?\*\/)[ \t\r\n]*`, nil}, - {`Whitespace`, `[ \t\r\n]+`, nil}, - }, - }) - - parser, err := participle.Build[CHeaderFileAST]( - participle.Lexer(headerFileLexer), - participle.UseLookahead(20), - participle.Elide("Whitespace", "Comment"), - ) - - if err != nil { - return CHeaderFileAST{}, err - } - - ast, err := parser.ParseString("", s) - - if err != nil { - return CHeaderFileAST{}, err - } - - return *ast, nil -} +package clang + +import ( + "fmt" + "sort" + "strings" + + "github.com/alecthomas/participle/v2" + . "github.com/alecthomas/participle/v2/lexer" + "golang.org/x/exp/slices" +) + +// KnownManagerNamesProvider is a callback function to get the list of known manager names. +// This callback is set by the common package during initialization to avoid circular imports. +var KnownManagerNamesProvider func() []string + +var ( + legacyGDExtentionInterfaceFunctionNames []string = []string{ + "GDExtensionInterfaceFunctionPtr", + } +) + +type CHeaderFileAST struct { + Expr []Expr `parser:" @@* " json:",omitempty"` +} + +func (a CHeaderFileAST) FindVariantEnumType() *TypedefEnum { + for _, e := range a.Expr { + if e.Enum != nil && e.Enum.Name != nil && *e.Enum.Name == "GDExtensionVariantType" { + return e.Enum + } + } + return nil +} + +func (a CHeaderFileAST) CollectFunctions() []TypedefFunction { + // there's a duplicate of GDExtensionClassGetPropertyList + distinct := map[string]struct{}{} + fns := make([]TypedefFunction, 0, len(a.Expr)) + + for _, e := range a.Expr { + if e.Function != nil { + if _, ok := distinct[e.Function.Name]; !ok { + fns = append(fns, *e.Function) + distinct[e.Function.Name] = struct{}{} + } + } + } + return fns +} + +func (a CHeaderFileAST) CollectFunctionsOfClass(className string) []TypedefFunction { + allFns := a.CollectFunctions() + + fns := make([]TypedefFunction, 0, len(allFns)) + + prefix := "GDExtensionSpx" + className + for _, fn := range allFns { + if strings.HasPrefix(fn.Name, prefix) && + !strings.HasPrefix(fn.Name, "GDExtensionSpxCallback") && + !strings.HasPrefix(fn.Name, "GDExtensionSpxString") && + !strings.HasPrefix(fn.Name, "GDExtensionSpxVariant") && + !strings.HasPrefix(fn.Name, "GDExtensionSpxGlobal") && + !slices.Contains(legacyGDExtentionInterfaceFunctionNames, fn.Name) { + fns = append(fns, fn) + } + } + + return fns +} + +func (a CHeaderFileAST) CollectGDExtensionManagerFunctions(managerName string) []TypedefFunction { + allFns := a.CollectFunctions() + + fns := make([]TypedefFunction, 0, len(allFns)) + + // Get the list of known manager names + var knownManagers []string + if KnownManagerNamesProvider != nil { + knownManagers = KnownManagerNamesProvider() + } + + for _, fn := range allFns { + if strings.HasPrefix(fn.Name, "GDExtensionSpx") && + !strings.HasPrefix(fn.Name, "GDExtensionSpxCallback") && + !slices.Contains(legacyGDExtentionInterfaceFunctionNames, fn.Name) { + // Exact match: use getManagerNameForFunc to determine which manager the function belongs to + actualManager := getManagerNameForFunc(fn.Name, knownManagers) + if actualManager == managerName { + fns = append(fns, fn) + } + } + } + + return fns +} + +// getManagerNameForFunc extracts the manager name from the function name. +func getManagerNameForFunc(funcName string, knownManagers []string) string { + prefix := "GDExtensionSpx" + str := funcName[len(prefix):] + lowerStr := strings.ToLower(str) + + // Prefer matching against known manager names (sorted by length descending, prioritizing longer names) + if len(knownManagers) > 0 { + // Create a copy sorted by length in descending order + sortedNames := make([]string, len(knownManagers)) + copy(sortedNames, knownManagers) + sort.Slice(sortedNames, func(i, j int) bool { + return len(sortedNames[i]) > len(sortedNames[j]) + }) + + for _, mgr := range sortedNames { + if strings.HasPrefix(lowerStr, mgr) { + return mgr + } + } + } + + // Fall back to the original logic (stop at uppercase letter) + chs := []rune{} + chs = append(chs, rune(str[0]), rune(str[1])) + for _, ch := range str[2:] { + if ch >= 'A' && ch <= 'Z' { + break + } + chs = append(chs, ch) + } + return strings.ToLower(string(chs)) +} + +func (a CHeaderFileAST) CollectGDExtensionInterfaceFunctions() []TypedefFunction { + allFns := a.CollectFunctions() + + fns := make([]TypedefFunction, 0, len(allFns)) + + for _, fn := range allFns { + if strings.HasPrefix(fn.Name, "GDExtensionSpx") && + !strings.HasPrefix(fn.Name, "GDExtensionSpxCallback") && + !strings.HasPrefix(fn.Name, "GDExtensionSpxString") && + !strings.HasPrefix(fn.Name, "GDExtensionSpxVariant") && + !strings.HasPrefix(fn.Name, "GDExtensionSpxGlobal") && + !slices.Contains(legacyGDExtentionInterfaceFunctionNames, fn.Name) { + fns = append(fns, fn) + } + } + + return fns +} + +func (a CHeaderFileAST) CollectGDExtensionISpriteFunctions() []TypedefFunction { + allFns := a.CollectFunctions() + + fns := make([]TypedefFunction, 0, len(allFns)) + + for _, fn := range allFns { + if strings.HasPrefix(fn.Name, "GDExtensionSpxSprite") && + !slices.Contains(legacyGDExtentionInterfaceFunctionNames, fn.Name) { + fns = append(fns, fn) + } + } + + return fns +} +func (a CHeaderFileAST) CollectGDExtensionICallbackFunctions() []TypedefFunction { + allFns := a.CollectFunctions() + + fns := make([]TypedefFunction, 0, len(allFns)) + + for _, fn := range allFns { + if strings.HasPrefix(fn.Name, "GDExtensionSpxCallback") && + !slices.Contains(legacyGDExtentionInterfaceFunctionNames, fn.Name) { + fns = append(fns, fn) + } + } + return fns +} + +func (a CHeaderFileAST) CollectNonGDExtensionInterfaceFunctions() []TypedefFunction { + allFns := a.CollectFunctions() + + fns := make([]TypedefFunction, 0, len(allFns)) + + for _, fn := range allFns { + if !strings.HasPrefix(fn.Name, "GDExtensionSpx") { + fns = append(fns, fn) + } + } + + return fns +} + +func (a CHeaderFileAST) CollectStructs() []TypedefStruct { + structs := make([]TypedefStruct, 0, len(a.Expr)) + for _, e := range a.Expr { + if e.Struct != nil { + structs = append(structs, *e.Struct) + } + } + return structs +} + +func (a CHeaderFileAST) CollectAliases() []TypedefAlias { + aliases := make([]TypedefAlias, 0, len(a.Expr)) + for _, e := range a.Expr { + if e.Alias != nil { + aliases = append(aliases, *e.Alias) + } + } + return aliases +} + +func (a CHeaderFileAST) CollectEnums() []TypedefEnum { + enums := make([]TypedefEnum, 0, len(a.Expr)) + for _, e := range a.Expr { + if e.Enum != nil { + enums = append(enums, *e.Enum) + } + } + return enums +} + +type Expr struct { + Comment string `parser:" @Comment " json:",omitempty"` + Enum *TypedefEnum `parser:" | @@ ';' " json:",omitempty"` + Alias *TypedefAlias `parser:" | @@ ';' " json:",omitempty"` + Function *TypedefFunction `parser:" | @@ ';' " json:",omitempty"` + Struct *TypedefStruct `parser:" | @@ ';' " json:",omitempty"` +} + +type TypedefEnum struct { + Values []EnumValue `parser:" 'typedef' 'enum' '{' ( @@ ( ',' Comment? @@ Comment? )* ','? Comment? )? '}' " json:",omitempty"` + Name *string `parser:" @Ident " json:",omitempty"` +} + +type EnumValue struct { + Name string `parser:" @Ident " json:",omitempty"` + IntValue *int `parser:" ( '=' ( @Int " json:",omitempty"` + ConstRefValue *string `parser:" | @Ident ) )? " json:",omitempty"` +} + +type TypedefAlias struct { + Type PrimativeType `parser:" 'typedef' @@ " json:",omitempty"` + Name string `parser:" @Ident " json:",omitempty"` +} + +type TypedefFunction struct { + ReturnType PrimativeType `parser:" 'typedef' @@ " json:",omitempty"` + Name string `parser:" '(' '*' @Ident ')' " json:",omitempty"` + Arguments []Argument `parser:" '(' ( @@ ( ',' @@ )* )? ')' " json:",omitempty"` +} + +type TypedefStruct struct { + Fields []StructField `parser:" 'typedef' 'struct' '{' @@* '}' " json:",omitempty"` + Name string `parser:" @Ident " json:",omitempty"` +} + +func (t TypedefStruct) CollectFunctions() []StructFunction { + fns := make([]StructFunction, 0, len(t.Fields)) + for _, f := range t.Fields { + if f.Function != nil { + fns = append(fns, *f.Function) + } + } + return fns +} + +type StructField struct { + Variable *StructVariable `parser:" ( @@ " json:",omitempty"` + Function *StructFunction `parser:" | @@ ) ';' " json:",omitempty"` +} + +type StructVariable struct { + Type PrimativeType `parser:" @@ " json:",omitempty"` + Name string `parser:" @Ident " json:",omitempty"` +} + +type FunctionType struct { + ReturnType PrimativeType `parser:" @@ " json:",omitempty"` + Name string `parser:" '(' '*' @Ident ')' " json:",omitempty"` + Arguments []Argument `parser:" '(' ( @@ ( ',' @@ )* )? ')' " json:",omitempty"` +} + +func (t FunctionType) CStyleString() string { + sb := strings.Builder{} + sb.WriteString(t.ReturnType.CStyleString()) + sb.WriteString("(*") + sb.WriteString(t.Name) + sb.WriteString(")(") + for i := 0; i < len(t.Arguments); i++ { + if i > 0 { + sb.WriteString(",") + } + sb.WriteString(t.Arguments[i].Type.Primative.CStyleString()) + } + sb.WriteString(")") + return sb.String() +} + +type PrimativeType struct { + IsConst bool `parser:" @'const'? " json:",omitempty"` + Name string `parser:" @Ident " json:",omitempty"` + IsPointer bool `parser:" @'*'? " json:",omitempty"` +} + +func (t PrimativeType) CStyleString() string { + sb := strings.Builder{} + + if t.IsConst { + sb.WriteString("const ") + } + + sb.WriteString(t.Name) + + if t.IsPointer { + sb.WriteString(" * ") + } + + return sb.String() +} + +type Type struct { + Function *FunctionType `parser:" ( @@ " json:",omitempty"` + Primative *PrimativeType `parser:" | @@ ) " json:",omitempty"` +} + +func (t Type) CStyleString() string { + if t.Primative != nil { + return t.Primative.CStyleString() + } else if t.Function != nil { + return t.Function.CStyleString() + } + + panic("unhandled type") +} + +type StructFunction struct { + ReturnType PrimativeType `parser:" @@ " json:",omitempty"` + Name string `parser:" '(' '*' @Ident ')' " json:",omitempty"` + Arguments []Argument `parser:" '(' @@ ( ',' @@ )* ')' " json:",omitempty"` + Comment string `parser:" @Comment? " json:",omitempty"` +} + +// void (*p_func)(void *, uint32_t) +type Argument struct { + Type Type `parser:" @@ " json:",omitempty"` + Name string `parser:" ( @Ident | '(' '*' @Ident ')' )? " json:",omitempty"` +} + +func (a Argument) IsPinnable() bool { + switch { + case a.Type.Function != nil: + return false + case a.Type.Primative != nil: + switch a.Type.Primative.Name { + case "char": + return false + default: + return a.Type.Primative.IsPointer + } + } + + return false +} +func (a Argument) CStylePtrString(i int) string { + if a.Type.Function != nil { + return a.Type.CStyleString() + } + + name := a.ResolvedName(i) + typeName := a.Type.CStyleString() + typeName = typeName + "*" + return fmt.Sprintf("%s %s", typeName, name) +} +func (a Argument) ResolvedPtrName(i int) string { + if a.Type.Function != nil && a.Type.Function.Name != "" { + return a.Type.Function.Name + } + retStr := "" + if a.Name != "" { + retStr = a.Name + } else { + retStr = fmt.Sprintf("arg_%d", i) + } + retStr = "*" + retStr + return retStr +} + +func (a Argument) CStyleString(i int) string { + if a.Type.Function != nil { + return a.Type.CStyleString() + } + + name := a.ResolvedName(i) + + return fmt.Sprintf("%s %s", a.Type.CStyleString(), name) +} + +func (a Argument) ResolvedName(i int) string { + if a.Type.Function != nil && a.Type.Function.Name != "" { + return a.Type.Function.Name + } + + if a.Name != "" { + return a.Name + } + return fmt.Sprintf("arg_%d", i) +} + +func ParseCString(s string) (CHeaderFileAST, error) { + var headerFileLexer = MustStateful(Rules{ + "Root": { + {`Typedef`, `typedef`, nil}, + {`Struct`, `struct`, nil}, + {`{`, `{`, nil}, + {`}`, `}`, nil}, + {`;`, `;`, nil}, + {`,`, `,`, nil}, + {`"`, `"`, nil}, + {`(`, `\(`, nil}, + {`)`, `\)`, nil}, + {`*`, `\*`, nil}, + {`=`, `=`, nil}, + {`Const`, `const`, nil}, + {`Ident`, `[a-zA-Z_][a-zA-Z0-9_]*`, nil}, + {`Int`, `[+-]?\d+`, nil}, + {`Comment`, `[ \t\r\n]*(\/\/[^\n]*)|(\/\*(.|[\r\n])*?\*\/)[ \t\r\n]*`, nil}, + {`Whitespace`, `[ \t\r\n]+`, nil}, + }, + }) + + parser, err := participle.Build[CHeaderFileAST]( + participle.Lexer(headerFileLexer), + participle.UseLookahead(20), + participle.Elide("Whitespace", "Comment"), + ) + + if err != nil { + return CHeaderFileAST{}, err + } + + ast, err := parser.ParseString("", s) + + if err != nil { + return CHeaderFileAST{}, err + } + + return *ast, nil +} diff --git a/pkg/gdspx/cmd/codegen/generate/common/funcs.go b/pkg/gdspx/cmd/codegen/generate/common/funcs.go index 081b5a47..44b262dd 100644 --- a/pkg/gdspx/cmd/codegen/generate/common/funcs.go +++ b/pkg/gdspx/cmd/codegen/generate/common/funcs.go @@ -1,499 +1,543 @@ -package common - -import ( - "bytes" - "fmt" - "os" - "os/exec" - "path/filepath" - "sort" - "strconv" - "strings" - "text/template" - "unicode" - - "github.com/goplus/spx/v2/pkg/gdspx/cmd/codegen/gdextensionparser/clang" - - "github.com/iancoleman/strcase" -) - -var ( - RelDir = "../../internal/ffi" -) - -func Add(a int, b int) int { - return a + b -} - -func Sub(a int, b int) int { - return a - b -} -func GoArgumentType(t clang.PrimativeType, name string) string { - n := strings.TrimSpace(t.Name) - - hasReturnPrefix := strings.HasPrefix(name, "r_") - - switch n { - case "void": - if t.IsPointer { - return "unsafe.Pointer" - } - return "" - case "float", "real_t": - if t.IsPointer { - panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) - } - return "float32" - case "size_t": - if t.IsPointer { - panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) - } - return "uint64" - case "char": - if t.IsPointer { - if hasReturnPrefix { - return "*Char" - } else { - return "string" - } - } - panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) - case "int32_t": - if t.IsPointer { - panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) - } - return "int32" - case "char16_t": - if t.IsPointer { - return "*Char16T" - } - panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) - case "char32_t": - if t.IsPointer { - return "*Char32T" - } - return "Char32T" - case "wchar_t": - if t.IsPointer { - return "*WcharT" - } - panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) - case "uint8_t": - if t.IsPointer { - return "*Uint8T" - } - return "Uint8T" - case "int": - if t.IsPointer { - return "*int32" - } - return "int32" - case "uint32_t": - if t.IsPointer { - return "*Uint32T" - } - return "Uint32T" - case "uint64_t": - if t.IsPointer { - return "*Uint64T" - } - return "Uint64T" - case "GdArray": - if t.IsPointer { - return "*GdArray" - } - return "GdArray" - default: - if t.IsPointer { - return fmt.Sprintf("*%s", n) - } - return n - } -} - -func GoReturnType(t clang.PrimativeType) string { - n := strings.TrimSpace(t.Name) - - switch n { - case "float", "real_t": - if t.IsPointer { - return "*float32" - } else { - return "float32" - } - case "double": - if t.IsPointer { - return "*float32" - } else { - return "float32" - } - case "int32_t": - if t.IsPointer { - return "*int32" - } else { - return "int32" - } - case "int64_t": - if t.IsPointer { - return "*int64" - } else { - return "int64" - } - case "uint64_t": - if t.IsPointer { - return "*uint64" - } else { - return "uint64" - } - case "uint8_t": - if t.IsPointer { - return "*uint8" - } else { - return "uint8" - } - case "uint32_t": - if t.IsPointer { - return "*uint32" - } else { - return "uint32" - } - case "char16_t": - if t.IsPointer { - return "*Char16T" - } else { - return "Char16T" - } - case "char32_t": - if t.IsPointer { - return "*Char32T" - } else { - return "Char32T" - } - case "void": - if t.IsPointer { - return "unsafe.Pointer" - } else { - return "" - } - case "GdArray": - if t.IsPointer { - return "*GdArray" - } else { - return "GdArray" - } - default: - if t.IsPointer { - return fmt.Sprintf("*%s", n) - } else { - return n - } - } -} - -func GoEnumValue(v clang.EnumValue, index int) string { - if v.IntValue != nil { - return strconv.Itoa(*v.IntValue) - } else if v.ConstRefValue != nil { - return *v.ConstRefValue - } else if index == 0 { - return "iota" - } else { - return "" - } -} - -func CgoCastArgument(a clang.Argument, defaultName string) string { - if a.Type.Primative != nil { - t := a.Type.Primative - - n := strings.TrimSpace(t.Name) - - var goVarName string - - if a.Name != "" { - goVarName = a.Name - } else { - goVarName = defaultName - } - - hasReturnPrefix := strings.HasPrefix(a.Name, "r_") - - switch n { - case "void": - if t.IsPointer { - return fmt.Sprintf("unsafe.Pointer(%s)", goVarName) - } else { - panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) - } - case "char": - if t.IsPointer { - if hasReturnPrefix { - return fmt.Sprintf("(*C.char)(%s)", goVarName) - } else { - return fmt.Sprintf("C.CString(%s)", goVarName) - } - } else { - panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) - } - case "GdArray": - if t.IsPointer { - return fmt.Sprintf("(*C.GdArray)(%s)", goVarName) - } else { - return fmt.Sprintf("(C.GdArray)(%s)", goVarName) - } - default: - if t.IsPointer { - return fmt.Sprintf("(*C.%s)(%s)", n, goVarName) - } else { - return fmt.Sprintf("(C.%s)(%s)", n, goVarName) - } - } - } else if a.Type.Function != nil { - return fmt.Sprintf("(*[0]byte)(%s)", a.Type.Function.Name) - } - - panic("unhandled type") -} - -func CgoCleanUpArgument(a clang.Argument, index int) string { - if a.Type.Primative != nil { - t := a.Type.Primative - n := strings.TrimSpace(t.Name) - - hasReturnPrefix := strings.HasPrefix(a.Name, "r_") - - switch n { - case "char": - if t.IsPointer { - if !hasReturnPrefix { - return fmt.Sprintf("C.free(unsafe.Pointer(arg%d))", index) - } - return "" - - } else { - panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) - } - default: - return "" - } - } else if a.Type.Function != nil { - return "" - } - - panic("unhandled type") -} - -func CgoCastReturnType(t clang.PrimativeType, argName string) string { - n := strings.TrimSpace(t.Name) - - switch n { - case "int32_t": - if t.IsPointer { - return fmt.Sprintf("(*int32)(%s)", argName) - } else { - return fmt.Sprintf("int32(%s)", argName) - } - case "uint32_t": - if t.IsPointer { - return fmt.Sprintf("(*uint32)(%s)", argName) - } else { - return fmt.Sprintf("uint32(%s)", argName) - } - case "int64_t": - if t.IsPointer { - return fmt.Sprintf("(*int64)(%s)", argName) - } else { - return fmt.Sprintf("int64(%s)", argName) - } - case "uint64_t": - if t.IsPointer { - return fmt.Sprintf("(*uint64)(%s)", argName) - } else { - return fmt.Sprintf("uint64(%s)", argName) - } - case "uint8_t": - if t.IsPointer { - return fmt.Sprintf("(*uint8)(%s)", argName) - } else { - return fmt.Sprintf("uint8(%s)", argName) - } - case "char16_t": - if t.IsPointer { - return fmt.Sprintf("(*Char16T)(%s)", argName) - } else { - panic(fmt.Sprintf("unhandled type: %s, %v", t.CStyleString(), t)) - } - case "char32_t": - if t.IsPointer { - return fmt.Sprintf("(*Char32T)(%s)", argName) - } else { - panic(fmt.Sprintf("unhandled type: %s, %v", t.CStyleString(), t)) - } - case "void": - if t.IsPointer { - return fmt.Sprintf("unsafe.Pointer(%s)", argName) - } else { - panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) - } - case "float", "real_t": - if t.IsPointer { - return fmt.Sprintf("(*float32)(%s)", argName) - } else { - return fmt.Sprintf("float32(%s)", argName) - } - case "double": - if t.IsPointer { - return fmt.Sprintf("(*float32)(%s)", argName) - } else { - return fmt.Sprintf("float32(%s)", argName) - } - case "GdArray": - if t.IsPointer { - return fmt.Sprintf("(*GdArray)(%s)", argName) - } else { - return fmt.Sprintf("GdArray(%s)", argName) - } - default: - if t.IsPointer { - return fmt.Sprintf("(*%s)(%s)", n, argName) - } else { - return fmt.Sprintf("(%s)(%s)", n, argName) - } - } -} - -func GdiVariableName(typeName string) string { - ret := LoadProcAddressName(typeName) - ret = strcase.ToCamel(ret) - ret = strings.Replace(ret, "C32Str", "C32str", 1) - ret = strings.Replace(ret, "Placeholder", "PlaceHolder", 1) - return ret -} - -func GetManagerFuncName(typeName string) string { - typeName = strings.Replace(typeName, "GDExtensionSpx", "", 1) - return strings.Replace(LoadProcAddressName(typeName), "spx", "Call", 1) -} - -func LoadProcAddressName(typeName string) string { - ret := strcase.ToSnake(typeName) - ret = strings.Replace(ret, "gd_extension_", "", 1) - ret = strings.Replace(ret, "_latin_1_", "_latin1_", 1) - ret = strings.Replace(ret, "_utf_8_", "_utf8_", 1) - ret = strings.Replace(ret, "_utf_16_", "_utf16_", 1) - ret = strings.Replace(ret, "_utf_32_", "_utf32_", 1) - ret = strings.Replace(ret, "_c_32_str", "_c32str", 1) - ret = strings.Replace(ret, "_float_32_", "_float32_", 1) - ret = strings.Replace(ret, "_float_64_", "_float32_", 1) - ret = strings.Replace(ret, "_int_16_", "_int16_", 1) - ret = strings.Replace(ret, "_int_32_", "_int32_", 1) - ret = strings.Replace(ret, "_int_64_", "_int64_", 1) - ret = strings.Replace(ret, "_vector_2_", "_vector2_", 1) - ret = strings.Replace(ret, "_vector_3_", "_vector3_", 1) - ret = strings.Replace(ret, "_2", "2", 1) - ret = strings.Replace(ret, "_3", "3", 1) - ret = strings.Replace(ret, "_4", "4", 1) - ret = strings.Replace(ret, "place_holder", "placeholder", 1) - return ret -} - -func TrimPrefix(typeName, prefix string) string { - prefixLen := len(prefix) - if strings.HasPrefix(typeName, prefix) { - return typeName[prefixLen:] - } - return typeName -} - -var ( - managerSet = map[string]bool{} - cppType2Go = map[string]string{} -) - -type ManagerData struct { - Ast clang.CHeaderFileAST - Mangers []string -} - -func GetManagerName(str string) string { - prefix := "GDExtensionSpx" - str = str[len(prefix):] - chs := []rune{} - chs = append(chs, rune(str[0]), rune(str[1])) - for _, ch := range str[2:] { - if unicode.IsUpper(rune(ch)) { - break - } - chs = append(chs, rune(ch)) - } - result := strings.ToLower(string(chs)) - return result -} - -func IsManagerMethod(function *clang.TypedefFunction) bool { - return managerSet[GetManagerName(function.Name)] -} -func GetFuncParamTypeString(typeName string) string { - return cppType2Go[typeName] -} - -func GetManagers(ast clang.CHeaderFileAST) []string { - items := []string{} - for _, item := range ast.CollectGDExtensionInterfaceFunctions() { - items = append(items, item.Name) - } - managerSet = make(map[string]bool) - managers := []string{} - for _, str := range items { - managerSet[GetManagerName(str)] = true - } - delete(managerSet, "") - delete(managerSet, "string") - delete(managerSet, "variant") - delete(managerSet, "global") - for item := range managerSet { - managers = append(managers, item) - } - sort.Strings(managers) - cppType2Go = map[string]string{ - "GdInt": "int64", - "GdFloat": "float64", - "GdObj": "Object", - "GdVec2": "Vec2", - "GdVec3": "Vec3", - "GdVec4": "Vec4", - "GdRect2": "Rect2", - "GdString": "string", - "GdBool": "bool", - "GdColor": "Color", - "GdArray": "Array", - } - return managers -} -func GenerateFile(funcs template.FuncMap, name string, text string, data any, dstPath string) error { - tmpl, err := template.New(name). - Funcs(funcs). - Parse(text) - if err != nil { - return err - } - - var b bytes.Buffer - err = tmpl.Execute(&b, data) - if err != nil { - return err - } - - dir := filepath.Dir(dstPath) - os.MkdirAll(dir, os.ModePerm) - f, err := os.Create(dstPath) - if err != nil { - return err - } - f.Write(b.Bytes()) - f.Close() - exec.Command("go", "fmt", dstPath).Run() - exec.Command("goimports", "-w", dstPath).Run() - println("generate file: " + dstPath) - return nil -} +package common + +import ( + "bytes" + "fmt" + "os" + "os/exec" + "path/filepath" + "sort" + "strconv" + "strings" + "text/template" + "unicode" + + "github.com/goplus/spx/v2/pkg/gdspx/cmd/codegen/gdextensionparser/clang" + + "github.com/iancoleman/strcase" +) + +var ( + RelDir = "../../internal/ffi" +) + +func init() { + // Set callback function so the clang package can get the list of known manager names + clang.KnownManagerNamesProvider = func() []string { + return KnownManagerNames + } +} + +func Add(a int, b int) int { + return a + b +} + +func Sub(a int, b int) int { + return a - b +} +func GoArgumentType(t clang.PrimativeType, name string) string { + n := strings.TrimSpace(t.Name) + + hasReturnPrefix := strings.HasPrefix(name, "r_") + + switch n { + case "void": + if t.IsPointer { + return "unsafe.Pointer" + } + return "" + case "float", "real_t": + if t.IsPointer { + panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) + } + return "float32" + case "size_t": + if t.IsPointer { + panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) + } + return "uint64" + case "char": + if t.IsPointer { + if hasReturnPrefix { + return "*Char" + } else { + return "string" + } + } + panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) + case "int32_t": + if t.IsPointer { + panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) + } + return "int32" + case "char16_t": + if t.IsPointer { + return "*Char16T" + } + panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) + case "char32_t": + if t.IsPointer { + return "*Char32T" + } + return "Char32T" + case "wchar_t": + if t.IsPointer { + return "*WcharT" + } + panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) + case "uint8_t": + if t.IsPointer { + return "*Uint8T" + } + return "Uint8T" + case "int": + if t.IsPointer { + return "*int32" + } + return "int32" + case "uint32_t": + if t.IsPointer { + return "*Uint32T" + } + return "Uint32T" + case "uint64_t": + if t.IsPointer { + return "*Uint64T" + } + return "Uint64T" + case "GdArray": + if t.IsPointer { + return "*GdArray" + } + return "GdArray" + default: + if t.IsPointer { + return fmt.Sprintf("*%s", n) + } + return n + } +} + +func GoReturnType(t clang.PrimativeType) string { + n := strings.TrimSpace(t.Name) + + switch n { + case "float", "real_t": + if t.IsPointer { + return "*float32" + } else { + return "float32" + } + case "double": + if t.IsPointer { + return "*float32" + } else { + return "float32" + } + case "int32_t": + if t.IsPointer { + return "*int32" + } else { + return "int32" + } + case "int64_t": + if t.IsPointer { + return "*int64" + } else { + return "int64" + } + case "uint64_t": + if t.IsPointer { + return "*uint64" + } else { + return "uint64" + } + case "uint8_t": + if t.IsPointer { + return "*uint8" + } else { + return "uint8" + } + case "uint32_t": + if t.IsPointer { + return "*uint32" + } else { + return "uint32" + } + case "char16_t": + if t.IsPointer { + return "*Char16T" + } else { + return "Char16T" + } + case "char32_t": + if t.IsPointer { + return "*Char32T" + } else { + return "Char32T" + } + case "void": + if t.IsPointer { + return "unsafe.Pointer" + } else { + return "" + } + case "GdArray": + if t.IsPointer { + return "*GdArray" + } else { + return "GdArray" + } + default: + if t.IsPointer { + return fmt.Sprintf("*%s", n) + } else { + return n + } + } +} + +func GoEnumValue(v clang.EnumValue, index int) string { + if v.IntValue != nil { + return strconv.Itoa(*v.IntValue) + } else if v.ConstRefValue != nil { + return *v.ConstRefValue + } else if index == 0 { + return "iota" + } else { + return "" + } +} + +func CgoCastArgument(a clang.Argument, defaultName string) string { + if a.Type.Primative != nil { + t := a.Type.Primative + + n := strings.TrimSpace(t.Name) + + var goVarName string + + if a.Name != "" { + goVarName = a.Name + } else { + goVarName = defaultName + } + + hasReturnPrefix := strings.HasPrefix(a.Name, "r_") + + switch n { + case "void": + if t.IsPointer { + return fmt.Sprintf("unsafe.Pointer(%s)", goVarName) + } else { + panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) + } + case "char": + if t.IsPointer { + if hasReturnPrefix { + return fmt.Sprintf("(*C.char)(%s)", goVarName) + } else { + return fmt.Sprintf("C.CString(%s)", goVarName) + } + } else { + panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) + } + case "GdArray": + if t.IsPointer { + return fmt.Sprintf("(*C.GdArray)(%s)", goVarName) + } else { + return fmt.Sprintf("(C.GdArray)(%s)", goVarName) + } + default: + if t.IsPointer { + return fmt.Sprintf("(*C.%s)(%s)", n, goVarName) + } else { + return fmt.Sprintf("(C.%s)(%s)", n, goVarName) + } + } + } else if a.Type.Function != nil { + return fmt.Sprintf("(*[0]byte)(%s)", a.Type.Function.Name) + } + + panic("unhandled type") +} + +func CgoCleanUpArgument(a clang.Argument, index int) string { + if a.Type.Primative != nil { + t := a.Type.Primative + n := strings.TrimSpace(t.Name) + + hasReturnPrefix := strings.HasPrefix(a.Name, "r_") + + switch n { + case "char": + if t.IsPointer { + if !hasReturnPrefix { + return fmt.Sprintf("C.free(unsafe.Pointer(arg%d))", index) + } + return "" + + } else { + panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) + } + default: + return "" + } + } else if a.Type.Function != nil { + return "" + } + + panic("unhandled type") +} + +func CgoCastReturnType(t clang.PrimativeType, argName string) string { + n := strings.TrimSpace(t.Name) + + switch n { + case "int32_t": + if t.IsPointer { + return fmt.Sprintf("(*int32)(%s)", argName) + } else { + return fmt.Sprintf("int32(%s)", argName) + } + case "uint32_t": + if t.IsPointer { + return fmt.Sprintf("(*uint32)(%s)", argName) + } else { + return fmt.Sprintf("uint32(%s)", argName) + } + case "int64_t": + if t.IsPointer { + return fmt.Sprintf("(*int64)(%s)", argName) + } else { + return fmt.Sprintf("int64(%s)", argName) + } + case "uint64_t": + if t.IsPointer { + return fmt.Sprintf("(*uint64)(%s)", argName) + } else { + return fmt.Sprintf("uint64(%s)", argName) + } + case "uint8_t": + if t.IsPointer { + return fmt.Sprintf("(*uint8)(%s)", argName) + } else { + return fmt.Sprintf("uint8(%s)", argName) + } + case "char16_t": + if t.IsPointer { + return fmt.Sprintf("(*Char16T)(%s)", argName) + } else { + panic(fmt.Sprintf("unhandled type: %s, %v", t.CStyleString(), t)) + } + case "char32_t": + if t.IsPointer { + return fmt.Sprintf("(*Char32T)(%s)", argName) + } else { + panic(fmt.Sprintf("unhandled type: %s, %v", t.CStyleString(), t)) + } + case "void": + if t.IsPointer { + return fmt.Sprintf("unsafe.Pointer(%s)", argName) + } else { + panic(fmt.Sprintf("unhandled type: %s", t.CStyleString())) + } + case "float", "real_t": + if t.IsPointer { + return fmt.Sprintf("(*float32)(%s)", argName) + } else { + return fmt.Sprintf("float32(%s)", argName) + } + case "double": + if t.IsPointer { + return fmt.Sprintf("(*float32)(%s)", argName) + } else { + return fmt.Sprintf("float32(%s)", argName) + } + case "GdArray": + if t.IsPointer { + return fmt.Sprintf("(*GdArray)(%s)", argName) + } else { + return fmt.Sprintf("GdArray(%s)", argName) + } + default: + if t.IsPointer { + return fmt.Sprintf("(*%s)(%s)", n, argName) + } else { + return fmt.Sprintf("(%s)(%s)", n, argName) + } + } +} + +func GdiVariableName(typeName string) string { + ret := LoadProcAddressName(typeName) + ret = strcase.ToCamel(ret) + ret = strings.Replace(ret, "C32Str", "C32str", 1) + ret = strings.Replace(ret, "Placeholder", "PlaceHolder", 1) + return ret +} + +func GetManagerFuncName(typeName string) string { + typeName = strings.Replace(typeName, "GDExtensionSpx", "", 1) + return strings.Replace(LoadProcAddressName(typeName), "spx", "Call", 1) +} + +func LoadProcAddressName(typeName string) string { + ret := strcase.ToSnake(typeName) + ret = strings.Replace(ret, "gd_extension_", "", 1) + ret = strings.Replace(ret, "_latin_1_", "_latin1_", 1) + ret = strings.Replace(ret, "_utf_8_", "_utf8_", 1) + ret = strings.Replace(ret, "_utf_16_", "_utf16_", 1) + ret = strings.Replace(ret, "_utf_32_", "_utf32_", 1) + ret = strings.Replace(ret, "_c_32_str", "_c32str", 1) + ret = strings.Replace(ret, "_float_32_", "_float32_", 1) + ret = strings.Replace(ret, "_float_64_", "_float32_", 1) + ret = strings.Replace(ret, "_int_16_", "_int16_", 1) + ret = strings.Replace(ret, "_int_32_", "_int32_", 1) + ret = strings.Replace(ret, "_int_64_", "_int64_", 1) + ret = strings.Replace(ret, "_vector_2_", "_vector2_", 1) + ret = strings.Replace(ret, "_vector_3_", "_vector3_", 1) + ret = strings.Replace(ret, "_2", "2", 1) + ret = strings.Replace(ret, "_3", "3", 1) + ret = strings.Replace(ret, "_4", "4", 1) + ret = strings.Replace(ret, "place_holder", "placeholder", 1) + return ret +} + +func TrimPrefix(typeName, prefix string) string { + prefixLen := len(prefix) + if strings.HasPrefix(typeName, prefix) { + return typeName[prefixLen:] + } + return typeName +} + +var ( + managerSet = map[string]bool{} + cppType2Go = map[string]string{} + KnownManagerNames = []string{} // List of correct manager names obtained from header parsing +) + +type ManagerData struct { + Ast clang.CHeaderFileAST + Mangers []string +} + +// RegisterManagerName registers a known manager name (obtained from header parsing). +func RegisterManagerName(name string) { + name = strings.ToLower(name) + // Avoid duplicate entries + for _, n := range KnownManagerNames { + if n == name { + return + } + } + KnownManagerNames = append(KnownManagerNames, name) +} + +// ClearKnownManagerNames clears the list of known manager names. +func ClearKnownManagerNames() { + KnownManagerNames = []string{} +} + +func GetManagerName(str string) string { + prefix := "GDExtensionSpx" + str = str[len(prefix):] + lowerStr := strings.ToLower(str) + + // Prefer matching against known manager names (sorted by length descending, prioritizing longer names) + if len(KnownManagerNames) > 0 { + // Create a copy sorted by length in descending order + sortedNames := make([]string, len(KnownManagerNames)) + copy(sortedNames, KnownManagerNames) + sort.Slice(sortedNames, func(i, j int) bool { + return len(sortedNames[i]) > len(sortedNames[j]) + }) + + for _, mgr := range sortedNames { + if strings.HasPrefix(lowerStr, mgr) { + return mgr + } + } + } + + // Fall back to the original logic (stop at uppercase letter) + chs := []rune{} + chs = append(chs, rune(str[0]), rune(str[1])) + for _, ch := range str[2:] { + if unicode.IsUpper(rune(ch)) { + break + } + chs = append(chs, rune(ch)) + } + result := strings.ToLower(string(chs)) + return result +} + +func IsManagerMethod(function *clang.TypedefFunction) bool { + return managerSet[GetManagerName(function.Name)] +} +func GetFuncParamTypeString(typeName string) string { + return cppType2Go[typeName] +} + +func GetManagers(ast clang.CHeaderFileAST) []string { + items := []string{} + for _, item := range ast.CollectGDExtensionInterfaceFunctions() { + items = append(items, item.Name) + } + managerSet = make(map[string]bool) + managers := []string{} + for _, str := range items { + managerSet[GetManagerName(str)] = true + } + delete(managerSet, "") + delete(managerSet, "string") + delete(managerSet, "variant") + delete(managerSet, "global") + for item := range managerSet { + managers = append(managers, item) + } + sort.Strings(managers) + cppType2Go = map[string]string{ + "GdInt": "int64", + "GdFloat": "float64", + "GdObj": "Object", + "GdVec2": "Vec2", + "GdVec3": "Vec3", + "GdVec4": "Vec4", + "GdRect2": "Rect2", + "GdString": "string", + "GdBool": "bool", + "GdColor": "Color", + "GdArray": "Array", + } + return managers +} +func GenerateFile(funcs template.FuncMap, name string, text string, data any, dstPath string) error { + tmpl, err := template.New(name). + Funcs(funcs). + Parse(text) + if err != nil { + return err + } + + var b bytes.Buffer + err = tmpl.Execute(&b, data) + if err != nil { + return err + } + + dir := filepath.Dir(dstPath) + os.MkdirAll(dir, os.ModePerm) + f, err := os.Create(dstPath) + if err != nil { + return err + } + f.Write(b.Bytes()) + f.Close() + exec.Command("go", "fmt", dstPath).Run() + exec.Command("goimports", "-w", dstPath).Run() + println("generate file: " + dstPath) + return nil +} diff --git a/pkg/gdspx/cmd/codegen/generate/gdext/header_generator.go b/pkg/gdspx/cmd/codegen/generate/gdext/header_generator.go index dcb6b120..ab66757c 100644 --- a/pkg/gdspx/cmd/codegen/generate/gdext/header_generator.go +++ b/pkg/gdspx/cmd/codegen/generate/gdext/header_generator.go @@ -9,6 +9,7 @@ import ( "regexp" "strings" + "github.com/goplus/spx/v2/pkg/gdspx/cmd/codegen/generate/common" "github.com/iancoleman/strcase" ) @@ -136,12 +137,20 @@ func generateManagerHeader(input string, rawFormat bool) string { var builder strings.Builder + // Clear the previous list of manager names + common.ClearKnownManagerNames() + for scanner.Scan() { line := scanner.Text() if strings.Contains(line, "class") { parts := strings.Fields(line) currentClassName = parts[1] currentClassName = currentClassName[:len(currentClassName)-3] + // Register manager name (remove "Spx" prefix) + if strings.HasPrefix(currentClassName, "Spx") { + managerName := currentClassName[3:] // Remove "Spx" prefix + common.RegisterManagerName(managerName) + } builder.WriteString("// " + currentClassName + "\n") continue } diff --git a/pkg/gdspx/internal/ffi/ffi.gen.go b/pkg/gdspx/internal/ffi/ffi.gen.go index 07e3ad83..9fe2604c 100644 --- a/pkg/gdspx/internal/ffi/ffi.gen.go +++ b/pkg/gdspx/internal/ffi/ffi.gen.go @@ -270,6 +270,11 @@ type GDExtensionInterface struct { SpxTilemapGetTileWithLayer GDExtensionSpxTilemapGetTileWithLayer SpxTilemapCloseDrawTiles GDExtensionSpxTilemapCloseDrawTiles SpxTilemapExitTilemapEditorMode GDExtensionSpxTilemapExitTilemapEditorMode + SpxTilemapparserLoadTilemap GDExtensionSpxTilemapparserLoadTilemap + SpxTilemapparserUnloadTilemap GDExtensionSpxTilemapparserUnloadTilemap + SpxTilemapparserDestroyAllTilemaps GDExtensionSpxTilemapparserDestroyAllTilemaps + SpxTilemapparserHasTilemap GDExtensionSpxTilemapparserHasTilemap + SpxTilemapparserGetTilemapLayerCount GDExtensionSpxTilemapparserGetTilemapLayerCount SpxUiBindNode GDExtensionSpxUiBindNode SpxUiCreateNode GDExtensionSpxUiCreateNode SpxUiCreateButton GDExtensionSpxUiCreateButton @@ -567,6 +572,11 @@ func (x *GDExtensionInterface) loadProcAddresses() { x.SpxTilemapGetTileWithLayer = (GDExtensionSpxTilemapGetTileWithLayer)(dlsymGD("spx_tilemap_get_tile_with_layer")) x.SpxTilemapCloseDrawTiles = (GDExtensionSpxTilemapCloseDrawTiles)(dlsymGD("spx_tilemap_close_draw_tiles")) x.SpxTilemapExitTilemapEditorMode = (GDExtensionSpxTilemapExitTilemapEditorMode)(dlsymGD("spx_tilemap_exit_tilemap_editor_mode")) + x.SpxTilemapparserLoadTilemap = (GDExtensionSpxTilemapparserLoadTilemap)(dlsymGD("spx_tilemapparser_load_tilemap")) + x.SpxTilemapparserUnloadTilemap = (GDExtensionSpxTilemapparserUnloadTilemap)(dlsymGD("spx_tilemapparser_unload_tilemap")) + x.SpxTilemapparserDestroyAllTilemaps = (GDExtensionSpxTilemapparserDestroyAllTilemaps)(dlsymGD("spx_tilemapparser_destroy_all_tilemaps")) + x.SpxTilemapparserHasTilemap = (GDExtensionSpxTilemapparserHasTilemap)(dlsymGD("spx_tilemapparser_has_tilemap")) + x.SpxTilemapparserGetTilemapLayerCount = (GDExtensionSpxTilemapparserGetTilemapLayerCount)(dlsymGD("spx_tilemapparser_get_tilemap_layer_count")) x.SpxUiBindNode = (GDExtensionSpxUiBindNode)(dlsymGD("spx_ui_bind_node")) x.SpxUiCreateNode = (GDExtensionSpxUiCreateNode)(dlsymGD("spx_ui_create_node")) x.SpxUiCreateButton = (GDExtensionSpxUiCreateButton)(dlsymGD("spx_ui_create_button")) diff --git a/pkg/gdspx/internal/ffi/ffi_wrapper.gen.go b/pkg/gdspx/internal/ffi/ffi_wrapper.gen.go index dc2eca23..79a0ec64 100644 --- a/pkg/gdspx/internal/ffi/ffi_wrapper.gen.go +++ b/pkg/gdspx/internal/ffi/ffi_wrapper.gen.go @@ -337,6 +337,11 @@ type GDExtensionSpxTilemapGetTile C.GDExtensionSpxTilemapGetTile type GDExtensionSpxTilemapGetTileWithLayer C.GDExtensionSpxTilemapGetTileWithLayer type GDExtensionSpxTilemapCloseDrawTiles C.GDExtensionSpxTilemapCloseDrawTiles type GDExtensionSpxTilemapExitTilemapEditorMode C.GDExtensionSpxTilemapExitTilemapEditorMode +type GDExtensionSpxTilemapparserLoadTilemap C.GDExtensionSpxTilemapparserLoadTilemap +type GDExtensionSpxTilemapparserUnloadTilemap C.GDExtensionSpxTilemapparserUnloadTilemap +type GDExtensionSpxTilemapparserDestroyAllTilemaps C.GDExtensionSpxTilemapparserDestroyAllTilemaps +type GDExtensionSpxTilemapparserHasTilemap C.GDExtensionSpxTilemapparserHasTilemap +type GDExtensionSpxTilemapparserGetTilemapLayerCount C.GDExtensionSpxTilemapparserGetTilemapLayerCount type GDExtensionSpxUiBindNode C.GDExtensionSpxUiBindNode type GDExtensionSpxUiCreateNode C.GDExtensionSpxUiCreateNode type GDExtensionSpxUiCreateButton C.GDExtensionSpxUiCreateButton @@ -2988,6 +2993,49 @@ func CallTilemapExitTilemapEditorMode() { C.cgo_callfn_GDExtensionSpxTilemapExitTilemapEditorMode(arg0) } +func CallTilemapparserLoadTilemap( + json_path GdString, +) { + arg0 := (C.GDExtensionSpxTilemapparserLoadTilemap)(api.SpxTilemapparserLoadTilemap) + arg1GdString := (C.GdString)(json_path) + + C.cgo_callfn_GDExtensionSpxTilemapparserLoadTilemap(arg0, arg1GdString) + +} +func CallTilemapparserUnloadTilemap( + name GdString, +) { + arg0 := (C.GDExtensionSpxTilemapparserUnloadTilemap)(api.SpxTilemapparserUnloadTilemap) + arg1GdString := (C.GdString)(name) + + C.cgo_callfn_GDExtensionSpxTilemapparserUnloadTilemap(arg0, arg1GdString) + +} +func CallTilemapparserDestroyAllTilemaps() { + arg0 := (C.GDExtensionSpxTilemapparserDestroyAllTilemaps)(api.SpxTilemapparserDestroyAllTilemaps) + + C.cgo_callfn_GDExtensionSpxTilemapparserDestroyAllTilemaps(arg0) +} +func CallTilemapparserHasTilemap( + name GdString, +) GdBool { + arg0 := (C.GDExtensionSpxTilemapparserHasTilemap)(api.SpxTilemapparserHasTilemap) + arg1GdString := (C.GdString)(name) + var ret_val C.GdBool + C.cgo_callfn_GDExtensionSpxTilemapparserHasTilemap(arg0, arg1GdString, &ret_val) + + return (GdBool)(ret_val) +} +func CallTilemapparserGetTilemapLayerCount( + name GdString, +) GdInt { + arg0 := (C.GDExtensionSpxTilemapparserGetTilemapLayerCount)(api.SpxTilemapparserGetTilemapLayerCount) + arg1GdString := (C.GdString)(name) + var ret_val C.GdInt + C.cgo_callfn_GDExtensionSpxTilemapparserGetTilemapLayerCount(arg0, arg1GdString, &ret_val) + + return (GdInt)(ret_val) +} func CallUiBindNode( obj GdObj, rel_path GdString, diff --git a/pkg/gdspx/internal/ffi/ffi_wrapper.gen.h b/pkg/gdspx/internal/ffi/ffi_wrapper.gen.h index 40829e12..3b051c7a 100644 --- a/pkg/gdspx/internal/ffi/ffi_wrapper.gen.h +++ b/pkg/gdspx/internal/ffi/ffi_wrapper.gen.h @@ -1,897 +1,912 @@ -#ifndef CGO_GODOT_GO_GDEXTENSION_WRAPPER_H -#define CGO_GODOT_GO_GDEXTENSION_WRAPPER_H - - -/*------------------------------------------------------------------------------ -// This code was generated by template ffi_wrapper.c.tmpl. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. Any updates should be done in -// "ffi_wrapper.h.tmpl" so they can be included in the generated -// code. -//----------------------------------------------------------------------------*/ -#include "gdextension_spx_codegen_header.h" - -/* Go cannot call C function pointers directly, so we must generate C wrapper code to call the functions. */void cgo_callfn_GDExtensionSpxAudioStopAll(const GDExtensionSpxAudioStopAll fn) { - fn(); -} -void cgo_callfn_GDExtensionSpxAudioCreateAudio(const GDExtensionSpxAudioCreateAudio fn, GdObj* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxAudioDestroyAudio(const GDExtensionSpxAudioDestroyAudio fn, GdObj obj) { - fn(obj); -} -void cgo_callfn_GDExtensionSpxAudioSetPitch(const GDExtensionSpxAudioSetPitch fn, GdObj obj, GdFloat pitch) { - fn(obj, pitch); -} -void cgo_callfn_GDExtensionSpxAudioGetPitch(const GDExtensionSpxAudioGetPitch fn, GdObj obj, GdFloat* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxAudioSetPan(const GDExtensionSpxAudioSetPan fn, GdObj obj, GdFloat pan) { - fn(obj, pan); -} -void cgo_callfn_GDExtensionSpxAudioGetPan(const GDExtensionSpxAudioGetPan fn, GdObj obj, GdFloat* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxAudioSetVolume(const GDExtensionSpxAudioSetVolume fn, GdObj obj, GdFloat volume) { - fn(obj, volume); -} -void cgo_callfn_GDExtensionSpxAudioGetVolume(const GDExtensionSpxAudioGetVolume fn, GdObj obj, GdFloat* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxAudioPlayWithAttenuation(const GDExtensionSpxAudioPlayWithAttenuation fn, GdObj obj, GdString path, GdObj owner_id, GdFloat attenuation, GdFloat max_distance, GdInt* ret_val) { - fn(obj, path, owner_id, attenuation, max_distance,ret_val); -} -void cgo_callfn_GDExtensionSpxAudioPlay(const GDExtensionSpxAudioPlay fn, GdObj obj, GdString path, GdInt* ret_val) { - fn(obj, path,ret_val); -} -void cgo_callfn_GDExtensionSpxAudioPause(const GDExtensionSpxAudioPause fn, GdInt aid) { - fn(aid); -} -void cgo_callfn_GDExtensionSpxAudioResume(const GDExtensionSpxAudioResume fn, GdInt aid) { - fn(aid); -} -void cgo_callfn_GDExtensionSpxAudioStop(const GDExtensionSpxAudioStop fn, GdInt aid) { - fn(aid); -} -void cgo_callfn_GDExtensionSpxAudioSetLoop(const GDExtensionSpxAudioSetLoop fn, GdInt aid, GdBool loop) { - fn(aid, loop); -} -void cgo_callfn_GDExtensionSpxAudioGetLoop(const GDExtensionSpxAudioGetLoop fn, GdInt aid, GdBool* ret_val) { - fn(aid,ret_val); -} -void cgo_callfn_GDExtensionSpxAudioGetTimer(const GDExtensionSpxAudioGetTimer fn, GdInt aid, GdFloat* ret_val) { - fn(aid,ret_val); -} -void cgo_callfn_GDExtensionSpxAudioSetTimer(const GDExtensionSpxAudioSetTimer fn, GdInt aid, GdFloat time) { - fn(aid, time); -} -void cgo_callfn_GDExtensionSpxAudioIsPlaying(const GDExtensionSpxAudioIsPlaying fn, GdInt aid, GdBool* ret_val) { - fn(aid,ret_val); -} -void cgo_callfn_GDExtensionSpxCameraGetCameraPosition(const GDExtensionSpxCameraGetCameraPosition fn, GdVec2* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxCameraSetCameraPosition(const GDExtensionSpxCameraSetCameraPosition fn, GdVec2 position) { - fn(position); -} -void cgo_callfn_GDExtensionSpxCameraGetCameraZoom(const GDExtensionSpxCameraGetCameraZoom fn, GdVec2* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxCameraSetCameraZoom(const GDExtensionSpxCameraSetCameraZoom fn, GdVec2 size) { - fn(size); -} -void cgo_callfn_GDExtensionSpxCameraGetViewportRect(const GDExtensionSpxCameraGetViewportRect fn, GdRect2* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxCameraGetGlobalCameraRect(const GDExtensionSpxCameraGetGlobalCameraRect fn, GdRect2* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxCameraSetCameraLimit(const GDExtensionSpxCameraSetCameraLimit fn, GdInt side, GdInt limit) { - fn(side, limit); -} -void cgo_callfn_GDExtensionSpxCameraSetCameraSmoothing(const GDExtensionSpxCameraSetCameraSmoothing fn, GdBool enabled) { - fn(enabled); -} -void cgo_callfn_GDExtensionSpxDebugDebugDrawCircle(const GDExtensionSpxDebugDebugDrawCircle fn, GdVec2 pos, GdFloat radius, GdColor color) { - fn(pos, radius, color); -} -void cgo_callfn_GDExtensionSpxDebugDebugDrawRect(const GDExtensionSpxDebugDebugDrawRect fn, GdVec2 pos, GdVec2 size, GdColor color) { - fn(pos, size, color); -} -void cgo_callfn_GDExtensionSpxDebugDebugDrawLine(const GDExtensionSpxDebugDebugDrawLine fn, GdVec2 from, GdVec2 to, GdColor color) { - fn(from, to, color); -} -void cgo_callfn_GDExtensionSpxExtRequestExit(const GDExtensionSpxExtRequestExit fn, GdInt exit_code) { - fn(exit_code); -} -void cgo_callfn_GDExtensionSpxExtRequestReset(const GDExtensionSpxExtRequestReset fn, GdInt exit_code) { - fn(exit_code); -} -void cgo_callfn_GDExtensionSpxExtRequestRestart(const GDExtensionSpxExtRequestRestart fn) { - fn(); -} -void cgo_callfn_GDExtensionSpxExtOnRuntimePanic(const GDExtensionSpxExtOnRuntimePanic fn, GdString msg) { - fn(msg); -} -void cgo_callfn_GDExtensionSpxExtPause(const GDExtensionSpxExtPause fn) { - fn(); -} -void cgo_callfn_GDExtensionSpxExtResume(const GDExtensionSpxExtResume fn) { - fn(); -} -void cgo_callfn_GDExtensionSpxExtIsPaused(const GDExtensionSpxExtIsPaused fn, GdBool* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxExtNextFrame(const GDExtensionSpxExtNextFrame fn) { - fn(); -} -void cgo_callfn_GDExtensionSpxExtSetLayerSorterMode(const GDExtensionSpxExtSetLayerSorterMode fn, GdInt mode) { - fn(mode); -} -void cgo_callfn_GDExtensionSpxInputGetGlobalMousePos(const GDExtensionSpxInputGetGlobalMousePos fn, GdVec2* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxInputGetKey(const GDExtensionSpxInputGetKey fn, GdInt key, GdBool* ret_val) { - fn(key,ret_val); -} -void cgo_callfn_GDExtensionSpxInputGetMouseState(const GDExtensionSpxInputGetMouseState fn, GdInt mouse_id, GdBool* ret_val) { - fn(mouse_id,ret_val); -} -void cgo_callfn_GDExtensionSpxInputGetKeyState(const GDExtensionSpxInputGetKeyState fn, GdInt key, GdInt* ret_val) { - fn(key,ret_val); -} -void cgo_callfn_GDExtensionSpxInputGetAxis(const GDExtensionSpxInputGetAxis fn, GdString neg_action, GdString pos_action, GdFloat* ret_val) { - fn(neg_action, pos_action,ret_val); -} -void cgo_callfn_GDExtensionSpxInputIsActionPressed(const GDExtensionSpxInputIsActionPressed fn, GdString action, GdBool* ret_val) { - fn(action,ret_val); -} -void cgo_callfn_GDExtensionSpxInputIsActionJustPressed(const GDExtensionSpxInputIsActionJustPressed fn, GdString action, GdBool* ret_val) { - fn(action,ret_val); -} -void cgo_callfn_GDExtensionSpxInputIsActionJustReleased(const GDExtensionSpxInputIsActionJustReleased fn, GdString action, GdBool* ret_val) { - fn(action,ret_val); -} -void cgo_callfn_GDExtensionSpxNavigationSetupPathFinderWithSize(const GDExtensionSpxNavigationSetupPathFinderWithSize fn, GdVec2 grid_size, GdVec2 cell_size, GdBool with_jump, GdBool with_debug) { - fn(grid_size, cell_size, with_jump, with_debug); -} -void cgo_callfn_GDExtensionSpxNavigationSetupPathFinder(const GDExtensionSpxNavigationSetupPathFinder fn, GdBool with_jump) { - fn(with_jump); -} -void cgo_callfn_GDExtensionSpxNavigationSetObstacle(const GDExtensionSpxNavigationSetObstacle fn, GdObj obj, GdBool enabled) { - fn(obj, enabled); -} -void cgo_callfn_GDExtensionSpxNavigationFindPath(const GDExtensionSpxNavigationFindPath fn, GdVec2 p_from, GdVec2 p_to, GdBool with_jump, GdArray* ret_val) { - fn(p_from, p_to, with_jump,ret_val); -} -void cgo_callfn_GDExtensionSpxPenDestroyAllPens(const GDExtensionSpxPenDestroyAllPens fn) { - fn(); -} -void cgo_callfn_GDExtensionSpxPenCreatePen(const GDExtensionSpxPenCreatePen fn, GdObj* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxPenDestroyPen(const GDExtensionSpxPenDestroyPen fn, GdObj obj) { - fn(obj); -} -void cgo_callfn_GDExtensionSpxPenPenStamp(const GDExtensionSpxPenPenStamp fn, GdObj obj) { - fn(obj); -} -void cgo_callfn_GDExtensionSpxPenMovePenTo(const GDExtensionSpxPenMovePenTo fn, GdObj obj, GdVec2 position) { - fn(obj, position); -} -void cgo_callfn_GDExtensionSpxPenPenDown(const GDExtensionSpxPenPenDown fn, GdObj obj, GdBool move_by_mouse) { - fn(obj, move_by_mouse); -} -void cgo_callfn_GDExtensionSpxPenPenUp(const GDExtensionSpxPenPenUp fn, GdObj obj) { - fn(obj); -} -void cgo_callfn_GDExtensionSpxPenSetPenColorTo(const GDExtensionSpxPenSetPenColorTo fn, GdObj obj, GdColor color) { - fn(obj, color); -} -void cgo_callfn_GDExtensionSpxPenChangePenBy(const GDExtensionSpxPenChangePenBy fn, GdObj obj, GdInt property, GdFloat amount) { - fn(obj, property, amount); -} -void cgo_callfn_GDExtensionSpxPenSetPenTo(const GDExtensionSpxPenSetPenTo fn, GdObj obj, GdInt property, GdFloat value) { - fn(obj, property, value); -} -void cgo_callfn_GDExtensionSpxPenChangePenSizeBy(const GDExtensionSpxPenChangePenSizeBy fn, GdObj obj, GdFloat amount) { - fn(obj, amount); -} -void cgo_callfn_GDExtensionSpxPenSetPenSizeTo(const GDExtensionSpxPenSetPenSizeTo fn, GdObj obj, GdFloat size) { - fn(obj, size); -} -void cgo_callfn_GDExtensionSpxPenSetPenStampTexture(const GDExtensionSpxPenSetPenStampTexture fn, GdObj obj, GdString texture_path) { - fn(obj, texture_path); -} -void cgo_callfn_GDExtensionSpxPhysicRaycast(const GDExtensionSpxPhysicRaycast fn, GdVec2 from, GdVec2 to, GdInt collision_mask, GdObj* ret_val) { - fn(from, to, collision_mask,ret_val); -} -void cgo_callfn_GDExtensionSpxPhysicCheckCollision(const GDExtensionSpxPhysicCheckCollision fn, GdVec2 from, GdVec2 to, GdInt collision_mask, GdBool collide_with_areas, GdBool collide_with_bodies, GdBool* ret_val) { - fn(from, to, collision_mask, collide_with_areas, collide_with_bodies,ret_val); -} -void cgo_callfn_GDExtensionSpxPhysicCheckTouchedCameraBoundaries(const GDExtensionSpxPhysicCheckTouchedCameraBoundaries fn, GdObj obj, GdInt* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxPhysicCheckTouchedCameraBoundary(const GDExtensionSpxPhysicCheckTouchedCameraBoundary fn, GdObj obj, GdInt board_type, GdBool* ret_val) { - fn(obj, board_type,ret_val); -} -void cgo_callfn_GDExtensionSpxPhysicCheckNearestTouchedCameraBoundary(const GDExtensionSpxPhysicCheckNearestTouchedCameraBoundary fn, GdObj obj, GdInt* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxPhysicSetCollisionSystemType(const GDExtensionSpxPhysicSetCollisionSystemType fn, GdBool is_collision_by_alpha) { - fn(is_collision_by_alpha); -} -void cgo_callfn_GDExtensionSpxPhysicSetGlobalGravity(const GDExtensionSpxPhysicSetGlobalGravity fn, GdFloat gravity) { - fn(gravity); -} -void cgo_callfn_GDExtensionSpxPhysicGetGlobalGravity(const GDExtensionSpxPhysicGetGlobalGravity fn, GdFloat* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxPhysicSetGlobalFriction(const GDExtensionSpxPhysicSetGlobalFriction fn, GdFloat friction) { - fn(friction); -} -void cgo_callfn_GDExtensionSpxPhysicGetGlobalFriction(const GDExtensionSpxPhysicGetGlobalFriction fn, GdFloat* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxPhysicSetGlobalAirDrag(const GDExtensionSpxPhysicSetGlobalAirDrag fn, GdFloat air_drag) { - fn(air_drag); -} -void cgo_callfn_GDExtensionSpxPhysicGetGlobalAirDrag(const GDExtensionSpxPhysicGetGlobalAirDrag fn, GdFloat* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxPhysicCheckCollisionRect(const GDExtensionSpxPhysicCheckCollisionRect fn, GdVec2 pos, GdVec2 size, GdInt collision_mask, GdArray* ret_val) { - fn(pos, size, collision_mask,ret_val); -} -void cgo_callfn_GDExtensionSpxPhysicCheckCollisionCircle(const GDExtensionSpxPhysicCheckCollisionCircle fn, GdVec2 pos, GdFloat radius, GdInt collision_mask, GdArray* ret_val) { - fn(pos, radius, collision_mask,ret_val); -} -void cgo_callfn_GDExtensionSpxPhysicRaycastWithDetails(const GDExtensionSpxPhysicRaycastWithDetails fn, GdVec2 from, GdVec2 to, GdArray ignore_sprites, GdInt collision_mask, GdBool collide_with_areas, GdBool collide_with_bodies, GdArray* ret_val) { - fn(from, to, ignore_sprites, collision_mask, collide_with_areas, collide_with_bodies,ret_val); -} -void cgo_callfn_GDExtensionSpxPlatformSetStretchMode(const GDExtensionSpxPlatformSetStretchMode fn, GdBool enable) { - fn(enable); -} -void cgo_callfn_GDExtensionSpxPlatformSetStretchAspect(const GDExtensionSpxPlatformSetStretchAspect fn, GdBool is_keep) { - fn(is_keep); -} -void cgo_callfn_GDExtensionSpxPlatformSetStretchContentScale(const GDExtensionSpxPlatformSetStretchContentScale fn, GdInt width, GdInt height) { - fn(width, height); -} -void cgo_callfn_GDExtensionSpxPlatformSetWindowPosition(const GDExtensionSpxPlatformSetWindowPosition fn, GdVec2 pos) { - fn(pos); -} -void cgo_callfn_GDExtensionSpxPlatformGetWindowPosition(const GDExtensionSpxPlatformGetWindowPosition fn, GdVec2* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxPlatformSetWindowSize(const GDExtensionSpxPlatformSetWindowSize fn, GdInt width, GdInt height, GdBool with_content_scale) { - fn(width, height, with_content_scale); -} -void cgo_callfn_GDExtensionSpxPlatformGetWindowSize(const GDExtensionSpxPlatformGetWindowSize fn, GdVec2* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxPlatformSetWindowTitle(const GDExtensionSpxPlatformSetWindowTitle fn, GdString title) { - fn(title); -} -void cgo_callfn_GDExtensionSpxPlatformGetWindowTitle(const GDExtensionSpxPlatformGetWindowTitle fn, GdString* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxPlatformSetWindowFullscreen(const GDExtensionSpxPlatformSetWindowFullscreen fn, GdBool enable) { - fn(enable); -} -void cgo_callfn_GDExtensionSpxPlatformIsWindowFullscreen(const GDExtensionSpxPlatformIsWindowFullscreen fn, GdBool* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxPlatformSetDebugMode(const GDExtensionSpxPlatformSetDebugMode fn, GdBool enable) { - fn(enable); -} -void cgo_callfn_GDExtensionSpxPlatformIsDebugMode(const GDExtensionSpxPlatformIsDebugMode fn, GdBool* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxPlatformGetTimeScale(const GDExtensionSpxPlatformGetTimeScale fn, GdFloat* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxPlatformSetTimeScale(const GDExtensionSpxPlatformSetTimeScale fn, GdFloat time_scale) { - fn(time_scale); -} -void cgo_callfn_GDExtensionSpxPlatformGetPersistantDataDir(const GDExtensionSpxPlatformGetPersistantDataDir fn, GdString* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxPlatformSetPersistantDataDir(const GDExtensionSpxPlatformSetPersistantDataDir fn, GdString path) { - fn(path); -} -void cgo_callfn_GDExtensionSpxPlatformIsInPersistantDataDir(const GDExtensionSpxPlatformIsInPersistantDataDir fn, GdString path, GdBool* ret_val) { - fn(path,ret_val); -} -void cgo_callfn_GDExtensionSpxResCreateAnimation(const GDExtensionSpxResCreateAnimation fn, GdString p_sprite_type, GdString p_anim_name, GdString p_json_ctx, GdInt fps, GdBool is_atlas) { - fn(p_sprite_type, p_anim_name, p_json_ctx, fps, is_atlas); -} -void cgo_callfn_GDExtensionSpxResSetLoadMode(const GDExtensionSpxResSetLoadMode fn, GdBool is_direct_mode) { - fn(is_direct_mode); -} -void cgo_callfn_GDExtensionSpxResGetLoadMode(const GDExtensionSpxResGetLoadMode fn, GdBool* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxResGetBoundFromAlpha(const GDExtensionSpxResGetBoundFromAlpha fn, GdString p_path, GdRect2* ret_val) { - fn(p_path,ret_val); -} -void cgo_callfn_GDExtensionSpxResGetImageSize(const GDExtensionSpxResGetImageSize fn, GdString p_path, GdVec2* ret_val) { - fn(p_path,ret_val); -} -void cgo_callfn_GDExtensionSpxResReadAllText(const GDExtensionSpxResReadAllText fn, GdString p_path, GdString* ret_val) { - fn(p_path,ret_val); -} -void cgo_callfn_GDExtensionSpxResHasFile(const GDExtensionSpxResHasFile fn, GdString p_path, GdBool* ret_val) { - fn(p_path,ret_val); -} -void cgo_callfn_GDExtensionSpxResReloadTexture(const GDExtensionSpxResReloadTexture fn, GdString path) { - fn(path); -} -void cgo_callfn_GDExtensionSpxResFreeStr(const GDExtensionSpxResFreeStr fn, GdString str) { - fn(str); -} -void cgo_callfn_GDExtensionSpxResSetDefaultFont(const GDExtensionSpxResSetDefaultFont fn, GdString font_path) { - fn(font_path); -} -void cgo_callfn_GDExtensionSpxSceneChangeSceneToFile(const GDExtensionSpxSceneChangeSceneToFile fn, GdString path) { - fn(path); -} -void cgo_callfn_GDExtensionSpxSceneDestroyAllSprites(const GDExtensionSpxSceneDestroyAllSprites fn) { - fn(); -} -void cgo_callfn_GDExtensionSpxSceneReloadCurrentScene(const GDExtensionSpxSceneReloadCurrentScene fn, GdInt* ret_val) { - fn(ret_val); -} -void cgo_callfn_GDExtensionSpxSceneUnloadCurrentScene(const GDExtensionSpxSceneUnloadCurrentScene fn) { - fn(); -} -void cgo_callfn_GDExtensionSpxSceneClearPureSprites(const GDExtensionSpxSceneClearPureSprites fn) { - fn(); -} -void cgo_callfn_GDExtensionSpxSceneCreatePureSprite(const GDExtensionSpxSceneCreatePureSprite fn, GdString texture_path, GdVec2 pos, GdInt zindex) { - fn(texture_path, pos, zindex); -} -void cgo_callfn_GDExtensionSpxSceneDestroyPureSprite(const GDExtensionSpxSceneDestroyPureSprite fn, GdObj id) { - fn(id); -} -void cgo_callfn_GDExtensionSpxSceneCreateRenderSprite(const GDExtensionSpxSceneCreateRenderSprite fn, GdString texture_path, GdVec2 pos, GdFloat degree, GdVec2 scale, GdInt zindex, GdVec2 pivot, GdObj* ret_val) { - fn(texture_path, pos, degree, scale, zindex, pivot,ret_val); -} -void cgo_callfn_GDExtensionSpxSceneCreateStaticSprite(const GDExtensionSpxSceneCreateStaticSprite fn, GdString texture_path, GdVec2 pos, GdFloat degree, GdVec2 scale, GdInt zindex, GdVec2 pivot, GdInt collider_type, GdVec2 collider_pivot, GdArray collider_params, GdObj* ret_val) { - fn(texture_path, pos, degree, scale, zindex, pivot, collider_type, collider_pivot, collider_params,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetDontDestroyOnLoad(const GDExtensionSpxSpriteSetDontDestroyOnLoad fn, GdObj obj) { - fn(obj); -} -void cgo_callfn_GDExtensionSpxSpriteSetProcess(const GDExtensionSpxSpriteSetProcess fn, GdObj obj, GdBool is_on) { - fn(obj, is_on); -} -void cgo_callfn_GDExtensionSpxSpriteSetPhysicProcess(const GDExtensionSpxSpriteSetPhysicProcess fn, GdObj obj, GdBool is_on) { - fn(obj, is_on); -} -void cgo_callfn_GDExtensionSpxSpriteSetTypeName(const GDExtensionSpxSpriteSetTypeName fn, GdObj obj, GdString type_name) { - fn(obj, type_name); -} -void cgo_callfn_GDExtensionSpxSpriteSetPivot(const GDExtensionSpxSpriteSetPivot fn, GdObj obj, GdVec2 pivot) { - fn(obj, pivot); -} -void cgo_callfn_GDExtensionSpxSpriteGetPivot(const GDExtensionSpxSpriteGetPivot fn, GdObj obj, GdVec2* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetChildPosition(const GDExtensionSpxSpriteSetChildPosition fn, GdObj obj, GdString path, GdVec2 pos) { - fn(obj, path, pos); -} -void cgo_callfn_GDExtensionSpxSpriteGetChildPosition(const GDExtensionSpxSpriteGetChildPosition fn, GdObj obj, GdString path, GdVec2* ret_val) { - fn(obj, path,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetChildRotation(const GDExtensionSpxSpriteSetChildRotation fn, GdObj obj, GdString path, GdFloat rot) { - fn(obj, path, rot); -} -void cgo_callfn_GDExtensionSpxSpriteGetChildRotation(const GDExtensionSpxSpriteGetChildRotation fn, GdObj obj, GdString path, GdFloat* ret_val) { - fn(obj, path,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetChildScale(const GDExtensionSpxSpriteSetChildScale fn, GdObj obj, GdString path, GdVec2 scale) { - fn(obj, path, scale); -} -void cgo_callfn_GDExtensionSpxSpriteGetChildScale(const GDExtensionSpxSpriteGetChildScale fn, GdObj obj, GdString path, GdVec2* ret_val) { - fn(obj, path,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteCheckCollision(const GDExtensionSpxSpriteCheckCollision fn, GdObj obj, GdObj target, GdBool is_src_trigger, GdBool is_dst_trigger, GdBool* ret_val) { - fn(obj, target, is_src_trigger, is_dst_trigger,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteCheckCollisionWithPoint(const GDExtensionSpxSpriteCheckCollisionWithPoint fn, GdObj obj, GdVec2 point, GdBool is_trigger, GdBool* ret_val) { - fn(obj, point, is_trigger,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteCreateBackdrop(const GDExtensionSpxSpriteCreateBackdrop fn, GdString path, GdObj* ret_val) { - fn(path,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteCreateSprite(const GDExtensionSpxSpriteCreateSprite fn, GdString path, GdVec2 pos, GdObj* ret_val) { - fn(path, pos,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteCloneSprite(const GDExtensionSpxSpriteCloneSprite fn, GdObj obj, GdObj* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteDestroySprite(const GDExtensionSpxSpriteDestroySprite fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteIsSpriteAlive(const GDExtensionSpxSpriteIsSpriteAlive fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetPosition(const GDExtensionSpxSpriteSetPosition fn, GdObj obj, GdVec2 pos) { - fn(obj, pos); -} -void cgo_callfn_GDExtensionSpxSpriteGetPosition(const GDExtensionSpxSpriteGetPosition fn, GdObj obj, GdVec2* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetRotation(const GDExtensionSpxSpriteSetRotation fn, GdObj obj, GdFloat rot) { - fn(obj, rot); -} -void cgo_callfn_GDExtensionSpxSpriteGetRotation(const GDExtensionSpxSpriteGetRotation fn, GdObj obj, GdFloat* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetScale(const GDExtensionSpxSpriteSetScale fn, GdObj obj, GdVec2 scale) { - fn(obj, scale); -} -void cgo_callfn_GDExtensionSpxSpriteGetScale(const GDExtensionSpxSpriteGetScale fn, GdObj obj, GdVec2* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetRenderScale(const GDExtensionSpxSpriteSetRenderScale fn, GdObj obj, GdVec2 scale) { - fn(obj, scale); -} -void cgo_callfn_GDExtensionSpxSpriteGetRenderScale(const GDExtensionSpxSpriteGetRenderScale fn, GdObj obj, GdVec2* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetColor(const GDExtensionSpxSpriteSetColor fn, GdObj obj, GdColor color) { - fn(obj, color); -} -void cgo_callfn_GDExtensionSpxSpriteGetColor(const GDExtensionSpxSpriteGetColor fn, GdObj obj, GdColor* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetMaterialShader(const GDExtensionSpxSpriteSetMaterialShader fn, GdObj obj, GdString path) { - fn(obj, path); -} -void cgo_callfn_GDExtensionSpxSpriteGetMaterialShader(const GDExtensionSpxSpriteGetMaterialShader fn, GdObj obj, GdString* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetMaterialParams(const GDExtensionSpxSpriteSetMaterialParams fn, GdObj obj, GdString effect, GdFloat amount) { - fn(obj, effect, amount); -} -void cgo_callfn_GDExtensionSpxSpriteGetMaterialParams(const GDExtensionSpxSpriteGetMaterialParams fn, GdObj obj, GdString effect, GdFloat* ret_val) { - fn(obj, effect,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetMaterialParamsVec(const GDExtensionSpxSpriteSetMaterialParamsVec fn, GdObj obj, GdString effect, GdFloat x, GdFloat y, GdFloat z, GdFloat w) { - fn(obj, effect, x, y, z, w); -} -void cgo_callfn_GDExtensionSpxSpriteSetMaterialParamsVec4(const GDExtensionSpxSpriteSetMaterialParamsVec4 fn, GdObj obj, GdString effect, GdVec4 vec4) { - fn(obj, effect, vec4); -} -void cgo_callfn_GDExtensionSpxSpriteGetMaterialParamsVec4(const GDExtensionSpxSpriteGetMaterialParamsVec4 fn, GdObj obj, GdString effect, GdVec4* ret_val) { - fn(obj, effect,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetMaterialParamsColor(const GDExtensionSpxSpriteSetMaterialParamsColor fn, GdObj obj, GdString effect, GdColor color) { - fn(obj, effect, color); -} -void cgo_callfn_GDExtensionSpxSpriteGetMaterialParamsColor(const GDExtensionSpxSpriteGetMaterialParamsColor fn, GdObj obj, GdString effect, GdColor* ret_val) { - fn(obj, effect,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetTextureAtlas(const GDExtensionSpxSpriteSetTextureAtlas fn, GdObj obj, GdString path, GdRect2 rect2) { - fn(obj, path, rect2); -} -void cgo_callfn_GDExtensionSpxSpriteSetTexture(const GDExtensionSpxSpriteSetTexture fn, GdObj obj, GdString path) { - fn(obj, path); -} -void cgo_callfn_GDExtensionSpxSpriteSetTextureAtlasDirect(const GDExtensionSpxSpriteSetTextureAtlasDirect fn, GdObj obj, GdString path, GdRect2 rect2) { - fn(obj, path, rect2); -} -void cgo_callfn_GDExtensionSpxSpriteSetTextureDirect(const GDExtensionSpxSpriteSetTextureDirect fn, GdObj obj, GdString path) { - fn(obj, path); -} -void cgo_callfn_GDExtensionSpxSpriteGetTexture(const GDExtensionSpxSpriteGetTexture fn, GdObj obj, GdString* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetVisible(const GDExtensionSpxSpriteSetVisible fn, GdObj obj, GdBool visible) { - fn(obj, visible); -} -void cgo_callfn_GDExtensionSpxSpriteGetVisible(const GDExtensionSpxSpriteGetVisible fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteGetZIndex(const GDExtensionSpxSpriteGetZIndex fn, GdObj obj, GdInt* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetZIndex(const GDExtensionSpxSpriteSetZIndex fn, GdObj obj, GdInt z) { - fn(obj, z); -} -void cgo_callfn_GDExtensionSpxSpritePlayAnim(const GDExtensionSpxSpritePlayAnim fn, GdObj obj, GdString p_name, GdFloat p_speed, GdBool isLoop, GdBool p_revert) { - fn(obj, p_name, p_speed, isLoop, p_revert); -} -void cgo_callfn_GDExtensionSpxSpritePlayBackwardsAnim(const GDExtensionSpxSpritePlayBackwardsAnim fn, GdObj obj, GdString p_name) { - fn(obj, p_name); -} -void cgo_callfn_GDExtensionSpxSpritePauseAnim(const GDExtensionSpxSpritePauseAnim fn, GdObj obj) { - fn(obj); -} -void cgo_callfn_GDExtensionSpxSpriteStopAnim(const GDExtensionSpxSpriteStopAnim fn, GdObj obj) { - fn(obj); -} -void cgo_callfn_GDExtensionSpxSpriteIsPlayingAnim(const GDExtensionSpxSpriteIsPlayingAnim fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetAnim(const GDExtensionSpxSpriteSetAnim fn, GdObj obj, GdString p_name) { - fn(obj, p_name); -} -void cgo_callfn_GDExtensionSpxSpriteGetAnim(const GDExtensionSpxSpriteGetAnim fn, GdObj obj, GdString* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetAnimFrame(const GDExtensionSpxSpriteSetAnimFrame fn, GdObj obj, GdInt p_frame) { - fn(obj, p_frame); -} -void cgo_callfn_GDExtensionSpxSpriteGetAnimFrame(const GDExtensionSpxSpriteGetAnimFrame fn, GdObj obj, GdInt* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetAnimSpeedScale(const GDExtensionSpxSpriteSetAnimSpeedScale fn, GdObj obj, GdFloat p_speed_scale) { - fn(obj, p_speed_scale); -} -void cgo_callfn_GDExtensionSpxSpriteGetAnimSpeedScale(const GDExtensionSpxSpriteGetAnimSpeedScale fn, GdObj obj, GdFloat* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteGetAnimPlayingSpeed(const GDExtensionSpxSpriteGetAnimPlayingSpeed fn, GdObj obj, GdFloat* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetAnimCentered(const GDExtensionSpxSpriteSetAnimCentered fn, GdObj obj, GdBool p_center) { - fn(obj, p_center); -} -void cgo_callfn_GDExtensionSpxSpriteIsAnimCentered(const GDExtensionSpxSpriteIsAnimCentered fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetAnimOffset(const GDExtensionSpxSpriteSetAnimOffset fn, GdObj obj, GdVec2 p_offset) { - fn(obj, p_offset); -} -void cgo_callfn_GDExtensionSpxSpriteGetAnimOffset(const GDExtensionSpxSpriteGetAnimOffset fn, GdObj obj, GdVec2* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetAnimFlipH(const GDExtensionSpxSpriteSetAnimFlipH fn, GdObj obj, GdBool p_flip) { - fn(obj, p_flip); -} -void cgo_callfn_GDExtensionSpxSpriteIsAnimFlippedH(const GDExtensionSpxSpriteIsAnimFlippedH fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetAnimFlipV(const GDExtensionSpxSpriteSetAnimFlipV fn, GdObj obj, GdBool p_flip) { - fn(obj, p_flip); -} -void cgo_callfn_GDExtensionSpxSpriteIsAnimFlippedV(const GDExtensionSpxSpriteIsAnimFlippedV fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteGetCurrentAnimName(const GDExtensionSpxSpriteGetCurrentAnimName fn, GdObj obj, GdString* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetVelocity(const GDExtensionSpxSpriteSetVelocity fn, GdObj obj, GdVec2 velocity) { - fn(obj, velocity); -} -void cgo_callfn_GDExtensionSpxSpriteGetVelocity(const GDExtensionSpxSpriteGetVelocity fn, GdObj obj, GdVec2* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteIsOnFloor(const GDExtensionSpxSpriteIsOnFloor fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteIsOnFloorOnly(const GDExtensionSpxSpriteIsOnFloorOnly fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteIsOnWall(const GDExtensionSpxSpriteIsOnWall fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteIsOnWallOnly(const GDExtensionSpxSpriteIsOnWallOnly fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteIsOnCeiling(const GDExtensionSpxSpriteIsOnCeiling fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteIsOnCeilingOnly(const GDExtensionSpxSpriteIsOnCeilingOnly fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteGetLastMotion(const GDExtensionSpxSpriteGetLastMotion fn, GdObj obj, GdVec2* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteGetPositionDelta(const GDExtensionSpxSpriteGetPositionDelta fn, GdObj obj, GdVec2* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteGetFloorNormal(const GDExtensionSpxSpriteGetFloorNormal fn, GdObj obj, GdVec2* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteGetWallNormal(const GDExtensionSpxSpriteGetWallNormal fn, GdObj obj, GdVec2* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteGetRealVelocity(const GDExtensionSpxSpriteGetRealVelocity fn, GdObj obj, GdVec2* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteMoveAndSlide(const GDExtensionSpxSpriteMoveAndSlide fn, GdObj obj) { - fn(obj); -} -void cgo_callfn_GDExtensionSpxSpriteSetGravity(const GDExtensionSpxSpriteSetGravity fn, GdObj obj, GdFloat gravity) { - fn(obj, gravity); -} -void cgo_callfn_GDExtensionSpxSpriteGetGravity(const GDExtensionSpxSpriteGetGravity fn, GdObj obj, GdFloat* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetMass(const GDExtensionSpxSpriteSetMass fn, GdObj obj, GdFloat mass) { - fn(obj, mass); -} -void cgo_callfn_GDExtensionSpxSpriteGetMass(const GDExtensionSpxSpriteGetMass fn, GdObj obj, GdFloat* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteAddForce(const GDExtensionSpxSpriteAddForce fn, GdObj obj, GdVec2 force) { - fn(obj, force); -} -void cgo_callfn_GDExtensionSpxSpriteAddImpulse(const GDExtensionSpxSpriteAddImpulse fn, GdObj obj, GdVec2 impulse) { - fn(obj, impulse); -} -void cgo_callfn_GDExtensionSpxSpriteSetPhysicsMode(const GDExtensionSpxSpriteSetPhysicsMode fn, GdObj obj, GdInt mode) { - fn(obj, mode); -} -void cgo_callfn_GDExtensionSpxSpriteGetPhysicsMode(const GDExtensionSpxSpriteGetPhysicsMode fn, GdObj obj, GdInt* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetUseGravity(const GDExtensionSpxSpriteSetUseGravity fn, GdObj obj, GdBool enabled) { - fn(obj, enabled); -} -void cgo_callfn_GDExtensionSpxSpriteIsUseGravity(const GDExtensionSpxSpriteIsUseGravity fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetGravityScale(const GDExtensionSpxSpriteSetGravityScale fn, GdObj obj, GdFloat scale) { - fn(obj, scale); -} -void cgo_callfn_GDExtensionSpxSpriteGetGravityScale(const GDExtensionSpxSpriteGetGravityScale fn, GdObj obj, GdFloat* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetDrag(const GDExtensionSpxSpriteSetDrag fn, GdObj obj, GdFloat drag) { - fn(obj, drag); -} -void cgo_callfn_GDExtensionSpxSpriteGetDrag(const GDExtensionSpxSpriteGetDrag fn, GdObj obj, GdFloat* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetFriction(const GDExtensionSpxSpriteSetFriction fn, GdObj obj, GdFloat friction) { - fn(obj, friction); -} -void cgo_callfn_GDExtensionSpxSpriteGetFriction(const GDExtensionSpxSpriteGetFriction fn, GdObj obj, GdFloat* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetCollisionLayer(const GDExtensionSpxSpriteSetCollisionLayer fn, GdObj obj, GdInt layer) { - fn(obj, layer); -} -void cgo_callfn_GDExtensionSpxSpriteGetCollisionLayer(const GDExtensionSpxSpriteGetCollisionLayer fn, GdObj obj, GdInt* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetCollisionMask(const GDExtensionSpxSpriteSetCollisionMask fn, GdObj obj, GdInt mask) { - fn(obj, mask); -} -void cgo_callfn_GDExtensionSpxSpriteGetCollisionMask(const GDExtensionSpxSpriteGetCollisionMask fn, GdObj obj, GdInt* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetTriggerLayer(const GDExtensionSpxSpriteSetTriggerLayer fn, GdObj obj, GdInt layer) { - fn(obj, layer); -} -void cgo_callfn_GDExtensionSpxSpriteGetTriggerLayer(const GDExtensionSpxSpriteGetTriggerLayer fn, GdObj obj, GdInt* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetTriggerMask(const GDExtensionSpxSpriteSetTriggerMask fn, GdObj obj, GdInt mask) { - fn(obj, mask); -} -void cgo_callfn_GDExtensionSpxSpriteGetTriggerMask(const GDExtensionSpxSpriteGetTriggerMask fn, GdObj obj, GdInt* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetColliderRect(const GDExtensionSpxSpriteSetColliderRect fn, GdObj obj, GdVec2 center, GdVec2 size) { - fn(obj, center, size); -} -void cgo_callfn_GDExtensionSpxSpriteSetColliderCircle(const GDExtensionSpxSpriteSetColliderCircle fn, GdObj obj, GdVec2 center, GdFloat radius) { - fn(obj, center, radius); -} -void cgo_callfn_GDExtensionSpxSpriteSetColliderCapsule(const GDExtensionSpxSpriteSetColliderCapsule fn, GdObj obj, GdVec2 center, GdVec2 size) { - fn(obj, center, size); -} -void cgo_callfn_GDExtensionSpxSpriteSetCollisionEnabled(const GDExtensionSpxSpriteSetCollisionEnabled fn, GdObj obj, GdBool enabled) { - fn(obj, enabled); -} -void cgo_callfn_GDExtensionSpxSpriteIsCollisionEnabled(const GDExtensionSpxSpriteIsCollisionEnabled fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteSetTriggerRect(const GDExtensionSpxSpriteSetTriggerRect fn, GdObj obj, GdVec2 center, GdVec2 size) { - fn(obj, center, size); -} -void cgo_callfn_GDExtensionSpxSpriteSetTriggerCircle(const GDExtensionSpxSpriteSetTriggerCircle fn, GdObj obj, GdVec2 center, GdFloat radius) { - fn(obj, center, radius); -} -void cgo_callfn_GDExtensionSpxSpriteSetTriggerCapsule(const GDExtensionSpxSpriteSetTriggerCapsule fn, GdObj obj, GdVec2 center, GdVec2 size) { - fn(obj, center, size); -} -void cgo_callfn_GDExtensionSpxSpriteSetTriggerEnabled(const GDExtensionSpxSpriteSetTriggerEnabled fn, GdObj obj, GdBool trigger) { - fn(obj, trigger); -} -void cgo_callfn_GDExtensionSpxSpriteIsTriggerEnabled(const GDExtensionSpxSpriteIsTriggerEnabled fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteCheckCollisionByColor(const GDExtensionSpxSpriteCheckCollisionByColor fn, GdObj obj, GdColor color, GdFloat color_threshold, GdFloat alpha_threshold, GdBool* ret_val) { - fn(obj, color, color_threshold, alpha_threshold,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteCheckCollisionByAlpha(const GDExtensionSpxSpriteCheckCollisionByAlpha fn, GdObj obj, GdFloat alpha_threshold, GdBool* ret_val) { - fn(obj, alpha_threshold,ret_val); -} -void cgo_callfn_GDExtensionSpxSpriteCheckCollisionWithSpriteByAlpha(const GDExtensionSpxSpriteCheckCollisionWithSpriteByAlpha fn, GdObj obj, GdObj obj_b, GdFloat alpha_threshold, GdBool* ret_val) { - fn(obj, obj_b, alpha_threshold,ret_val); -} -void cgo_callfn_GDExtensionSpxTilemapOpenDrawTilesWithSize(const GDExtensionSpxTilemapOpenDrawTilesWithSize fn, GdInt tile_size) { - fn(tile_size); -} -void cgo_callfn_GDExtensionSpxTilemapOpenDrawTiles(const GDExtensionSpxTilemapOpenDrawTiles fn) { - fn(); -} -void cgo_callfn_GDExtensionSpxTilemapSetLayerIndex(const GDExtensionSpxTilemapSetLayerIndex fn, GdInt index) { - fn(index); -} -void cgo_callfn_GDExtensionSpxTilemapSetTile(const GDExtensionSpxTilemapSetTile fn, GdString texture_path, GdBool with_collision) { - fn(texture_path, with_collision); -} -void cgo_callfn_GDExtensionSpxTilemapSetTileWithCollisionInfo(const GDExtensionSpxTilemapSetTileWithCollisionInfo fn, GdString texture_path, GdArray collision_points) { - fn(texture_path, collision_points); -} -void cgo_callfn_GDExtensionSpxTilemapSetLayerOffset(const GDExtensionSpxTilemapSetLayerOffset fn, GdInt index, GdVec2 offset) { - fn(index, offset); -} -void cgo_callfn_GDExtensionSpxTilemapGetLayerOffset(const GDExtensionSpxTilemapGetLayerOffset fn, GdInt index, GdVec2* ret_val) { - fn(index,ret_val); -} -void cgo_callfn_GDExtensionSpxTilemapPlaceTiles(const GDExtensionSpxTilemapPlaceTiles fn, GdArray positions, GdString texture_path) { - fn(positions, texture_path); -} -void cgo_callfn_GDExtensionSpxTilemapPlaceTilesWithLayer(const GDExtensionSpxTilemapPlaceTilesWithLayer fn, GdArray positions, GdString texture_path, GdInt layer_index) { - fn(positions, texture_path, layer_index); -} -void cgo_callfn_GDExtensionSpxTilemapPlaceTile(const GDExtensionSpxTilemapPlaceTile fn, GdVec2 pos, GdString texture_path) { - fn(pos, texture_path); -} -void cgo_callfn_GDExtensionSpxTilemapPlaceTileWithLayer(const GDExtensionSpxTilemapPlaceTileWithLayer fn, GdVec2 pos, GdString texture_path, GdInt layer_index) { - fn(pos, texture_path, layer_index); -} -void cgo_callfn_GDExtensionSpxTilemapEraseTile(const GDExtensionSpxTilemapEraseTile fn, GdVec2 pos) { - fn(pos); -} -void cgo_callfn_GDExtensionSpxTilemapEraseTileWithLayer(const GDExtensionSpxTilemapEraseTileWithLayer fn, GdVec2 pos, GdInt layer_index) { - fn(pos, layer_index); -} -void cgo_callfn_GDExtensionSpxTilemapGetTile(const GDExtensionSpxTilemapGetTile fn, GdVec2 pos, GdString* ret_val) { - fn(pos,ret_val); -} -void cgo_callfn_GDExtensionSpxTilemapGetTileWithLayer(const GDExtensionSpxTilemapGetTileWithLayer fn, GdVec2 pos, GdInt layer_index, GdString* ret_val) { - fn(pos, layer_index,ret_val); -} -void cgo_callfn_GDExtensionSpxTilemapCloseDrawTiles(const GDExtensionSpxTilemapCloseDrawTiles fn) { - fn(); -} -void cgo_callfn_GDExtensionSpxTilemapExitTilemapEditorMode(const GDExtensionSpxTilemapExitTilemapEditorMode fn) { - fn(); -} -void cgo_callfn_GDExtensionSpxUiBindNode(const GDExtensionSpxUiBindNode fn, GdObj obj, GdString rel_path, GdObj* ret_val) { - fn(obj, rel_path,ret_val); -} -void cgo_callfn_GDExtensionSpxUiCreateNode(const GDExtensionSpxUiCreateNode fn, GdString path, GdObj* ret_val) { - fn(path,ret_val); -} -void cgo_callfn_GDExtensionSpxUiCreateButton(const GDExtensionSpxUiCreateButton fn, GdString path, GdString text, GdObj* ret_val) { - fn(path, text,ret_val); -} -void cgo_callfn_GDExtensionSpxUiCreateLabel(const GDExtensionSpxUiCreateLabel fn, GdString path, GdString text, GdObj* ret_val) { - fn(path, text,ret_val); -} -void cgo_callfn_GDExtensionSpxUiCreateImage(const GDExtensionSpxUiCreateImage fn, GdString path, GdObj* ret_val) { - fn(path,ret_val); -} -void cgo_callfn_GDExtensionSpxUiCreateToggle(const GDExtensionSpxUiCreateToggle fn, GdString path, GdBool value, GdObj* ret_val) { - fn(path, value,ret_val); -} -void cgo_callfn_GDExtensionSpxUiCreateSlider(const GDExtensionSpxUiCreateSlider fn, GdString path, GdFloat value, GdObj* ret_val) { - fn(path, value,ret_val); -} -void cgo_callfn_GDExtensionSpxUiCreateInput(const GDExtensionSpxUiCreateInput fn, GdString path, GdString text, GdObj* ret_val) { - fn(path, text,ret_val); -} -void cgo_callfn_GDExtensionSpxUiDestroyNode(const GDExtensionSpxUiDestroyNode fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiGetType(const GDExtensionSpxUiGetType fn, GdObj obj, GdInt* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiSetText(const GDExtensionSpxUiSetText fn, GdObj obj, GdString text) { - fn(obj, text); -} -void cgo_callfn_GDExtensionSpxUiGetText(const GDExtensionSpxUiGetText fn, GdObj obj, GdString* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiSetTexture(const GDExtensionSpxUiSetTexture fn, GdObj obj, GdString path) { - fn(obj, path); -} -void cgo_callfn_GDExtensionSpxUiGetTexture(const GDExtensionSpxUiGetTexture fn, GdObj obj, GdString* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiSetColor(const GDExtensionSpxUiSetColor fn, GdObj obj, GdColor color) { - fn(obj, color); -} -void cgo_callfn_GDExtensionSpxUiGetColor(const GDExtensionSpxUiGetColor fn, GdObj obj, GdColor* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiSetFontSize(const GDExtensionSpxUiSetFontSize fn, GdObj obj, GdInt size) { - fn(obj, size); -} -void cgo_callfn_GDExtensionSpxUiGetFontSize(const GDExtensionSpxUiGetFontSize fn, GdObj obj, GdInt* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiSetVisible(const GDExtensionSpxUiSetVisible fn, GdObj obj, GdBool visible) { - fn(obj, visible); -} -void cgo_callfn_GDExtensionSpxUiGetVisible(const GDExtensionSpxUiGetVisible fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiSetInteractable(const GDExtensionSpxUiSetInteractable fn, GdObj obj, GdBool interactable) { - fn(obj, interactable); -} -void cgo_callfn_GDExtensionSpxUiGetInteractable(const GDExtensionSpxUiGetInteractable fn, GdObj obj, GdBool* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiSetRect(const GDExtensionSpxUiSetRect fn, GdObj obj, GdRect2 rect) { - fn(obj, rect); -} -void cgo_callfn_GDExtensionSpxUiGetRect(const GDExtensionSpxUiGetRect fn, GdObj obj, GdRect2* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiGetLayoutDirection(const GDExtensionSpxUiGetLayoutDirection fn, GdObj obj, GdInt* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiSetLayoutDirection(const GDExtensionSpxUiSetLayoutDirection fn, GdObj obj, GdInt value) { - fn(obj, value); -} -void cgo_callfn_GDExtensionSpxUiGetLayoutMode(const GDExtensionSpxUiGetLayoutMode fn, GdObj obj, GdInt* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiSetLayoutMode(const GDExtensionSpxUiSetLayoutMode fn, GdObj obj, GdInt value) { - fn(obj, value); -} -void cgo_callfn_GDExtensionSpxUiGetAnchorsPreset(const GDExtensionSpxUiGetAnchorsPreset fn, GdObj obj, GdInt* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiSetAnchorsPreset(const GDExtensionSpxUiSetAnchorsPreset fn, GdObj obj, GdInt value) { - fn(obj, value); -} -void cgo_callfn_GDExtensionSpxUiGetScale(const GDExtensionSpxUiGetScale fn, GdObj obj, GdVec2* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiSetScale(const GDExtensionSpxUiSetScale fn, GdObj obj, GdVec2 value) { - fn(obj, value); -} -void cgo_callfn_GDExtensionSpxUiGetPosition(const GDExtensionSpxUiGetPosition fn, GdObj obj, GdVec2* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiSetPosition(const GDExtensionSpxUiSetPosition fn, GdObj obj, GdVec2 value) { - fn(obj, value); -} -void cgo_callfn_GDExtensionSpxUiGetSize(const GDExtensionSpxUiGetSize fn, GdObj obj, GdVec2* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiSetSize(const GDExtensionSpxUiSetSize fn, GdObj obj, GdVec2 value) { - fn(obj, value); -} -void cgo_callfn_GDExtensionSpxUiGetGlobalPosition(const GDExtensionSpxUiGetGlobalPosition fn, GdObj obj, GdVec2* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiSetGlobalPosition(const GDExtensionSpxUiSetGlobalPosition fn, GdObj obj, GdVec2 value) { - fn(obj, value); -} -void cgo_callfn_GDExtensionSpxUiGetRotation(const GDExtensionSpxUiGetRotation fn, GdObj obj, GdFloat* ret_val) { - fn(obj,ret_val); -} -void cgo_callfn_GDExtensionSpxUiSetRotation(const GDExtensionSpxUiSetRotation fn, GdObj obj, GdFloat value) { - fn(obj, value); -} -void cgo_callfn_GDExtensionSpxUiGetFlip(const GDExtensionSpxUiGetFlip fn, GdObj obj, GdBool horizontal, GdBool* ret_val) { - fn(obj, horizontal,ret_val); -} -void cgo_callfn_GDExtensionSpxUiSetFlip(const GDExtensionSpxUiSetFlip fn, GdObj obj, GdBool horizontal, GdBool is_flip) { - fn(obj, horizontal, is_flip); -} -#endif +#ifndef CGO_GODOT_GO_GDEXTENSION_WRAPPER_H +#define CGO_GODOT_GO_GDEXTENSION_WRAPPER_H + + +/*------------------------------------------------------------------------------ +// This code was generated by template ffi_wrapper.c.tmpl. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. Any updates should be done in +// "ffi_wrapper.h.tmpl" so they can be included in the generated +// code. +//----------------------------------------------------------------------------*/ +#include "gdextension_spx_codegen_header.h" + +/* Go cannot call C function pointers directly, so we must generate C wrapper code to call the functions. */void cgo_callfn_GDExtensionSpxAudioStopAll(const GDExtensionSpxAudioStopAll fn) { + fn(); +} +void cgo_callfn_GDExtensionSpxAudioCreateAudio(const GDExtensionSpxAudioCreateAudio fn, GdObj* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxAudioDestroyAudio(const GDExtensionSpxAudioDestroyAudio fn, GdObj obj) { + fn(obj); +} +void cgo_callfn_GDExtensionSpxAudioSetPitch(const GDExtensionSpxAudioSetPitch fn, GdObj obj, GdFloat pitch) { + fn(obj, pitch); +} +void cgo_callfn_GDExtensionSpxAudioGetPitch(const GDExtensionSpxAudioGetPitch fn, GdObj obj, GdFloat* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxAudioSetPan(const GDExtensionSpxAudioSetPan fn, GdObj obj, GdFloat pan) { + fn(obj, pan); +} +void cgo_callfn_GDExtensionSpxAudioGetPan(const GDExtensionSpxAudioGetPan fn, GdObj obj, GdFloat* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxAudioSetVolume(const GDExtensionSpxAudioSetVolume fn, GdObj obj, GdFloat volume) { + fn(obj, volume); +} +void cgo_callfn_GDExtensionSpxAudioGetVolume(const GDExtensionSpxAudioGetVolume fn, GdObj obj, GdFloat* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxAudioPlayWithAttenuation(const GDExtensionSpxAudioPlayWithAttenuation fn, GdObj obj, GdString path, GdObj owner_id, GdFloat attenuation, GdFloat max_distance, GdInt* ret_val) { + fn(obj, path, owner_id, attenuation, max_distance,ret_val); +} +void cgo_callfn_GDExtensionSpxAudioPlay(const GDExtensionSpxAudioPlay fn, GdObj obj, GdString path, GdInt* ret_val) { + fn(obj, path,ret_val); +} +void cgo_callfn_GDExtensionSpxAudioPause(const GDExtensionSpxAudioPause fn, GdInt aid) { + fn(aid); +} +void cgo_callfn_GDExtensionSpxAudioResume(const GDExtensionSpxAudioResume fn, GdInt aid) { + fn(aid); +} +void cgo_callfn_GDExtensionSpxAudioStop(const GDExtensionSpxAudioStop fn, GdInt aid) { + fn(aid); +} +void cgo_callfn_GDExtensionSpxAudioSetLoop(const GDExtensionSpxAudioSetLoop fn, GdInt aid, GdBool loop) { + fn(aid, loop); +} +void cgo_callfn_GDExtensionSpxAudioGetLoop(const GDExtensionSpxAudioGetLoop fn, GdInt aid, GdBool* ret_val) { + fn(aid,ret_val); +} +void cgo_callfn_GDExtensionSpxAudioGetTimer(const GDExtensionSpxAudioGetTimer fn, GdInt aid, GdFloat* ret_val) { + fn(aid,ret_val); +} +void cgo_callfn_GDExtensionSpxAudioSetTimer(const GDExtensionSpxAudioSetTimer fn, GdInt aid, GdFloat time) { + fn(aid, time); +} +void cgo_callfn_GDExtensionSpxAudioIsPlaying(const GDExtensionSpxAudioIsPlaying fn, GdInt aid, GdBool* ret_val) { + fn(aid,ret_val); +} +void cgo_callfn_GDExtensionSpxCameraGetCameraPosition(const GDExtensionSpxCameraGetCameraPosition fn, GdVec2* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxCameraSetCameraPosition(const GDExtensionSpxCameraSetCameraPosition fn, GdVec2 position) { + fn(position); +} +void cgo_callfn_GDExtensionSpxCameraGetCameraZoom(const GDExtensionSpxCameraGetCameraZoom fn, GdVec2* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxCameraSetCameraZoom(const GDExtensionSpxCameraSetCameraZoom fn, GdVec2 size) { + fn(size); +} +void cgo_callfn_GDExtensionSpxCameraGetViewportRect(const GDExtensionSpxCameraGetViewportRect fn, GdRect2* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxCameraGetGlobalCameraRect(const GDExtensionSpxCameraGetGlobalCameraRect fn, GdRect2* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxCameraSetCameraLimit(const GDExtensionSpxCameraSetCameraLimit fn, GdInt side, GdInt limit) { + fn(side, limit); +} +void cgo_callfn_GDExtensionSpxCameraSetCameraSmoothing(const GDExtensionSpxCameraSetCameraSmoothing fn, GdBool enabled) { + fn(enabled); +} +void cgo_callfn_GDExtensionSpxDebugDebugDrawCircle(const GDExtensionSpxDebugDebugDrawCircle fn, GdVec2 pos, GdFloat radius, GdColor color) { + fn(pos, radius, color); +} +void cgo_callfn_GDExtensionSpxDebugDebugDrawRect(const GDExtensionSpxDebugDebugDrawRect fn, GdVec2 pos, GdVec2 size, GdColor color) { + fn(pos, size, color); +} +void cgo_callfn_GDExtensionSpxDebugDebugDrawLine(const GDExtensionSpxDebugDebugDrawLine fn, GdVec2 from, GdVec2 to, GdColor color) { + fn(from, to, color); +} +void cgo_callfn_GDExtensionSpxExtRequestExit(const GDExtensionSpxExtRequestExit fn, GdInt exit_code) { + fn(exit_code); +} +void cgo_callfn_GDExtensionSpxExtRequestReset(const GDExtensionSpxExtRequestReset fn, GdInt exit_code) { + fn(exit_code); +} +void cgo_callfn_GDExtensionSpxExtRequestRestart(const GDExtensionSpxExtRequestRestart fn) { + fn(); +} +void cgo_callfn_GDExtensionSpxExtOnRuntimePanic(const GDExtensionSpxExtOnRuntimePanic fn, GdString msg) { + fn(msg); +} +void cgo_callfn_GDExtensionSpxExtPause(const GDExtensionSpxExtPause fn) { + fn(); +} +void cgo_callfn_GDExtensionSpxExtResume(const GDExtensionSpxExtResume fn) { + fn(); +} +void cgo_callfn_GDExtensionSpxExtIsPaused(const GDExtensionSpxExtIsPaused fn, GdBool* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxExtNextFrame(const GDExtensionSpxExtNextFrame fn) { + fn(); +} +void cgo_callfn_GDExtensionSpxExtSetLayerSorterMode(const GDExtensionSpxExtSetLayerSorterMode fn, GdInt mode) { + fn(mode); +} +void cgo_callfn_GDExtensionSpxInputGetGlobalMousePos(const GDExtensionSpxInputGetGlobalMousePos fn, GdVec2* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxInputGetKey(const GDExtensionSpxInputGetKey fn, GdInt key, GdBool* ret_val) { + fn(key,ret_val); +} +void cgo_callfn_GDExtensionSpxInputGetMouseState(const GDExtensionSpxInputGetMouseState fn, GdInt mouse_id, GdBool* ret_val) { + fn(mouse_id,ret_val); +} +void cgo_callfn_GDExtensionSpxInputGetKeyState(const GDExtensionSpxInputGetKeyState fn, GdInt key, GdInt* ret_val) { + fn(key,ret_val); +} +void cgo_callfn_GDExtensionSpxInputGetAxis(const GDExtensionSpxInputGetAxis fn, GdString neg_action, GdString pos_action, GdFloat* ret_val) { + fn(neg_action, pos_action,ret_val); +} +void cgo_callfn_GDExtensionSpxInputIsActionPressed(const GDExtensionSpxInputIsActionPressed fn, GdString action, GdBool* ret_val) { + fn(action,ret_val); +} +void cgo_callfn_GDExtensionSpxInputIsActionJustPressed(const GDExtensionSpxInputIsActionJustPressed fn, GdString action, GdBool* ret_val) { + fn(action,ret_val); +} +void cgo_callfn_GDExtensionSpxInputIsActionJustReleased(const GDExtensionSpxInputIsActionJustReleased fn, GdString action, GdBool* ret_val) { + fn(action,ret_val); +} +void cgo_callfn_GDExtensionSpxNavigationSetupPathFinderWithSize(const GDExtensionSpxNavigationSetupPathFinderWithSize fn, GdVec2 grid_size, GdVec2 cell_size, GdBool with_jump, GdBool with_debug) { + fn(grid_size, cell_size, with_jump, with_debug); +} +void cgo_callfn_GDExtensionSpxNavigationSetupPathFinder(const GDExtensionSpxNavigationSetupPathFinder fn, GdBool with_jump) { + fn(with_jump); +} +void cgo_callfn_GDExtensionSpxNavigationSetObstacle(const GDExtensionSpxNavigationSetObstacle fn, GdObj obj, GdBool enabled) { + fn(obj, enabled); +} +void cgo_callfn_GDExtensionSpxNavigationFindPath(const GDExtensionSpxNavigationFindPath fn, GdVec2 p_from, GdVec2 p_to, GdBool with_jump, GdArray* ret_val) { + fn(p_from, p_to, with_jump,ret_val); +} +void cgo_callfn_GDExtensionSpxPenDestroyAllPens(const GDExtensionSpxPenDestroyAllPens fn) { + fn(); +} +void cgo_callfn_GDExtensionSpxPenCreatePen(const GDExtensionSpxPenCreatePen fn, GdObj* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxPenDestroyPen(const GDExtensionSpxPenDestroyPen fn, GdObj obj) { + fn(obj); +} +void cgo_callfn_GDExtensionSpxPenPenStamp(const GDExtensionSpxPenPenStamp fn, GdObj obj) { + fn(obj); +} +void cgo_callfn_GDExtensionSpxPenMovePenTo(const GDExtensionSpxPenMovePenTo fn, GdObj obj, GdVec2 position) { + fn(obj, position); +} +void cgo_callfn_GDExtensionSpxPenPenDown(const GDExtensionSpxPenPenDown fn, GdObj obj, GdBool move_by_mouse) { + fn(obj, move_by_mouse); +} +void cgo_callfn_GDExtensionSpxPenPenUp(const GDExtensionSpxPenPenUp fn, GdObj obj) { + fn(obj); +} +void cgo_callfn_GDExtensionSpxPenSetPenColorTo(const GDExtensionSpxPenSetPenColorTo fn, GdObj obj, GdColor color) { + fn(obj, color); +} +void cgo_callfn_GDExtensionSpxPenChangePenBy(const GDExtensionSpxPenChangePenBy fn, GdObj obj, GdInt property, GdFloat amount) { + fn(obj, property, amount); +} +void cgo_callfn_GDExtensionSpxPenSetPenTo(const GDExtensionSpxPenSetPenTo fn, GdObj obj, GdInt property, GdFloat value) { + fn(obj, property, value); +} +void cgo_callfn_GDExtensionSpxPenChangePenSizeBy(const GDExtensionSpxPenChangePenSizeBy fn, GdObj obj, GdFloat amount) { + fn(obj, amount); +} +void cgo_callfn_GDExtensionSpxPenSetPenSizeTo(const GDExtensionSpxPenSetPenSizeTo fn, GdObj obj, GdFloat size) { + fn(obj, size); +} +void cgo_callfn_GDExtensionSpxPenSetPenStampTexture(const GDExtensionSpxPenSetPenStampTexture fn, GdObj obj, GdString texture_path) { + fn(obj, texture_path); +} +void cgo_callfn_GDExtensionSpxPhysicRaycast(const GDExtensionSpxPhysicRaycast fn, GdVec2 from, GdVec2 to, GdInt collision_mask, GdObj* ret_val) { + fn(from, to, collision_mask,ret_val); +} +void cgo_callfn_GDExtensionSpxPhysicCheckCollision(const GDExtensionSpxPhysicCheckCollision fn, GdVec2 from, GdVec2 to, GdInt collision_mask, GdBool collide_with_areas, GdBool collide_with_bodies, GdBool* ret_val) { + fn(from, to, collision_mask, collide_with_areas, collide_with_bodies,ret_val); +} +void cgo_callfn_GDExtensionSpxPhysicCheckTouchedCameraBoundaries(const GDExtensionSpxPhysicCheckTouchedCameraBoundaries fn, GdObj obj, GdInt* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxPhysicCheckTouchedCameraBoundary(const GDExtensionSpxPhysicCheckTouchedCameraBoundary fn, GdObj obj, GdInt board_type, GdBool* ret_val) { + fn(obj, board_type,ret_val); +} +void cgo_callfn_GDExtensionSpxPhysicCheckNearestTouchedCameraBoundary(const GDExtensionSpxPhysicCheckNearestTouchedCameraBoundary fn, GdObj obj, GdInt* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxPhysicSetCollisionSystemType(const GDExtensionSpxPhysicSetCollisionSystemType fn, GdBool is_collision_by_alpha) { + fn(is_collision_by_alpha); +} +void cgo_callfn_GDExtensionSpxPhysicSetGlobalGravity(const GDExtensionSpxPhysicSetGlobalGravity fn, GdFloat gravity) { + fn(gravity); +} +void cgo_callfn_GDExtensionSpxPhysicGetGlobalGravity(const GDExtensionSpxPhysicGetGlobalGravity fn, GdFloat* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxPhysicSetGlobalFriction(const GDExtensionSpxPhysicSetGlobalFriction fn, GdFloat friction) { + fn(friction); +} +void cgo_callfn_GDExtensionSpxPhysicGetGlobalFriction(const GDExtensionSpxPhysicGetGlobalFriction fn, GdFloat* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxPhysicSetGlobalAirDrag(const GDExtensionSpxPhysicSetGlobalAirDrag fn, GdFloat air_drag) { + fn(air_drag); +} +void cgo_callfn_GDExtensionSpxPhysicGetGlobalAirDrag(const GDExtensionSpxPhysicGetGlobalAirDrag fn, GdFloat* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxPhysicCheckCollisionRect(const GDExtensionSpxPhysicCheckCollisionRect fn, GdVec2 pos, GdVec2 size, GdInt collision_mask, GdArray* ret_val) { + fn(pos, size, collision_mask,ret_val); +} +void cgo_callfn_GDExtensionSpxPhysicCheckCollisionCircle(const GDExtensionSpxPhysicCheckCollisionCircle fn, GdVec2 pos, GdFloat radius, GdInt collision_mask, GdArray* ret_val) { + fn(pos, radius, collision_mask,ret_val); +} +void cgo_callfn_GDExtensionSpxPhysicRaycastWithDetails(const GDExtensionSpxPhysicRaycastWithDetails fn, GdVec2 from, GdVec2 to, GdArray ignore_sprites, GdInt collision_mask, GdBool collide_with_areas, GdBool collide_with_bodies, GdArray* ret_val) { + fn(from, to, ignore_sprites, collision_mask, collide_with_areas, collide_with_bodies,ret_val); +} +void cgo_callfn_GDExtensionSpxPlatformSetStretchMode(const GDExtensionSpxPlatformSetStretchMode fn, GdBool enable) { + fn(enable); +} +void cgo_callfn_GDExtensionSpxPlatformSetStretchAspect(const GDExtensionSpxPlatformSetStretchAspect fn, GdBool is_keep) { + fn(is_keep); +} +void cgo_callfn_GDExtensionSpxPlatformSetStretchContentScale(const GDExtensionSpxPlatformSetStretchContentScale fn, GdInt width, GdInt height) { + fn(width, height); +} +void cgo_callfn_GDExtensionSpxPlatformSetWindowPosition(const GDExtensionSpxPlatformSetWindowPosition fn, GdVec2 pos) { + fn(pos); +} +void cgo_callfn_GDExtensionSpxPlatformGetWindowPosition(const GDExtensionSpxPlatformGetWindowPosition fn, GdVec2* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxPlatformSetWindowSize(const GDExtensionSpxPlatformSetWindowSize fn, GdInt width, GdInt height, GdBool with_content_scale) { + fn(width, height, with_content_scale); +} +void cgo_callfn_GDExtensionSpxPlatformGetWindowSize(const GDExtensionSpxPlatformGetWindowSize fn, GdVec2* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxPlatformSetWindowTitle(const GDExtensionSpxPlatformSetWindowTitle fn, GdString title) { + fn(title); +} +void cgo_callfn_GDExtensionSpxPlatformGetWindowTitle(const GDExtensionSpxPlatformGetWindowTitle fn, GdString* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxPlatformSetWindowFullscreen(const GDExtensionSpxPlatformSetWindowFullscreen fn, GdBool enable) { + fn(enable); +} +void cgo_callfn_GDExtensionSpxPlatformIsWindowFullscreen(const GDExtensionSpxPlatformIsWindowFullscreen fn, GdBool* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxPlatformSetDebugMode(const GDExtensionSpxPlatformSetDebugMode fn, GdBool enable) { + fn(enable); +} +void cgo_callfn_GDExtensionSpxPlatformIsDebugMode(const GDExtensionSpxPlatformIsDebugMode fn, GdBool* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxPlatformGetTimeScale(const GDExtensionSpxPlatformGetTimeScale fn, GdFloat* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxPlatformSetTimeScale(const GDExtensionSpxPlatformSetTimeScale fn, GdFloat time_scale) { + fn(time_scale); +} +void cgo_callfn_GDExtensionSpxPlatformGetPersistantDataDir(const GDExtensionSpxPlatformGetPersistantDataDir fn, GdString* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxPlatformSetPersistantDataDir(const GDExtensionSpxPlatformSetPersistantDataDir fn, GdString path) { + fn(path); +} +void cgo_callfn_GDExtensionSpxPlatformIsInPersistantDataDir(const GDExtensionSpxPlatformIsInPersistantDataDir fn, GdString path, GdBool* ret_val) { + fn(path,ret_val); +} +void cgo_callfn_GDExtensionSpxResCreateAnimation(const GDExtensionSpxResCreateAnimation fn, GdString p_sprite_type, GdString p_anim_name, GdString p_json_ctx, GdInt fps, GdBool is_atlas) { + fn(p_sprite_type, p_anim_name, p_json_ctx, fps, is_atlas); +} +void cgo_callfn_GDExtensionSpxResSetLoadMode(const GDExtensionSpxResSetLoadMode fn, GdBool is_direct_mode) { + fn(is_direct_mode); +} +void cgo_callfn_GDExtensionSpxResGetLoadMode(const GDExtensionSpxResGetLoadMode fn, GdBool* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxResGetBoundFromAlpha(const GDExtensionSpxResGetBoundFromAlpha fn, GdString p_path, GdRect2* ret_val) { + fn(p_path,ret_val); +} +void cgo_callfn_GDExtensionSpxResGetImageSize(const GDExtensionSpxResGetImageSize fn, GdString p_path, GdVec2* ret_val) { + fn(p_path,ret_val); +} +void cgo_callfn_GDExtensionSpxResReadAllText(const GDExtensionSpxResReadAllText fn, GdString p_path, GdString* ret_val) { + fn(p_path,ret_val); +} +void cgo_callfn_GDExtensionSpxResHasFile(const GDExtensionSpxResHasFile fn, GdString p_path, GdBool* ret_val) { + fn(p_path,ret_val); +} +void cgo_callfn_GDExtensionSpxResReloadTexture(const GDExtensionSpxResReloadTexture fn, GdString path) { + fn(path); +} +void cgo_callfn_GDExtensionSpxResFreeStr(const GDExtensionSpxResFreeStr fn, GdString str) { + fn(str); +} +void cgo_callfn_GDExtensionSpxResSetDefaultFont(const GDExtensionSpxResSetDefaultFont fn, GdString font_path) { + fn(font_path); +} +void cgo_callfn_GDExtensionSpxSceneChangeSceneToFile(const GDExtensionSpxSceneChangeSceneToFile fn, GdString path) { + fn(path); +} +void cgo_callfn_GDExtensionSpxSceneDestroyAllSprites(const GDExtensionSpxSceneDestroyAllSprites fn) { + fn(); +} +void cgo_callfn_GDExtensionSpxSceneReloadCurrentScene(const GDExtensionSpxSceneReloadCurrentScene fn, GdInt* ret_val) { + fn(ret_val); +} +void cgo_callfn_GDExtensionSpxSceneUnloadCurrentScene(const GDExtensionSpxSceneUnloadCurrentScene fn) { + fn(); +} +void cgo_callfn_GDExtensionSpxSceneClearPureSprites(const GDExtensionSpxSceneClearPureSprites fn) { + fn(); +} +void cgo_callfn_GDExtensionSpxSceneCreatePureSprite(const GDExtensionSpxSceneCreatePureSprite fn, GdString texture_path, GdVec2 pos, GdInt zindex) { + fn(texture_path, pos, zindex); +} +void cgo_callfn_GDExtensionSpxSceneDestroyPureSprite(const GDExtensionSpxSceneDestroyPureSprite fn, GdObj id) { + fn(id); +} +void cgo_callfn_GDExtensionSpxSceneCreateRenderSprite(const GDExtensionSpxSceneCreateRenderSprite fn, GdString texture_path, GdVec2 pos, GdFloat degree, GdVec2 scale, GdInt zindex, GdVec2 pivot, GdObj* ret_val) { + fn(texture_path, pos, degree, scale, zindex, pivot,ret_val); +} +void cgo_callfn_GDExtensionSpxSceneCreateStaticSprite(const GDExtensionSpxSceneCreateStaticSprite fn, GdString texture_path, GdVec2 pos, GdFloat degree, GdVec2 scale, GdInt zindex, GdVec2 pivot, GdInt collider_type, GdVec2 collider_pivot, GdArray collider_params, GdObj* ret_val) { + fn(texture_path, pos, degree, scale, zindex, pivot, collider_type, collider_pivot, collider_params,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetDontDestroyOnLoad(const GDExtensionSpxSpriteSetDontDestroyOnLoad fn, GdObj obj) { + fn(obj); +} +void cgo_callfn_GDExtensionSpxSpriteSetProcess(const GDExtensionSpxSpriteSetProcess fn, GdObj obj, GdBool is_on) { + fn(obj, is_on); +} +void cgo_callfn_GDExtensionSpxSpriteSetPhysicProcess(const GDExtensionSpxSpriteSetPhysicProcess fn, GdObj obj, GdBool is_on) { + fn(obj, is_on); +} +void cgo_callfn_GDExtensionSpxSpriteSetTypeName(const GDExtensionSpxSpriteSetTypeName fn, GdObj obj, GdString type_name) { + fn(obj, type_name); +} +void cgo_callfn_GDExtensionSpxSpriteSetPivot(const GDExtensionSpxSpriteSetPivot fn, GdObj obj, GdVec2 pivot) { + fn(obj, pivot); +} +void cgo_callfn_GDExtensionSpxSpriteGetPivot(const GDExtensionSpxSpriteGetPivot fn, GdObj obj, GdVec2* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetChildPosition(const GDExtensionSpxSpriteSetChildPosition fn, GdObj obj, GdString path, GdVec2 pos) { + fn(obj, path, pos); +} +void cgo_callfn_GDExtensionSpxSpriteGetChildPosition(const GDExtensionSpxSpriteGetChildPosition fn, GdObj obj, GdString path, GdVec2* ret_val) { + fn(obj, path,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetChildRotation(const GDExtensionSpxSpriteSetChildRotation fn, GdObj obj, GdString path, GdFloat rot) { + fn(obj, path, rot); +} +void cgo_callfn_GDExtensionSpxSpriteGetChildRotation(const GDExtensionSpxSpriteGetChildRotation fn, GdObj obj, GdString path, GdFloat* ret_val) { + fn(obj, path,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetChildScale(const GDExtensionSpxSpriteSetChildScale fn, GdObj obj, GdString path, GdVec2 scale) { + fn(obj, path, scale); +} +void cgo_callfn_GDExtensionSpxSpriteGetChildScale(const GDExtensionSpxSpriteGetChildScale fn, GdObj obj, GdString path, GdVec2* ret_val) { + fn(obj, path,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteCheckCollision(const GDExtensionSpxSpriteCheckCollision fn, GdObj obj, GdObj target, GdBool is_src_trigger, GdBool is_dst_trigger, GdBool* ret_val) { + fn(obj, target, is_src_trigger, is_dst_trigger,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteCheckCollisionWithPoint(const GDExtensionSpxSpriteCheckCollisionWithPoint fn, GdObj obj, GdVec2 point, GdBool is_trigger, GdBool* ret_val) { + fn(obj, point, is_trigger,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteCreateBackdrop(const GDExtensionSpxSpriteCreateBackdrop fn, GdString path, GdObj* ret_val) { + fn(path,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteCreateSprite(const GDExtensionSpxSpriteCreateSprite fn, GdString path, GdVec2 pos, GdObj* ret_val) { + fn(path, pos,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteCloneSprite(const GDExtensionSpxSpriteCloneSprite fn, GdObj obj, GdObj* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteDestroySprite(const GDExtensionSpxSpriteDestroySprite fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteIsSpriteAlive(const GDExtensionSpxSpriteIsSpriteAlive fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetPosition(const GDExtensionSpxSpriteSetPosition fn, GdObj obj, GdVec2 pos) { + fn(obj, pos); +} +void cgo_callfn_GDExtensionSpxSpriteGetPosition(const GDExtensionSpxSpriteGetPosition fn, GdObj obj, GdVec2* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetRotation(const GDExtensionSpxSpriteSetRotation fn, GdObj obj, GdFloat rot) { + fn(obj, rot); +} +void cgo_callfn_GDExtensionSpxSpriteGetRotation(const GDExtensionSpxSpriteGetRotation fn, GdObj obj, GdFloat* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetScale(const GDExtensionSpxSpriteSetScale fn, GdObj obj, GdVec2 scale) { + fn(obj, scale); +} +void cgo_callfn_GDExtensionSpxSpriteGetScale(const GDExtensionSpxSpriteGetScale fn, GdObj obj, GdVec2* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetRenderScale(const GDExtensionSpxSpriteSetRenderScale fn, GdObj obj, GdVec2 scale) { + fn(obj, scale); +} +void cgo_callfn_GDExtensionSpxSpriteGetRenderScale(const GDExtensionSpxSpriteGetRenderScale fn, GdObj obj, GdVec2* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetColor(const GDExtensionSpxSpriteSetColor fn, GdObj obj, GdColor color) { + fn(obj, color); +} +void cgo_callfn_GDExtensionSpxSpriteGetColor(const GDExtensionSpxSpriteGetColor fn, GdObj obj, GdColor* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetMaterialShader(const GDExtensionSpxSpriteSetMaterialShader fn, GdObj obj, GdString path) { + fn(obj, path); +} +void cgo_callfn_GDExtensionSpxSpriteGetMaterialShader(const GDExtensionSpxSpriteGetMaterialShader fn, GdObj obj, GdString* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetMaterialParams(const GDExtensionSpxSpriteSetMaterialParams fn, GdObj obj, GdString effect, GdFloat amount) { + fn(obj, effect, amount); +} +void cgo_callfn_GDExtensionSpxSpriteGetMaterialParams(const GDExtensionSpxSpriteGetMaterialParams fn, GdObj obj, GdString effect, GdFloat* ret_val) { + fn(obj, effect,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetMaterialParamsVec(const GDExtensionSpxSpriteSetMaterialParamsVec fn, GdObj obj, GdString effect, GdFloat x, GdFloat y, GdFloat z, GdFloat w) { + fn(obj, effect, x, y, z, w); +} +void cgo_callfn_GDExtensionSpxSpriteSetMaterialParamsVec4(const GDExtensionSpxSpriteSetMaterialParamsVec4 fn, GdObj obj, GdString effect, GdVec4 vec4) { + fn(obj, effect, vec4); +} +void cgo_callfn_GDExtensionSpxSpriteGetMaterialParamsVec4(const GDExtensionSpxSpriteGetMaterialParamsVec4 fn, GdObj obj, GdString effect, GdVec4* ret_val) { + fn(obj, effect,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetMaterialParamsColor(const GDExtensionSpxSpriteSetMaterialParamsColor fn, GdObj obj, GdString effect, GdColor color) { + fn(obj, effect, color); +} +void cgo_callfn_GDExtensionSpxSpriteGetMaterialParamsColor(const GDExtensionSpxSpriteGetMaterialParamsColor fn, GdObj obj, GdString effect, GdColor* ret_val) { + fn(obj, effect,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetTextureAtlas(const GDExtensionSpxSpriteSetTextureAtlas fn, GdObj obj, GdString path, GdRect2 rect2) { + fn(obj, path, rect2); +} +void cgo_callfn_GDExtensionSpxSpriteSetTexture(const GDExtensionSpxSpriteSetTexture fn, GdObj obj, GdString path) { + fn(obj, path); +} +void cgo_callfn_GDExtensionSpxSpriteSetTextureAtlasDirect(const GDExtensionSpxSpriteSetTextureAtlasDirect fn, GdObj obj, GdString path, GdRect2 rect2) { + fn(obj, path, rect2); +} +void cgo_callfn_GDExtensionSpxSpriteSetTextureDirect(const GDExtensionSpxSpriteSetTextureDirect fn, GdObj obj, GdString path) { + fn(obj, path); +} +void cgo_callfn_GDExtensionSpxSpriteGetTexture(const GDExtensionSpxSpriteGetTexture fn, GdObj obj, GdString* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetVisible(const GDExtensionSpxSpriteSetVisible fn, GdObj obj, GdBool visible) { + fn(obj, visible); +} +void cgo_callfn_GDExtensionSpxSpriteGetVisible(const GDExtensionSpxSpriteGetVisible fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteGetZIndex(const GDExtensionSpxSpriteGetZIndex fn, GdObj obj, GdInt* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetZIndex(const GDExtensionSpxSpriteSetZIndex fn, GdObj obj, GdInt z) { + fn(obj, z); +} +void cgo_callfn_GDExtensionSpxSpritePlayAnim(const GDExtensionSpxSpritePlayAnim fn, GdObj obj, GdString p_name, GdFloat p_speed, GdBool isLoop, GdBool p_revert) { + fn(obj, p_name, p_speed, isLoop, p_revert); +} +void cgo_callfn_GDExtensionSpxSpritePlayBackwardsAnim(const GDExtensionSpxSpritePlayBackwardsAnim fn, GdObj obj, GdString p_name) { + fn(obj, p_name); +} +void cgo_callfn_GDExtensionSpxSpritePauseAnim(const GDExtensionSpxSpritePauseAnim fn, GdObj obj) { + fn(obj); +} +void cgo_callfn_GDExtensionSpxSpriteStopAnim(const GDExtensionSpxSpriteStopAnim fn, GdObj obj) { + fn(obj); +} +void cgo_callfn_GDExtensionSpxSpriteIsPlayingAnim(const GDExtensionSpxSpriteIsPlayingAnim fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetAnim(const GDExtensionSpxSpriteSetAnim fn, GdObj obj, GdString p_name) { + fn(obj, p_name); +} +void cgo_callfn_GDExtensionSpxSpriteGetAnim(const GDExtensionSpxSpriteGetAnim fn, GdObj obj, GdString* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetAnimFrame(const GDExtensionSpxSpriteSetAnimFrame fn, GdObj obj, GdInt p_frame) { + fn(obj, p_frame); +} +void cgo_callfn_GDExtensionSpxSpriteGetAnimFrame(const GDExtensionSpxSpriteGetAnimFrame fn, GdObj obj, GdInt* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetAnimSpeedScale(const GDExtensionSpxSpriteSetAnimSpeedScale fn, GdObj obj, GdFloat p_speed_scale) { + fn(obj, p_speed_scale); +} +void cgo_callfn_GDExtensionSpxSpriteGetAnimSpeedScale(const GDExtensionSpxSpriteGetAnimSpeedScale fn, GdObj obj, GdFloat* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteGetAnimPlayingSpeed(const GDExtensionSpxSpriteGetAnimPlayingSpeed fn, GdObj obj, GdFloat* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetAnimCentered(const GDExtensionSpxSpriteSetAnimCentered fn, GdObj obj, GdBool p_center) { + fn(obj, p_center); +} +void cgo_callfn_GDExtensionSpxSpriteIsAnimCentered(const GDExtensionSpxSpriteIsAnimCentered fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetAnimOffset(const GDExtensionSpxSpriteSetAnimOffset fn, GdObj obj, GdVec2 p_offset) { + fn(obj, p_offset); +} +void cgo_callfn_GDExtensionSpxSpriteGetAnimOffset(const GDExtensionSpxSpriteGetAnimOffset fn, GdObj obj, GdVec2* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetAnimFlipH(const GDExtensionSpxSpriteSetAnimFlipH fn, GdObj obj, GdBool p_flip) { + fn(obj, p_flip); +} +void cgo_callfn_GDExtensionSpxSpriteIsAnimFlippedH(const GDExtensionSpxSpriteIsAnimFlippedH fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetAnimFlipV(const GDExtensionSpxSpriteSetAnimFlipV fn, GdObj obj, GdBool p_flip) { + fn(obj, p_flip); +} +void cgo_callfn_GDExtensionSpxSpriteIsAnimFlippedV(const GDExtensionSpxSpriteIsAnimFlippedV fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteGetCurrentAnimName(const GDExtensionSpxSpriteGetCurrentAnimName fn, GdObj obj, GdString* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetVelocity(const GDExtensionSpxSpriteSetVelocity fn, GdObj obj, GdVec2 velocity) { + fn(obj, velocity); +} +void cgo_callfn_GDExtensionSpxSpriteGetVelocity(const GDExtensionSpxSpriteGetVelocity fn, GdObj obj, GdVec2* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteIsOnFloor(const GDExtensionSpxSpriteIsOnFloor fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteIsOnFloorOnly(const GDExtensionSpxSpriteIsOnFloorOnly fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteIsOnWall(const GDExtensionSpxSpriteIsOnWall fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteIsOnWallOnly(const GDExtensionSpxSpriteIsOnWallOnly fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteIsOnCeiling(const GDExtensionSpxSpriteIsOnCeiling fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteIsOnCeilingOnly(const GDExtensionSpxSpriteIsOnCeilingOnly fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteGetLastMotion(const GDExtensionSpxSpriteGetLastMotion fn, GdObj obj, GdVec2* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteGetPositionDelta(const GDExtensionSpxSpriteGetPositionDelta fn, GdObj obj, GdVec2* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteGetFloorNormal(const GDExtensionSpxSpriteGetFloorNormal fn, GdObj obj, GdVec2* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteGetWallNormal(const GDExtensionSpxSpriteGetWallNormal fn, GdObj obj, GdVec2* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteGetRealVelocity(const GDExtensionSpxSpriteGetRealVelocity fn, GdObj obj, GdVec2* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteMoveAndSlide(const GDExtensionSpxSpriteMoveAndSlide fn, GdObj obj) { + fn(obj); +} +void cgo_callfn_GDExtensionSpxSpriteSetGravity(const GDExtensionSpxSpriteSetGravity fn, GdObj obj, GdFloat gravity) { + fn(obj, gravity); +} +void cgo_callfn_GDExtensionSpxSpriteGetGravity(const GDExtensionSpxSpriteGetGravity fn, GdObj obj, GdFloat* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetMass(const GDExtensionSpxSpriteSetMass fn, GdObj obj, GdFloat mass) { + fn(obj, mass); +} +void cgo_callfn_GDExtensionSpxSpriteGetMass(const GDExtensionSpxSpriteGetMass fn, GdObj obj, GdFloat* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteAddForce(const GDExtensionSpxSpriteAddForce fn, GdObj obj, GdVec2 force) { + fn(obj, force); +} +void cgo_callfn_GDExtensionSpxSpriteAddImpulse(const GDExtensionSpxSpriteAddImpulse fn, GdObj obj, GdVec2 impulse) { + fn(obj, impulse); +} +void cgo_callfn_GDExtensionSpxSpriteSetPhysicsMode(const GDExtensionSpxSpriteSetPhysicsMode fn, GdObj obj, GdInt mode) { + fn(obj, mode); +} +void cgo_callfn_GDExtensionSpxSpriteGetPhysicsMode(const GDExtensionSpxSpriteGetPhysicsMode fn, GdObj obj, GdInt* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetUseGravity(const GDExtensionSpxSpriteSetUseGravity fn, GdObj obj, GdBool enabled) { + fn(obj, enabled); +} +void cgo_callfn_GDExtensionSpxSpriteIsUseGravity(const GDExtensionSpxSpriteIsUseGravity fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetGravityScale(const GDExtensionSpxSpriteSetGravityScale fn, GdObj obj, GdFloat scale) { + fn(obj, scale); +} +void cgo_callfn_GDExtensionSpxSpriteGetGravityScale(const GDExtensionSpxSpriteGetGravityScale fn, GdObj obj, GdFloat* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetDrag(const GDExtensionSpxSpriteSetDrag fn, GdObj obj, GdFloat drag) { + fn(obj, drag); +} +void cgo_callfn_GDExtensionSpxSpriteGetDrag(const GDExtensionSpxSpriteGetDrag fn, GdObj obj, GdFloat* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetFriction(const GDExtensionSpxSpriteSetFriction fn, GdObj obj, GdFloat friction) { + fn(obj, friction); +} +void cgo_callfn_GDExtensionSpxSpriteGetFriction(const GDExtensionSpxSpriteGetFriction fn, GdObj obj, GdFloat* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetCollisionLayer(const GDExtensionSpxSpriteSetCollisionLayer fn, GdObj obj, GdInt layer) { + fn(obj, layer); +} +void cgo_callfn_GDExtensionSpxSpriteGetCollisionLayer(const GDExtensionSpxSpriteGetCollisionLayer fn, GdObj obj, GdInt* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetCollisionMask(const GDExtensionSpxSpriteSetCollisionMask fn, GdObj obj, GdInt mask) { + fn(obj, mask); +} +void cgo_callfn_GDExtensionSpxSpriteGetCollisionMask(const GDExtensionSpxSpriteGetCollisionMask fn, GdObj obj, GdInt* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetTriggerLayer(const GDExtensionSpxSpriteSetTriggerLayer fn, GdObj obj, GdInt layer) { + fn(obj, layer); +} +void cgo_callfn_GDExtensionSpxSpriteGetTriggerLayer(const GDExtensionSpxSpriteGetTriggerLayer fn, GdObj obj, GdInt* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetTriggerMask(const GDExtensionSpxSpriteSetTriggerMask fn, GdObj obj, GdInt mask) { + fn(obj, mask); +} +void cgo_callfn_GDExtensionSpxSpriteGetTriggerMask(const GDExtensionSpxSpriteGetTriggerMask fn, GdObj obj, GdInt* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetColliderRect(const GDExtensionSpxSpriteSetColliderRect fn, GdObj obj, GdVec2 center, GdVec2 size) { + fn(obj, center, size); +} +void cgo_callfn_GDExtensionSpxSpriteSetColliderCircle(const GDExtensionSpxSpriteSetColliderCircle fn, GdObj obj, GdVec2 center, GdFloat radius) { + fn(obj, center, radius); +} +void cgo_callfn_GDExtensionSpxSpriteSetColliderCapsule(const GDExtensionSpxSpriteSetColliderCapsule fn, GdObj obj, GdVec2 center, GdVec2 size) { + fn(obj, center, size); +} +void cgo_callfn_GDExtensionSpxSpriteSetCollisionEnabled(const GDExtensionSpxSpriteSetCollisionEnabled fn, GdObj obj, GdBool enabled) { + fn(obj, enabled); +} +void cgo_callfn_GDExtensionSpxSpriteIsCollisionEnabled(const GDExtensionSpxSpriteIsCollisionEnabled fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteSetTriggerRect(const GDExtensionSpxSpriteSetTriggerRect fn, GdObj obj, GdVec2 center, GdVec2 size) { + fn(obj, center, size); +} +void cgo_callfn_GDExtensionSpxSpriteSetTriggerCircle(const GDExtensionSpxSpriteSetTriggerCircle fn, GdObj obj, GdVec2 center, GdFloat radius) { + fn(obj, center, radius); +} +void cgo_callfn_GDExtensionSpxSpriteSetTriggerCapsule(const GDExtensionSpxSpriteSetTriggerCapsule fn, GdObj obj, GdVec2 center, GdVec2 size) { + fn(obj, center, size); +} +void cgo_callfn_GDExtensionSpxSpriteSetTriggerEnabled(const GDExtensionSpxSpriteSetTriggerEnabled fn, GdObj obj, GdBool trigger) { + fn(obj, trigger); +} +void cgo_callfn_GDExtensionSpxSpriteIsTriggerEnabled(const GDExtensionSpxSpriteIsTriggerEnabled fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteCheckCollisionByColor(const GDExtensionSpxSpriteCheckCollisionByColor fn, GdObj obj, GdColor color, GdFloat color_threshold, GdFloat alpha_threshold, GdBool* ret_val) { + fn(obj, color, color_threshold, alpha_threshold,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteCheckCollisionByAlpha(const GDExtensionSpxSpriteCheckCollisionByAlpha fn, GdObj obj, GdFloat alpha_threshold, GdBool* ret_val) { + fn(obj, alpha_threshold,ret_val); +} +void cgo_callfn_GDExtensionSpxSpriteCheckCollisionWithSpriteByAlpha(const GDExtensionSpxSpriteCheckCollisionWithSpriteByAlpha fn, GdObj obj, GdObj obj_b, GdFloat alpha_threshold, GdBool* ret_val) { + fn(obj, obj_b, alpha_threshold,ret_val); +} +void cgo_callfn_GDExtensionSpxTilemapOpenDrawTilesWithSize(const GDExtensionSpxTilemapOpenDrawTilesWithSize fn, GdInt tile_size) { + fn(tile_size); +} +void cgo_callfn_GDExtensionSpxTilemapOpenDrawTiles(const GDExtensionSpxTilemapOpenDrawTiles fn) { + fn(); +} +void cgo_callfn_GDExtensionSpxTilemapSetLayerIndex(const GDExtensionSpxTilemapSetLayerIndex fn, GdInt index) { + fn(index); +} +void cgo_callfn_GDExtensionSpxTilemapSetTile(const GDExtensionSpxTilemapSetTile fn, GdString texture_path, GdBool with_collision) { + fn(texture_path, with_collision); +} +void cgo_callfn_GDExtensionSpxTilemapSetTileWithCollisionInfo(const GDExtensionSpxTilemapSetTileWithCollisionInfo fn, GdString texture_path, GdArray collision_points) { + fn(texture_path, collision_points); +} +void cgo_callfn_GDExtensionSpxTilemapSetLayerOffset(const GDExtensionSpxTilemapSetLayerOffset fn, GdInt index, GdVec2 offset) { + fn(index, offset); +} +void cgo_callfn_GDExtensionSpxTilemapGetLayerOffset(const GDExtensionSpxTilemapGetLayerOffset fn, GdInt index, GdVec2* ret_val) { + fn(index,ret_val); +} +void cgo_callfn_GDExtensionSpxTilemapPlaceTiles(const GDExtensionSpxTilemapPlaceTiles fn, GdArray positions, GdString texture_path) { + fn(positions, texture_path); +} +void cgo_callfn_GDExtensionSpxTilemapPlaceTilesWithLayer(const GDExtensionSpxTilemapPlaceTilesWithLayer fn, GdArray positions, GdString texture_path, GdInt layer_index) { + fn(positions, texture_path, layer_index); +} +void cgo_callfn_GDExtensionSpxTilemapPlaceTile(const GDExtensionSpxTilemapPlaceTile fn, GdVec2 pos, GdString texture_path) { + fn(pos, texture_path); +} +void cgo_callfn_GDExtensionSpxTilemapPlaceTileWithLayer(const GDExtensionSpxTilemapPlaceTileWithLayer fn, GdVec2 pos, GdString texture_path, GdInt layer_index) { + fn(pos, texture_path, layer_index); +} +void cgo_callfn_GDExtensionSpxTilemapEraseTile(const GDExtensionSpxTilemapEraseTile fn, GdVec2 pos) { + fn(pos); +} +void cgo_callfn_GDExtensionSpxTilemapEraseTileWithLayer(const GDExtensionSpxTilemapEraseTileWithLayer fn, GdVec2 pos, GdInt layer_index) { + fn(pos, layer_index); +} +void cgo_callfn_GDExtensionSpxTilemapGetTile(const GDExtensionSpxTilemapGetTile fn, GdVec2 pos, GdString* ret_val) { + fn(pos,ret_val); +} +void cgo_callfn_GDExtensionSpxTilemapGetTileWithLayer(const GDExtensionSpxTilemapGetTileWithLayer fn, GdVec2 pos, GdInt layer_index, GdString* ret_val) { + fn(pos, layer_index,ret_val); +} +void cgo_callfn_GDExtensionSpxTilemapCloseDrawTiles(const GDExtensionSpxTilemapCloseDrawTiles fn) { + fn(); +} +void cgo_callfn_GDExtensionSpxTilemapExitTilemapEditorMode(const GDExtensionSpxTilemapExitTilemapEditorMode fn) { + fn(); +} +void cgo_callfn_GDExtensionSpxTilemapparserLoadTilemap(const GDExtensionSpxTilemapparserLoadTilemap fn, GdString json_path) { + fn(json_path); +} +void cgo_callfn_GDExtensionSpxTilemapparserUnloadTilemap(const GDExtensionSpxTilemapparserUnloadTilemap fn, GdString name) { + fn(name); +} +void cgo_callfn_GDExtensionSpxTilemapparserDestroyAllTilemaps(const GDExtensionSpxTilemapparserDestroyAllTilemaps fn) { + fn(); +} +void cgo_callfn_GDExtensionSpxTilemapparserHasTilemap(const GDExtensionSpxTilemapparserHasTilemap fn, GdString name, GdBool* ret_val) { + fn(name,ret_val); +} +void cgo_callfn_GDExtensionSpxTilemapparserGetTilemapLayerCount(const GDExtensionSpxTilemapparserGetTilemapLayerCount fn, GdString name, GdInt* ret_val) { + fn(name,ret_val); +} +void cgo_callfn_GDExtensionSpxUiBindNode(const GDExtensionSpxUiBindNode fn, GdObj obj, GdString rel_path, GdObj* ret_val) { + fn(obj, rel_path,ret_val); +} +void cgo_callfn_GDExtensionSpxUiCreateNode(const GDExtensionSpxUiCreateNode fn, GdString path, GdObj* ret_val) { + fn(path,ret_val); +} +void cgo_callfn_GDExtensionSpxUiCreateButton(const GDExtensionSpxUiCreateButton fn, GdString path, GdString text, GdObj* ret_val) { + fn(path, text,ret_val); +} +void cgo_callfn_GDExtensionSpxUiCreateLabel(const GDExtensionSpxUiCreateLabel fn, GdString path, GdString text, GdObj* ret_val) { + fn(path, text,ret_val); +} +void cgo_callfn_GDExtensionSpxUiCreateImage(const GDExtensionSpxUiCreateImage fn, GdString path, GdObj* ret_val) { + fn(path,ret_val); +} +void cgo_callfn_GDExtensionSpxUiCreateToggle(const GDExtensionSpxUiCreateToggle fn, GdString path, GdBool value, GdObj* ret_val) { + fn(path, value,ret_val); +} +void cgo_callfn_GDExtensionSpxUiCreateSlider(const GDExtensionSpxUiCreateSlider fn, GdString path, GdFloat value, GdObj* ret_val) { + fn(path, value,ret_val); +} +void cgo_callfn_GDExtensionSpxUiCreateInput(const GDExtensionSpxUiCreateInput fn, GdString path, GdString text, GdObj* ret_val) { + fn(path, text,ret_val); +} +void cgo_callfn_GDExtensionSpxUiDestroyNode(const GDExtensionSpxUiDestroyNode fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiGetType(const GDExtensionSpxUiGetType fn, GdObj obj, GdInt* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiSetText(const GDExtensionSpxUiSetText fn, GdObj obj, GdString text) { + fn(obj, text); +} +void cgo_callfn_GDExtensionSpxUiGetText(const GDExtensionSpxUiGetText fn, GdObj obj, GdString* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiSetTexture(const GDExtensionSpxUiSetTexture fn, GdObj obj, GdString path) { + fn(obj, path); +} +void cgo_callfn_GDExtensionSpxUiGetTexture(const GDExtensionSpxUiGetTexture fn, GdObj obj, GdString* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiSetColor(const GDExtensionSpxUiSetColor fn, GdObj obj, GdColor color) { + fn(obj, color); +} +void cgo_callfn_GDExtensionSpxUiGetColor(const GDExtensionSpxUiGetColor fn, GdObj obj, GdColor* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiSetFontSize(const GDExtensionSpxUiSetFontSize fn, GdObj obj, GdInt size) { + fn(obj, size); +} +void cgo_callfn_GDExtensionSpxUiGetFontSize(const GDExtensionSpxUiGetFontSize fn, GdObj obj, GdInt* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiSetVisible(const GDExtensionSpxUiSetVisible fn, GdObj obj, GdBool visible) { + fn(obj, visible); +} +void cgo_callfn_GDExtensionSpxUiGetVisible(const GDExtensionSpxUiGetVisible fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiSetInteractable(const GDExtensionSpxUiSetInteractable fn, GdObj obj, GdBool interactable) { + fn(obj, interactable); +} +void cgo_callfn_GDExtensionSpxUiGetInteractable(const GDExtensionSpxUiGetInteractable fn, GdObj obj, GdBool* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiSetRect(const GDExtensionSpxUiSetRect fn, GdObj obj, GdRect2 rect) { + fn(obj, rect); +} +void cgo_callfn_GDExtensionSpxUiGetRect(const GDExtensionSpxUiGetRect fn, GdObj obj, GdRect2* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiGetLayoutDirection(const GDExtensionSpxUiGetLayoutDirection fn, GdObj obj, GdInt* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiSetLayoutDirection(const GDExtensionSpxUiSetLayoutDirection fn, GdObj obj, GdInt value) { + fn(obj, value); +} +void cgo_callfn_GDExtensionSpxUiGetLayoutMode(const GDExtensionSpxUiGetLayoutMode fn, GdObj obj, GdInt* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiSetLayoutMode(const GDExtensionSpxUiSetLayoutMode fn, GdObj obj, GdInt value) { + fn(obj, value); +} +void cgo_callfn_GDExtensionSpxUiGetAnchorsPreset(const GDExtensionSpxUiGetAnchorsPreset fn, GdObj obj, GdInt* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiSetAnchorsPreset(const GDExtensionSpxUiSetAnchorsPreset fn, GdObj obj, GdInt value) { + fn(obj, value); +} +void cgo_callfn_GDExtensionSpxUiGetScale(const GDExtensionSpxUiGetScale fn, GdObj obj, GdVec2* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiSetScale(const GDExtensionSpxUiSetScale fn, GdObj obj, GdVec2 value) { + fn(obj, value); +} +void cgo_callfn_GDExtensionSpxUiGetPosition(const GDExtensionSpxUiGetPosition fn, GdObj obj, GdVec2* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiSetPosition(const GDExtensionSpxUiSetPosition fn, GdObj obj, GdVec2 value) { + fn(obj, value); +} +void cgo_callfn_GDExtensionSpxUiGetSize(const GDExtensionSpxUiGetSize fn, GdObj obj, GdVec2* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiSetSize(const GDExtensionSpxUiSetSize fn, GdObj obj, GdVec2 value) { + fn(obj, value); +} +void cgo_callfn_GDExtensionSpxUiGetGlobalPosition(const GDExtensionSpxUiGetGlobalPosition fn, GdObj obj, GdVec2* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiSetGlobalPosition(const GDExtensionSpxUiSetGlobalPosition fn, GdObj obj, GdVec2 value) { + fn(obj, value); +} +void cgo_callfn_GDExtensionSpxUiGetRotation(const GDExtensionSpxUiGetRotation fn, GdObj obj, GdFloat* ret_val) { + fn(obj,ret_val); +} +void cgo_callfn_GDExtensionSpxUiSetRotation(const GDExtensionSpxUiSetRotation fn, GdObj obj, GdFloat value) { + fn(obj, value); +} +void cgo_callfn_GDExtensionSpxUiGetFlip(const GDExtensionSpxUiGetFlip fn, GdObj obj, GdBool horizontal, GdBool* ret_val) { + fn(obj, horizontal,ret_val); +} +void cgo_callfn_GDExtensionSpxUiSetFlip(const GDExtensionSpxUiSetFlip fn, GdObj obj, GdBool horizontal, GdBool is_flip) { + fn(obj, horizontal, is_flip); +} +#endif diff --git a/pkg/gdspx/internal/ffi/gdextension_spx_ext.h b/pkg/gdspx/internal/ffi/gdextension_spx_ext.h index 91ad694c..8a007125 100644 --- a/pkg/gdspx/internal/ffi/gdextension_spx_ext.h +++ b/pkg/gdspx/internal/ffi/gdextension_spx_ext.h @@ -1,221 +1,221 @@ -/**************************************************************************/ -/* gdextension_spx_ext.h */ -/**************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/**************************************************************************/ -/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ -/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/**************************************************************************/ - -#ifndef GDEXTENSION_SPX_EXT_H -#define GDEXTENSION_SPX_EXT_H - -#include "gdextension_interface.h" -#ifndef NOT_GODOT_ENGINE -#include "core/variant/variant.h" -extern void gdextension_spx_setup_interface(); -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef GDExtensionConstStringPtr GdString; -typedef GDExtensionInt GdInt; -typedef GDExtensionInt GdObj; -typedef GDExtensionBool GdBool; -typedef real_t GdFloat; -typedef Vector4 GdVec4; -typedef Vector3 GdVec3; -typedef Vector2 GdVec2; -typedef Color GdColor; -typedef Rect2 GdRect2; - -typedef struct { - int32_t size; - int32_t type; - void* data; -} GdArrayInfo; - -typedef GdArrayInfo* GdArray; - -typedef enum { - GD_ARRAY_TYPE_UNKNOWN = 0, - GD_ARRAY_TYPE_INT64 = 1, - GD_ARRAY_TYPE_FLOAT = 2, - GD_ARRAY_TYPE_BOOL = 3, - GD_ARRAY_TYPE_STRING = 4, - GD_ARRAY_TYPE_BYTE = 5, - GD_ARRAY_TYPE_GDOBJ = 6, -} GdArrayType; - -typedef struct { - // 0 is return value - // 1-7 are arguments - GdVec4 Ret; - GdVec4 Arg0; - GdVec4 Arg1; - GdVec4 Arg2; - GdVec4 Arg3; - GdVec4 Arg4; - GdVec4 Arg5; - GdVec4 Arg6; - GdVec4 Arg7; -} CallFrameArgs; - -typedef void *GDExtensionSpxCallbackInfoPtr; -typedef void (*GDExtensionSpxGlobalRegisterCallbacks)(GDExtensionSpxCallbackInfoPtr callback_ptr); - -// string -typedef void (*GDExtensionSpxStringNewWithLatin1Chars)(GDExtensionUninitializedStringPtr r_dest, const char *p_contents); -typedef void (*GDExtensionSpxStringNewWithUtf8Chars)(GDExtensionUninitializedStringPtr r_dest, const char *p_contents); -typedef void (*GDExtensionSpxStringNewWithLatin1CharsAndLen)(GDExtensionUninitializedStringPtr r_dest, const char *p_contents, GdInt p_size); -typedef void (*GDExtensionSpxStringNewWithUtf8CharsAndLen)(GDExtensionUninitializedStringPtr r_dest, const char *p_contents, GdInt p_size); -typedef GdInt (*GDExtensionSpxStringToLatin1Chars)(GDExtensionConstStringPtr p_self, char *r_text, GdInt p_max_write_length); -typedef GdInt (*GDExtensionSpxStringToUtf8Chars)(GDExtensionConstStringPtr p_self, char *r_text, GdInt p_max_write_length); -// variant -typedef GDExtensionPtrConstructor (*GDExtensionSpxVariantGetPtrConstructor)(GDExtensionVariantType p_type, int32_t p_constructor); -typedef GDExtensionPtrDestructor (*GDExtensionSpxVariantGetPtrDestructor)(GDExtensionVariantType p_type); - -// callback -typedef void (*GDExtensionSpxCallbackOnEngineStart)(); -typedef void (*GDExtensionSpxCallbackOnEngineUpdate)(GdFloat delta); -typedef void (*GDExtensionSpxCallbackOnEngineFixedUpdate)(GdFloat delta); -typedef void (*GDExtensionSpxCallbackOnEngineDestroy)(); -typedef void (*GDExtensionSpxCallbackOnEngineReset)(); -typedef void (*GDExtensionSpxCallbackOnEnginePause)(GdBool is_paused); - -typedef void (*GDExtensionSpxCallbackOnSceneSpriteInstantiated)(GdObj obj,GdString type_name); - -typedef void (*GDExtensionSpxCallbackOnSpriteReady)(GdObj obj); -typedef void (*GDExtensionSpxCallbackOnSpriteUpdated)(GdFloat delta); -typedef void (*GDExtensionSpxCallbackOnSpriteFixedUpdated)(GdFloat delta); -typedef void (*GDExtensionSpxCallbackOnSpriteDestroyed)(GdObj obj); - -typedef void (*GDExtensionSpxCallbackOnSpriteFramesSetChanged)(GdObj obj); -typedef void (*GDExtensionSpxCallbackOnSpriteAnimationChanged)(GdObj obj); -typedef void (*GDExtensionSpxCallbackOnSpriteFrameChanged)(GdObj obj); -typedef void (*GDExtensionSpxCallbackOnSpriteAnimationLooped)(GdObj obj); -typedef void (*GDExtensionSpxCallbackOnSpriteAnimationFinished)(GdObj obj); - -typedef void (*GDExtensionSpxCallbackOnSpriteVfxFinished)(GdObj obj); - -typedef void (*GDExtensionSpxCallbackOnSpriteScreenExited)(GdObj obj); -typedef void (*GDExtensionSpxCallbackOnSpriteScreenEntered)(GdObj obj); - -typedef void (*GDExtensionSpxCallbackOnMousePressed)(GdInt keyid); -typedef void (*GDExtensionSpxCallbackOnMouseReleased)(GdInt keyid); -typedef void (*GDExtensionSpxCallbackOnKeyPressed)(GdInt keyid); -typedef void (*GDExtensionSpxCallbackOnKeyReleased)(GdInt keyid); -typedef void (*GDExtensionSpxCallbackOnActionPressed)(GdString action_name); -typedef void (*GDExtensionSpxCallbackOnActionJustPressed)(GdString action_name); -typedef void (*GDExtensionSpxCallbackOnActionJustReleased)(GdString action_name); -typedef void (*GDExtensionSpxCallbackOnAxisChanged)(GdString action_name, GdFloat value); - -typedef void (*GDExtensionSpxCallbackOnCollisionEnter)(GdInt self_id, GdInt other_id); -typedef void (*GDExtensionSpxCallbackOnCollisionStay)(GdInt self_id, GdInt other_id); -typedef void (*GDExtensionSpxCallbackOnCollisionExit)(GdInt self_id, GdInt other_id); -typedef void (*GDExtensionSpxCallbackOnTriggerEnter)(GdInt self_id, GdInt other_id); -typedef void (*GDExtensionSpxCallbackOnTriggerStay)(GdInt self_id, GdInt other_id); -typedef void (*GDExtensionSpxCallbackOnTriggerExit)(GdInt self_id, GdInt other_id); - -typedef void (*GDExtensionSpxCallbackOnUiReady)(GdObj obj); -typedef void (*GDExtensionSpxCallbackOnUiUpdated)(GdObj obj); -typedef void (*GDExtensionSpxCallbackOnUiDestroyed)(GdObj obj); - -typedef void (*GDExtensionSpxCallbackOnUiPressed)(GdObj obj); -typedef void (*GDExtensionSpxCallbackOnUiReleased)(GdObj obj); -typedef void (*GDExtensionSpxCallbackOnUiHovered)(GdObj obj); -typedef void (*GDExtensionSpxCallbackOnUiClicked)(GdObj obj); -typedef void (*GDExtensionSpxCallbackOnUiToggle)(GdObj obj, GdBool is_on); -typedef void (*GDExtensionSpxCallbackOnUiTextChanged)(GdObj obj, GdString text); - - -typedef struct { - // engine - GDExtensionSpxCallbackOnEngineStart func_on_engine_start; - GDExtensionSpxCallbackOnEngineUpdate func_on_engine_update; - GDExtensionSpxCallbackOnEngineFixedUpdate func_on_engine_fixed_update; - GDExtensionSpxCallbackOnEngineDestroy func_on_engine_destroy; - GDExtensionSpxCallbackOnEngineReset func_on_engine_reset; - GDExtensionSpxCallbackOnEnginePause func_on_engine_pause; - - // scene - GDExtensionSpxCallbackOnSceneSpriteInstantiated func_on_scene_sprite_instantiated; - // sprite - GDExtensionSpxCallbackOnSpriteReady func_on_sprite_ready; - GDExtensionSpxCallbackOnSpriteUpdated func_on_sprite_updated; - GDExtensionSpxCallbackOnSpriteFixedUpdated func_on_sprite_fixed_updated; - GDExtensionSpxCallbackOnSpriteDestroyed func_on_sprite_destroyed; - - // animation - GDExtensionSpxCallbackOnSpriteFramesSetChanged func_on_sprite_frames_set_changed; - GDExtensionSpxCallbackOnSpriteAnimationChanged func_on_sprite_animation_changed; - GDExtensionSpxCallbackOnSpriteFrameChanged func_on_sprite_frame_changed; - GDExtensionSpxCallbackOnSpriteAnimationLooped func_on_sprite_animation_looped; - GDExtensionSpxCallbackOnSpriteAnimationFinished func_on_sprite_animation_finished; - // vfx - GDExtensionSpxCallbackOnSpriteVfxFinished func_on_sprite_vfx_finished; - // visibility - GDExtensionSpxCallbackOnSpriteScreenExited func_on_sprite_screen_exited; - GDExtensionSpxCallbackOnSpriteScreenEntered func_on_sprite_screen_entered; - - // input - GDExtensionSpxCallbackOnMousePressed func_on_mouse_pressed; - GDExtensionSpxCallbackOnMouseReleased func_on_mouse_released; - GDExtensionSpxCallbackOnKeyPressed func_on_key_pressed; - GDExtensionSpxCallbackOnKeyReleased func_on_key_released; - GDExtensionSpxCallbackOnActionPressed func_on_action_pressed; - GDExtensionSpxCallbackOnActionJustPressed func_on_action_just_pressed; - GDExtensionSpxCallbackOnActionJustReleased func_on_action_just_released; - GDExtensionSpxCallbackOnAxisChanged func_on_axis_changed; - - // physic - GDExtensionSpxCallbackOnCollisionEnter func_on_collision_enter; - GDExtensionSpxCallbackOnCollisionStay func_on_collision_stay; - GDExtensionSpxCallbackOnCollisionExit func_on_collision_exit; - GDExtensionSpxCallbackOnTriggerEnter func_on_trigger_enter; - GDExtensionSpxCallbackOnTriggerStay func_on_trigger_stay; - GDExtensionSpxCallbackOnTriggerExit func_on_trigger_exit; - - // ui - GDExtensionSpxCallbackOnUiReady func_on_ui_ready; - GDExtensionSpxCallbackOnUiUpdated func_on_ui_updated; - GDExtensionSpxCallbackOnUiDestroyed func_on_ui_destroyed; - - GDExtensionSpxCallbackOnUiPressed func_on_ui_pressed; - GDExtensionSpxCallbackOnUiReleased func_on_ui_released; - GDExtensionSpxCallbackOnUiHovered func_on_ui_hovered; - GDExtensionSpxCallbackOnUiClicked func_on_ui_clicked; - GDExtensionSpxCallbackOnUiToggle func_on_ui_toggle; - GDExtensionSpxCallbackOnUiTextChanged func_on_ui_text_changed; - - -} SpxCallbackInfo; - - - +/**************************************************************************/ +/* gdextension_spx_ext.h */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#ifndef GDEXTENSION_SPX_EXT_H +#define GDEXTENSION_SPX_EXT_H + +#include "gdextension_interface.h" +#ifndef NOT_GODOT_ENGINE +#include "core/variant/variant.h" +extern void gdextension_spx_setup_interface(); +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef GDExtensionConstStringPtr GdString; +typedef GDExtensionInt GdInt; +typedef GDExtensionInt GdObj; +typedef GDExtensionBool GdBool; +typedef real_t GdFloat; +typedef Vector4 GdVec4; +typedef Vector3 GdVec3; +typedef Vector2 GdVec2; +typedef Color GdColor; +typedef Rect2 GdRect2; + +typedef struct { + int32_t size; + int32_t type; + void* data; +} GdArrayInfo; + +typedef GdArrayInfo* GdArray; + +typedef enum { + GD_ARRAY_TYPE_UNKNOWN = 0, + GD_ARRAY_TYPE_INT64 = 1, + GD_ARRAY_TYPE_FLOAT = 2, + GD_ARRAY_TYPE_BOOL = 3, + GD_ARRAY_TYPE_STRING = 4, + GD_ARRAY_TYPE_BYTE = 5, + GD_ARRAY_TYPE_GDOBJ = 6, +} GdArrayType; + +typedef struct { + // 0 is return value + // 1-7 are arguments + GdVec4 Ret; + GdVec4 Arg0; + GdVec4 Arg1; + GdVec4 Arg2; + GdVec4 Arg3; + GdVec4 Arg4; + GdVec4 Arg5; + GdVec4 Arg6; + GdVec4 Arg7; +} CallFrameArgs; + +typedef void *GDExtensionSpxCallbackInfoPtr; +typedef void (*GDExtensionSpxGlobalRegisterCallbacks)(GDExtensionSpxCallbackInfoPtr callback_ptr); + +// string +typedef void (*GDExtensionSpxStringNewWithLatin1Chars)(GDExtensionUninitializedStringPtr r_dest, const char *p_contents); +typedef void (*GDExtensionSpxStringNewWithUtf8Chars)(GDExtensionUninitializedStringPtr r_dest, const char *p_contents); +typedef void (*GDExtensionSpxStringNewWithLatin1CharsAndLen)(GDExtensionUninitializedStringPtr r_dest, const char *p_contents, GdInt p_size); +typedef void (*GDExtensionSpxStringNewWithUtf8CharsAndLen)(GDExtensionUninitializedStringPtr r_dest, const char *p_contents, GdInt p_size); +typedef GdInt (*GDExtensionSpxStringToLatin1Chars)(GDExtensionConstStringPtr p_self, char *r_text, GdInt p_max_write_length); +typedef GdInt (*GDExtensionSpxStringToUtf8Chars)(GDExtensionConstStringPtr p_self, char *r_text, GdInt p_max_write_length); +// variant +typedef GDExtensionPtrConstructor (*GDExtensionSpxVariantGetPtrConstructor)(GDExtensionVariantType p_type, int32_t p_constructor); +typedef GDExtensionPtrDestructor (*GDExtensionSpxVariantGetPtrDestructor)(GDExtensionVariantType p_type); + +// callback +typedef void (*GDExtensionSpxCallbackOnEngineStart)(); +typedef void (*GDExtensionSpxCallbackOnEngineUpdate)(GdFloat delta); +typedef void (*GDExtensionSpxCallbackOnEngineFixedUpdate)(GdFloat delta); +typedef void (*GDExtensionSpxCallbackOnEngineDestroy)(); +typedef void (*GDExtensionSpxCallbackOnEngineReset)(); +typedef void (*GDExtensionSpxCallbackOnEnginePause)(GdBool is_paused); + +typedef void (*GDExtensionSpxCallbackOnSceneSpriteInstantiated)(GdObj obj,GdString type_name); + +typedef void (*GDExtensionSpxCallbackOnSpriteReady)(GdObj obj); +typedef void (*GDExtensionSpxCallbackOnSpriteUpdated)(GdFloat delta); +typedef void (*GDExtensionSpxCallbackOnSpriteFixedUpdated)(GdFloat delta); +typedef void (*GDExtensionSpxCallbackOnSpriteDestroyed)(GdObj obj); + +typedef void (*GDExtensionSpxCallbackOnSpriteFramesSetChanged)(GdObj obj); +typedef void (*GDExtensionSpxCallbackOnSpriteAnimationChanged)(GdObj obj); +typedef void (*GDExtensionSpxCallbackOnSpriteFrameChanged)(GdObj obj); +typedef void (*GDExtensionSpxCallbackOnSpriteAnimationLooped)(GdObj obj); +typedef void (*GDExtensionSpxCallbackOnSpriteAnimationFinished)(GdObj obj); + +typedef void (*GDExtensionSpxCallbackOnSpriteVfxFinished)(GdObj obj); + +typedef void (*GDExtensionSpxCallbackOnSpriteScreenExited)(GdObj obj); +typedef void (*GDExtensionSpxCallbackOnSpriteScreenEntered)(GdObj obj); + +typedef void (*GDExtensionSpxCallbackOnMousePressed)(GdInt keyid); +typedef void (*GDExtensionSpxCallbackOnMouseReleased)(GdInt keyid); +typedef void (*GDExtensionSpxCallbackOnKeyPressed)(GdInt keyid); +typedef void (*GDExtensionSpxCallbackOnKeyReleased)(GdInt keyid); +typedef void (*GDExtensionSpxCallbackOnActionPressed)(GdString action_name); +typedef void (*GDExtensionSpxCallbackOnActionJustPressed)(GdString action_name); +typedef void (*GDExtensionSpxCallbackOnActionJustReleased)(GdString action_name); +typedef void (*GDExtensionSpxCallbackOnAxisChanged)(GdString action_name, GdFloat value); + +typedef void (*GDExtensionSpxCallbackOnCollisionEnter)(GdInt self_id, GdInt other_id); +typedef void (*GDExtensionSpxCallbackOnCollisionStay)(GdInt self_id, GdInt other_id); +typedef void (*GDExtensionSpxCallbackOnCollisionExit)(GdInt self_id, GdInt other_id); +typedef void (*GDExtensionSpxCallbackOnTriggerEnter)(GdInt self_id, GdInt other_id); +typedef void (*GDExtensionSpxCallbackOnTriggerStay)(GdInt self_id, GdInt other_id); +typedef void (*GDExtensionSpxCallbackOnTriggerExit)(GdInt self_id, GdInt other_id); + +typedef void (*GDExtensionSpxCallbackOnUiReady)(GdObj obj); +typedef void (*GDExtensionSpxCallbackOnUiUpdated)(GdObj obj); +typedef void (*GDExtensionSpxCallbackOnUiDestroyed)(GdObj obj); + +typedef void (*GDExtensionSpxCallbackOnUiPressed)(GdObj obj); +typedef void (*GDExtensionSpxCallbackOnUiReleased)(GdObj obj); +typedef void (*GDExtensionSpxCallbackOnUiHovered)(GdObj obj); +typedef void (*GDExtensionSpxCallbackOnUiClicked)(GdObj obj); +typedef void (*GDExtensionSpxCallbackOnUiToggle)(GdObj obj, GdBool is_on); +typedef void (*GDExtensionSpxCallbackOnUiTextChanged)(GdObj obj, GdString text); + + +typedef struct { + // engine + GDExtensionSpxCallbackOnEngineStart func_on_engine_start; + GDExtensionSpxCallbackOnEngineUpdate func_on_engine_update; + GDExtensionSpxCallbackOnEngineFixedUpdate func_on_engine_fixed_update; + GDExtensionSpxCallbackOnEngineDestroy func_on_engine_destroy; + GDExtensionSpxCallbackOnEngineReset func_on_engine_reset; + GDExtensionSpxCallbackOnEnginePause func_on_engine_pause; + + // scene + GDExtensionSpxCallbackOnSceneSpriteInstantiated func_on_scene_sprite_instantiated; + // sprite + GDExtensionSpxCallbackOnSpriteReady func_on_sprite_ready; + GDExtensionSpxCallbackOnSpriteUpdated func_on_sprite_updated; + GDExtensionSpxCallbackOnSpriteFixedUpdated func_on_sprite_fixed_updated; + GDExtensionSpxCallbackOnSpriteDestroyed func_on_sprite_destroyed; + + // animation + GDExtensionSpxCallbackOnSpriteFramesSetChanged func_on_sprite_frames_set_changed; + GDExtensionSpxCallbackOnSpriteAnimationChanged func_on_sprite_animation_changed; + GDExtensionSpxCallbackOnSpriteFrameChanged func_on_sprite_frame_changed; + GDExtensionSpxCallbackOnSpriteAnimationLooped func_on_sprite_animation_looped; + GDExtensionSpxCallbackOnSpriteAnimationFinished func_on_sprite_animation_finished; + // vfx + GDExtensionSpxCallbackOnSpriteVfxFinished func_on_sprite_vfx_finished; + // visibility + GDExtensionSpxCallbackOnSpriteScreenExited func_on_sprite_screen_exited; + GDExtensionSpxCallbackOnSpriteScreenEntered func_on_sprite_screen_entered; + + // input + GDExtensionSpxCallbackOnMousePressed func_on_mouse_pressed; + GDExtensionSpxCallbackOnMouseReleased func_on_mouse_released; + GDExtensionSpxCallbackOnKeyPressed func_on_key_pressed; + GDExtensionSpxCallbackOnKeyReleased func_on_key_released; + GDExtensionSpxCallbackOnActionPressed func_on_action_pressed; + GDExtensionSpxCallbackOnActionJustPressed func_on_action_just_pressed; + GDExtensionSpxCallbackOnActionJustReleased func_on_action_just_released; + GDExtensionSpxCallbackOnAxisChanged func_on_axis_changed; + + // physic + GDExtensionSpxCallbackOnCollisionEnter func_on_collision_enter; + GDExtensionSpxCallbackOnCollisionStay func_on_collision_stay; + GDExtensionSpxCallbackOnCollisionExit func_on_collision_exit; + GDExtensionSpxCallbackOnTriggerEnter func_on_trigger_enter; + GDExtensionSpxCallbackOnTriggerStay func_on_trigger_stay; + GDExtensionSpxCallbackOnTriggerExit func_on_trigger_exit; + + // ui + GDExtensionSpxCallbackOnUiReady func_on_ui_ready; + GDExtensionSpxCallbackOnUiUpdated func_on_ui_updated; + GDExtensionSpxCallbackOnUiDestroyed func_on_ui_destroyed; + + GDExtensionSpxCallbackOnUiPressed func_on_ui_pressed; + GDExtensionSpxCallbackOnUiReleased func_on_ui_released; + GDExtensionSpxCallbackOnUiHovered func_on_ui_hovered; + GDExtensionSpxCallbackOnUiClicked func_on_ui_clicked; + GDExtensionSpxCallbackOnUiToggle func_on_ui_toggle; + GDExtensionSpxCallbackOnUiTextChanged func_on_ui_text_changed; + + +} SpxCallbackInfo; + + + // SpxAudio typedef void (*GDExtensionSpxAudioStopAll)(); typedef void (*GDExtensionSpxAudioCreateAudio)(GdObj *ret_value); @@ -481,6 +481,12 @@ typedef void (*GDExtensionSpxTilemapGetTile)(GdVec2 pos, GdString *ret_value); typedef void (*GDExtensionSpxTilemapGetTileWithLayer)(GdVec2 pos, GdInt layer_index, GdString *ret_value); typedef void (*GDExtensionSpxTilemapCloseDrawTiles)(); typedef void (*GDExtensionSpxTilemapExitTilemapEditorMode)(); +// SpxTilemapparser +typedef void (*GDExtensionSpxTilemapparserLoadTilemap)(GdString json_path); +typedef void (*GDExtensionSpxTilemapparserUnloadTilemap)(GdString name); +typedef void (*GDExtensionSpxTilemapparserDestroyAllTilemaps)(); +typedef void (*GDExtensionSpxTilemapparserHasTilemap)(GdString name, GdBool *ret_value); +typedef void (*GDExtensionSpxTilemapparserGetTilemapLayerCount)(GdString name, GdInt *ret_value); // SpxUi typedef void (*GDExtensionSpxUiBindNode)(GdObj obj, GdString rel_path, GdObj *ret_value); typedef void (*GDExtensionSpxUiCreateNode)(GdString path, GdObj *ret_value); @@ -524,10 +530,10 @@ typedef void (*GDExtensionSpxUiGetRotation)(GdObj obj, GdFloat *ret_value); typedef void (*GDExtensionSpxUiSetRotation)(GdObj obj, GdFloat value); typedef void (*GDExtensionSpxUiGetFlip)(GdObj obj, GdBool horizontal, GdBool *ret_value); typedef void (*GDExtensionSpxUiSetFlip)(GdObj obj, GdBool horizontal, GdBool is_flip); - - -#ifdef __cplusplus -} -#endif - -#endif // GDEXTENSION_SPX_EXT_H + + +#ifdef __cplusplus +} +#endif + +#endif // GDEXTENSION_SPX_EXT_H diff --git a/pkg/gdspx/internal/webffi/ffi.gen.go b/pkg/gdspx/internal/webffi/ffi.gen.go index 746fa2b0..b4d76aa8 100644 --- a/pkg/gdspx/internal/webffi/ffi.gen.go +++ b/pkg/gdspx/internal/webffi/ffi.gen.go @@ -274,6 +274,11 @@ type GDExtensionInterface struct { SpxTilemapGetTileWithLayer js.Value SpxTilemapCloseDrawTiles js.Value SpxTilemapExitTilemapEditorMode js.Value + SpxTilemapparserLoadTilemap js.Value + SpxTilemapparserUnloadTilemap js.Value + SpxTilemapparserDestroyAllTilemaps js.Value + SpxTilemapparserHasTilemap js.Value + SpxTilemapparserGetTilemapLayerCount js.Value SpxUiBindNode js.Value SpxUiCreateNode js.Value SpxUiCreateButton js.Value @@ -571,6 +576,11 @@ func (x *GDExtensionInterface) loadProcAddresses() { x.SpxTilemapGetTileWithLayer = dlsymGD("gdspx_tilemap_get_tile_with_layer") x.SpxTilemapCloseDrawTiles = dlsymGD("gdspx_tilemap_close_draw_tiles") x.SpxTilemapExitTilemapEditorMode = dlsymGD("gdspx_tilemap_exit_tilemap_editor_mode") + x.SpxTilemapparserLoadTilemap = dlsymGD("gdspx_tilemapparser_load_tilemap") + x.SpxTilemapparserUnloadTilemap = dlsymGD("gdspx_tilemapparser_unload_tilemap") + x.SpxTilemapparserDestroyAllTilemaps = dlsymGD("gdspx_tilemapparser_destroy_all_tilemaps") + x.SpxTilemapparserHasTilemap = dlsymGD("gdspx_tilemapparser_has_tilemap") + x.SpxTilemapparserGetTilemapLayerCount = dlsymGD("gdspx_tilemapparser_get_tilemap_layer_count") x.SpxUiBindNode = dlsymGD("gdspx_ui_bind_node") x.SpxUiCreateNode = dlsymGD("gdspx_ui_create_node") x.SpxUiCreateButton = dlsymGD("gdspx_ui_create_button") diff --git a/pkg/gdspx/internal/wrap/manager_wrapper.gen.go b/pkg/gdspx/internal/wrap/manager_wrapper.gen.go index 79c00179..327a19d1 100644 --- a/pkg/gdspx/internal/wrap/manager_wrapper.gen.go +++ b/pkg/gdspx/internal/wrap/manager_wrapper.gen.go @@ -68,6 +68,9 @@ func BindMgr(mgrs []IManager) { case ITilemapMgr: TilemapMgr = v + case ITilemapparserMgr: + TilemapparserMgr = v + case IUiMgr: UiMgr = v @@ -116,6 +119,9 @@ type spriteMgr struct { type tilemapMgr struct { baseMgr } +type tilemapparserMgr struct { + baseMgr +} type uiMgr struct { baseMgr } @@ -134,6 +140,7 @@ func createMgrs() []IManager { addManager(&sceneMgr{}) addManager(&spriteMgr{}) addManager(&tilemapMgr{}) + addManager(&tilemapparserMgr{}) addManager(&uiMgr{}) return mgrs } @@ -1519,6 +1526,35 @@ func (pself *tilemapMgr) CloseDrawTiles() { func (pself *tilemapMgr) ExitTilemapEditorMode() { CallTilemapExitTilemapEditorMode() } +func (pself *tilemapparserMgr) LoadTilemap(json_path string) { + arg0Str := C.CString(json_path) + arg0 := (GdString)(arg0Str) + defer C.free(unsafe.Pointer(arg0Str)) + CallTilemapparserLoadTilemap(arg0) +} +func (pself *tilemapparserMgr) UnloadTilemap(name string) { + arg0Str := C.CString(name) + arg0 := (GdString)(arg0Str) + defer C.free(unsafe.Pointer(arg0Str)) + CallTilemapparserUnloadTilemap(arg0) +} +func (pself *tilemapparserMgr) DestroyAllTilemaps() { + CallTilemapparserDestroyAllTilemaps() +} +func (pself *tilemapparserMgr) HasTilemap(name string) bool { + arg0Str := C.CString(name) + arg0 := (GdString)(arg0Str) + defer C.free(unsafe.Pointer(arg0Str)) + retValue := CallTilemapparserHasTilemap(arg0) + return ToBool(retValue) +} +func (pself *tilemapparserMgr) GetTilemapLayerCount(name string) int64 { + arg0Str := C.CString(name) + arg0 := (GdString)(arg0Str) + defer C.free(unsafe.Pointer(arg0Str)) + retValue := CallTilemapparserGetTilemapLayerCount(arg0) + return ToInt64(retValue) +} func (pself *uiMgr) BindNode(obj Object, rel_path string) Object { arg0 := ToGdObj(obj) arg1Str := C.CString(rel_path) diff --git a/pkg/gdspx/internal/wrap/manager_wrapper_web.gen.go b/pkg/gdspx/internal/wrap/manager_wrapper_web.gen.go index 18702ceb..8ece437f 100644 --- a/pkg/gdspx/internal/wrap/manager_wrapper_web.gen.go +++ b/pkg/gdspx/internal/wrap/manager_wrapper_web.gen.go @@ -63,6 +63,9 @@ func BindMgr(mgrs []IManager) { case ITilemapMgr: TilemapMgr = v + case ITilemapparserMgr: + TilemapparserMgr = v + case IUiMgr: UiMgr = v @@ -111,6 +114,9 @@ type spriteMgr struct { type tilemapMgr struct { baseMgr } +type tilemapparserMgr struct { + baseMgr +} type uiMgr struct { baseMgr } @@ -129,6 +135,7 @@ func createMgrs() []IManager { addManager(&sceneMgr{}) addManager(&spriteMgr{}) addManager(&tilemapMgr{}) + addManager(&tilemapparserMgr{}) addManager(&uiMgr{}) return mgrs } @@ -1402,6 +1409,27 @@ func (pself *tilemapMgr) CloseDrawTiles() { func (pself *tilemapMgr) ExitTilemapEditorMode() { API.SpxTilemapExitTilemapEditorMode.Invoke() } +func (pself *tilemapparserMgr) LoadTilemap(json_path string) { + arg0 := JsFromGdString(json_path) + API.SpxTilemapparserLoadTilemap.Invoke(arg0) +} +func (pself *tilemapparserMgr) UnloadTilemap(name string) { + arg0 := JsFromGdString(name) + API.SpxTilemapparserUnloadTilemap.Invoke(arg0) +} +func (pself *tilemapparserMgr) DestroyAllTilemaps() { + API.SpxTilemapparserDestroyAllTilemaps.Invoke() +} +func (pself *tilemapparserMgr) HasTilemap(name string) bool { + arg0 := JsFromGdString(name) + _retValue := API.SpxTilemapparserHasTilemap.Invoke(arg0) + return JsToGdBool(_retValue) +} +func (pself *tilemapparserMgr) GetTilemapLayerCount(name string) int64 { + arg0 := JsFromGdString(name) + _retValue := API.SpxTilemapparserGetTilemapLayerCount.Invoke(arg0) + return JsToGdInt(_retValue) +} func (pself *uiMgr) BindNode(obj Object, rel_path string) Object { arg0 := JsFromGdObj(obj) arg1 := JsFromGdString(rel_path) diff --git a/pkg/gdspx/pkg/engine/interface.gen.go b/pkg/gdspx/pkg/engine/interface.gen.go index 8ad77a69..ada82a88 100644 --- a/pkg/gdspx/pkg/engine/interface.gen.go +++ b/pkg/gdspx/pkg/engine/interface.gen.go @@ -15,20 +15,21 @@ import ( ) var ( - AudioMgr IAudioMgr - CameraMgr ICameraMgr - DebugMgr IDebugMgr - ExtMgr IExtMgr - InputMgr IInputMgr - NavigationMgr INavigationMgr - PenMgr IPenMgr - PhysicMgr IPhysicMgr - PlatformMgr IPlatformMgr - ResMgr IResMgr - SceneMgr ISceneMgr - SpriteMgr ISpriteMgr - TilemapMgr ITilemapMgr - UiMgr IUiMgr + AudioMgr IAudioMgr + CameraMgr ICameraMgr + DebugMgr IDebugMgr + ExtMgr IExtMgr + InputMgr IInputMgr + NavigationMgr INavigationMgr + PenMgr IPenMgr + PhysicMgr IPhysicMgr + PlatformMgr IPlatformMgr + ResMgr IResMgr + SceneMgr ISceneMgr + SpriteMgr ISpriteMgr + TilemapMgr ITilemapMgr + TilemapparserMgr ITilemapparserMgr + UiMgr IUiMgr ) type IAudioMgr interface { @@ -322,6 +323,14 @@ type ITilemapMgr interface { ExitTilemapEditorMode() } +type ITilemapparserMgr interface { + LoadTilemap(json_path string) + UnloadTilemap(name string) + DestroyAllTilemaps() + HasTilemap(name string) bool + GetTilemapLayerCount(name string) int64 +} + type IUiMgr interface { BindNode(obj Object, rel_path string) Object CreateNode(path string) Object diff --git a/tilemap.go b/tilemap.go index 5c139a2b..a2e39392 100644 --- a/tilemap.go +++ b/tilemap.go @@ -18,7 +18,9 @@ package spx import ( "fmt" + "path" "sort" + "strings" spxfs "github.com/goplus/spx/v2/fs" "github.com/goplus/spx/v2/internal/engine" @@ -27,27 +29,129 @@ import ( "github.com/goplus/spbase/mathf" ) +// DecoratorJSON represents the structure of decorator.json file (new format) +type DecoratorJSON struct { + Version int `json:"version"` + Decorators []tm.DecoratorNode `json:"decorators"` +} + type gameTilemapMgr struct { - g *Game - datas *tm.TscnMapData + g *Game + fs spxfs.Dir // filesystem for loading tilemap files + datas *tm.TscnMapData // old format data + decoratorDatas *DecoratorJSON // new format decorator data + useNewLoader bool // true if using C++ TileMapParser (new format) + tilemapDir string // current tilemap directory (e.g., "tilemaps/map1") + currentMap string // current loaded map name (e.g., "map1") } -func (p *gameTilemapMgr) init(g *Game, fs spxfs.Dir, path string) { +func (p *gameTilemapMgr) init(g *Game, fs spxfs.Dir, tilemapPath string) { p.g = g - if path == "" { + p.fs = fs + if tilemapPath == "" { return } - var data tm.TscnMapData - err := loadJson(&data, fs, path) + + // Load the default tilemap specified in config + p.loadMap(tilemapPath) +} + +// loadDecoratorJSON loads decorator data from a separate decorator.json file +func (p *gameTilemapMgr) loadDecoratorJSON(fs spxfs.Dir, decoratorPath string) { + var data DecoratorJSON + err := loadJson(&data, fs, decoratorPath) if err != nil { - panic(fmt.Sprintf("Failed to load tilemap JSON file %s: %v", path, err)) + fmt.Printf("[TILEMAP] No decorator.json found at %s (this is OK if no decorators)\n", decoratorPath) + return } - p.datas = &data - tm.ConvertData(&data) + p.decoratorDatas = &data } func (p *gameTilemapMgr) hasData() bool { - return p.datas != nil + return p.datas != nil || p.useNewLoader +} + +// isNewFormat checks if the tilemap path is in the new format (directory path) +// New format: path does NOT contain ".json" (e.g., "tilemaps/map1") +// Old format: path contains ".json" (e.g., "tilemaps/map1.json") +func (p *gameTilemapMgr) isNewFormat(tilemapPath string) bool { + return !strings.Contains(tilemapPath, ".json") +} + +// loadMap loads a tilemap from the specified path +// mapDir can be either: +// - A directory path (new format): "tilemaps/map1" -> uses C++ TileMapParser +// - A file path (old format): "tilemaps/map1.json" -> uses Go loader +func (p *gameTilemapMgr) loadMap(mapDir string) { + if mapDir == "" { + return + } + + // Determine format based on path + p.useNewLoader = p.isNewFormat(mapDir) + + if p.useNewLoader { + // New format: directory path + p.tilemapDir = mapDir + p.currentMap = path.Base(mapDir) + + // Build paths to tilemap.json and decorator.json + tilemapPath := path.Join(mapDir, "tilemap.json") + decoratorPath := path.Join(mapDir, "decorator.json") + + // Load tilemap using C++ TileMapParser + enginePath := engine.ToAssetPath(tilemapPath) + tilemapparserMgr.LoadTilemap(enginePath) + p.useNewLoader = true + + // Load decorator.json + p.loadDecoratorJSON(p.fs, decoratorPath) + } else { + // Old format: file path (contains .json) + p.tilemapDir = path.Dir(mapDir) + p.currentMap = strings.TrimSuffix(path.Base(mapDir), ".json") + + // Load using Go loader + var data tm.TscnMapData + err := loadJson(&data, p.fs, mapDir) + if err != nil { + panic(fmt.Sprintf("Failed to load tilemap JSON file %s: %v", mapDir, err)) + } + p.datas = &data + tm.ConvertData(&data) + } +} + +// unloadMap unloads the current tilemap and cleans up resources +func (p *gameTilemapMgr) unloadMap() { + if p.currentMap == "" { + return + } + + if p.useNewLoader { + // Unload from C++ TileMapParser + tilemapparserMgr.DestroyAllTilemaps() + } + + // Clean up decorator sprites + p.cleanupDecorators() + + // Reset state + p.datas = nil + p.decoratorDatas = nil + p.currentMap = "" + p.tilemapDir = "" + p.useNewLoader = false +} + +// getCurrentMap returns the name of the currently loaded tilemap +func (p *gameTilemapMgr) getCurrentMap() string { + return p.currentMap +} + +// cleanupDecorators removes all static sprites (decorators) created by tilemaps +func (p *gameTilemapMgr) cleanupDecorators() { + sceneMgr.ClearPureSprites() } func (p *gameTilemapMgr) loadTilemaps(datas *tm.TscnMapData) { @@ -55,19 +159,32 @@ func (p *gameTilemapMgr) loadTilemaps(datas *tm.TscnMapData) { } func (p *gameTilemapMgr) loadDecorators(datas *tm.TscnMapData) { + p.loadDecoratorNodes(datas.Decorators, "tilemaps") +} + +func (p *gameTilemapMgr) loadDecoratorNodes(decorators []tm.DecoratorNode, tilemapDir string) { const headingOffset = -90.0 - for _, item := range datas.Decorators { + for _, item := range decorators { position := item.Position.ToVec2() pivot := item.Pivot.ToVec2() - assetPath := engine.ToAssetPath("tilemaps/" + item.Path) + relativePath := path.Join(tilemapDir, item.Path) + assetPath := engine.ToAssetPath(relativePath) texSize := resMgr.GetImageSize(assetPath) colliderPivot := item.ColliderPivot.ToVec2().Add(pivot) pivot = pivot.Sub(texSize.Divf(2)) - p.g.createStaticSprite("tilemaps/"+item.Path, position, item.Ratation+headingOffset, + p.g.createStaticSprite(relativePath, position, item.Ratation+headingOffset, item.Scale.ToVec2(), int64(item.ZIndex), pivot, item.ColliderType, colliderPivot, item.ColliderParams) } } +// loadDecoratorsFromJSON loads decorators from the separate decorator.json file (new format) +func (p *gameTilemapMgr) loadDecoratorsFromJSON() { + if p.decoratorDatas == nil || len(p.decoratorDatas.Decorators) == 0 { + return + } + p.loadDecoratorNodes(p.decoratorDatas.Decorators, p.tilemapDir) +} + func (p *gameTilemapMgr) loadSprites(datas *tm.TscnMapData) { sort.Slice(datas.Sprites, func(i, j int) bool { @@ -87,6 +204,13 @@ func (p *gameTilemapMgr) loadSprites(datas *tm.TscnMapData) { } func (p *gameTilemapMgr) parseTilemap() { + // Handle new format: load decorators from separate JSON file + if p.useNewLoader { + p.loadDecoratorsFromJSON() + return + } + + // Old format: load from combined TscnMapData if p.datas == nil { return }