added forge addon
@@ -1,142 +1,143 @@
|
||||
<Project Sdk="Godot.NET.Sdk/4.6.0">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<EnableDynamicLoading>true</EnableDynamicLoading>
|
||||
<RootNamespace>Movementtests</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Content Include=".runsettings" />
|
||||
<Content Include="export_presets.cfg" />
|
||||
<Content Include="menus\assets\git_logo\Git-Logo-2Color.png" />
|
||||
<Content Include="menus\assets\git_logo\Git-Logo-2Color.png.import" />
|
||||
<Content Include="menus\assets\git_logo\LICENSE.txt" />
|
||||
<Content Include="menus\assets\godot_engine_logo\LICENSE.txt" />
|
||||
<Content Include="menus\assets\godot_engine_logo\logo_vertical_color_dark.png" />
|
||||
<Content Include="menus\assets\godot_engine_logo\logo_vertical_color_dark.png.import" />
|
||||
<Content Include="menus\assets\icon.png" />
|
||||
<Content Include="menus\assets\icon.png.import" />
|
||||
<Content Include="menus\ATTRIBUTION.md" />
|
||||
<Content Include="menus\resources\themes\expedition.tres" />
|
||||
<Content Include="menus\resources\themes\gravity.tres" />
|
||||
<Content Include="menus\resources\themes\grow.tres" />
|
||||
<Content Include="menus\resources\themes\lab.tres" />
|
||||
<Content Include="menus\resources\themes\lore.tres" />
|
||||
<Content Include="menus\resources\themes\steal_this_theme.tres" />
|
||||
<Content Include="menus\scenes\credits\scrollable_credits.gd" />
|
||||
<Content Include="menus\scenes\credits\scrollable_credits.gd.uid" />
|
||||
<Content Include="menus\scenes\credits\scrollable_credits.tscn" />
|
||||
<Content Include="menus\scenes\credits\scrolling_credits.gd" />
|
||||
<Content Include="menus\scenes\credits\scrolling_credits.gd.uid" />
|
||||
<Content Include="menus\scenes\credits\scrolling_credits.tscn" />
|
||||
<Content Include="menus\scenes\end_credits\end_credits.gd" />
|
||||
<Content Include="menus\scenes\end_credits\end_credits.gd.uid" />
|
||||
<Content Include="menus\scenes\end_credits\end_credits.tscn" />
|
||||
<Content Include="menus\scenes\game_scene\configurable_sub_viewport.gd" />
|
||||
<Content Include="menus\scenes\game_scene\configurable_sub_viewport.gd.uid" />
|
||||
<Content Include="menus\scenes\game_scene\game_ui.tscn" />
|
||||
<Content Include="menus\scenes\game_scene\input_display_label.gd" />
|
||||
<Content Include="menus\scenes\game_scene\input_display_label.gd.uid" />
|
||||
<Content Include="menus\scenes\game_scene\levels\level.gd" />
|
||||
<Content Include="menus\scenes\game_scene\levels\level.gd.uid" />
|
||||
<Content Include="menus\scenes\game_scene\levels\level_1.tscn" />
|
||||
<Content Include="menus\scenes\game_scene\levels\level_2.tscn" />
|
||||
<Content Include="menus\scenes\game_scene\levels\level_3.tscn" />
|
||||
<Content Include="menus\scenes\game_scene\tutorials\tutorial_1.tscn" />
|
||||
<Content Include="menus\scenes\game_scene\tutorials\tutorial_2.tscn" />
|
||||
<Content Include="menus\scenes\game_scene\tutorials\tutorial_3.tscn" />
|
||||
<Content Include="menus\scenes\game_scene\tutorial_manager.gd" />
|
||||
<Content Include="menus\scenes\game_scene\tutorial_manager.gd.uid" />
|
||||
<Content Include="menus\scenes\loading_screen\level_loading_screen.tscn" />
|
||||
<Content Include="menus\scenes\loading_screen\loading_screen.gd" />
|
||||
<Content Include="menus\scenes\loading_screen\loading_screen.gd.uid" />
|
||||
<Content Include="menus\scenes\loading_screen\loading_screen.tscn" />
|
||||
<Content Include="menus\scenes\loading_screen\loading_screen_with_shader_caching.gd" />
|
||||
<Content Include="menus\scenes\loading_screen\loading_screen_with_shader_caching.gd.uid" />
|
||||
<Content Include="menus\scenes\loading_screen\loading_screen_with_shader_caching.tscn" />
|
||||
<Content Include="menus\scenes\menus\level_select_menu\level_select_menu.gd" />
|
||||
<Content Include="menus\scenes\menus\level_select_menu\level_select_menu.gd.uid" />
|
||||
<Content Include="menus\scenes\menus\level_select_menu\level_select_menu.tscn" />
|
||||
<Content Include="menus\scenes\menus\main_menu\main_menu.gd" />
|
||||
<Content Include="menus\scenes\menus\main_menu\main_menu.gd.uid" />
|
||||
<Content Include="menus\scenes\menus\main_menu\main_menu.tscn" />
|
||||
<Content Include="menus\scenes\menus\main_menu\main_menu_with_animations.gd" />
|
||||
<Content Include="menus\scenes\menus\main_menu\main_menu_with_animations.gd.uid" />
|
||||
<Content Include="menus\scenes\menus\main_menu\main_menu_with_animations.tscn" />
|
||||
<Content Include="menus\scenes\menus\options_menu\audio\audio_input_option_control.gd" />
|
||||
<Content Include="menus\scenes\menus\options_menu\audio\audio_input_option_control.gd.uid" />
|
||||
<Content Include="menus\scenes\menus\options_menu\audio\audio_input_option_control.tscn" />
|
||||
<Content Include="menus\scenes\menus\options_menu\audio\audio_options_menu.gd" />
|
||||
<Content Include="menus\scenes\menus\options_menu\audio\audio_options_menu.gd.uid" />
|
||||
<Content Include="menus\scenes\menus\options_menu\audio\audio_options_menu.tscn" />
|
||||
<Content Include="menus\scenes\menus\options_menu\game\game_options_menu.gd" />
|
||||
<Content Include="menus\scenes\menus\options_menu\game\game_options_menu.gd.uid" />
|
||||
<Content Include="menus\scenes\menus\options_menu\game\game_options_menu.tscn" />
|
||||
<Content Include="menus\scenes\menus\options_menu\game\reset_game_control\reset_game_control.gd" />
|
||||
<Content Include="menus\scenes\menus\options_menu\game\reset_game_control\reset_game_control.gd.uid" />
|
||||
<Content Include="menus\scenes\menus\options_menu\game\reset_game_control\reset_game_control.tscn" />
|
||||
<Content Include="menus\scenes\menus\options_menu\input\input_extras_menu.tscn" />
|
||||
<Content Include="menus\scenes\menus\options_menu\input\input_options_menu.gd" />
|
||||
<Content Include="menus\scenes\menus\options_menu\input\input_options_menu.gd.uid" />
|
||||
<Content Include="menus\scenes\menus\options_menu\input\input_options_menu.tscn" />
|
||||
<Content Include="menus\scenes\menus\options_menu\input\input_options_menu_with_mouse_sensitivity.tscn" />
|
||||
<Content Include="menus\scenes\menus\options_menu\master_options_menu.gd" />
|
||||
<Content Include="menus\scenes\menus\options_menu\master_options_menu.gd.uid" />
|
||||
<Content Include="menus\scenes\menus\options_menu\master_options_menu.tscn" />
|
||||
<Content Include="menus\scenes\menus\options_menu\master_options_menu_with_tabs.tscn" />
|
||||
<Content Include="menus\scenes\menus\options_menu\mini_options_menu.gd" />
|
||||
<Content Include="menus\scenes\menus\options_menu\mini_options_menu.gd.uid" />
|
||||
<Content Include="menus\scenes\menus\options_menu\mini_options_menu.tscn" />
|
||||
<Content Include="menus\scenes\menus\options_menu\mini_options_menu_with_reset.gd" />
|
||||
<Content Include="menus\scenes\menus\options_menu\mini_options_menu_with_reset.gd.uid" />
|
||||
<Content Include="menus\scenes\menus\options_menu\mini_options_menu_with_reset.tscn" />
|
||||
<Content Include="menus\scenes\menus\options_menu\video\video_options_menu.gd" />
|
||||
<Content Include="menus\scenes\menus\options_menu\video\video_options_menu.gd.uid" />
|
||||
<Content Include="menus\scenes\menus\options_menu\video\video_options_menu.tscn" />
|
||||
<Content Include="menus\scenes\menus\options_menu\video\video_options_menu_with_extras.tscn" />
|
||||
<Content Include="menus\scenes\opening\opening.gd" />
|
||||
<Content Include="menus\scenes\opening\opening.gd.uid" />
|
||||
<Content Include="menus\scenes\opening\opening.tscn" />
|
||||
<Content Include="menus\scenes\opening\opening_with_logo.tscn" />
|
||||
<Content Include="menus\scenes\overlaid_menus\game_won_menu.gd" />
|
||||
<Content Include="menus\scenes\overlaid_menus\game_won_menu.gd.uid" />
|
||||
<Content Include="menus\scenes\overlaid_menus\game_won_menu.tscn" />
|
||||
<Content Include="menus\scenes\overlaid_menus\level_lost_menu.gd" />
|
||||
<Content Include="menus\scenes\overlaid_menus\level_lost_menu.gd.uid" />
|
||||
<Content Include="menus\scenes\overlaid_menus\level_lost_menu.tscn" />
|
||||
<Content Include="menus\scenes\overlaid_menus\level_won_menu.gd" />
|
||||
<Content Include="menus\scenes\overlaid_menus\level_won_menu.gd.uid" />
|
||||
<Content Include="menus\scenes\overlaid_menus\level_won_menu.tscn" />
|
||||
<Content Include="menus\scenes\overlaid_menus\mini_options_overlaid_menu.tscn" />
|
||||
<Content Include="menus\scenes\overlaid_menus\overlaid_menu.gd" />
|
||||
<Content Include="menus\scenes\overlaid_menus\overlaid_menu.gd.uid" />
|
||||
<Content Include="menus\scenes\overlaid_menus\overlaid_menu.tscn" />
|
||||
<Content Include="menus\scenes\overlaid_menus\overlaid_menu_container.gd" />
|
||||
<Content Include="menus\scenes\overlaid_menus\overlaid_menu_container.gd.uid" />
|
||||
<Content Include="menus\scenes\overlaid_menus\overlaid_menu_container.tscn" />
|
||||
<Content Include="menus\scenes\overlaid_menus\pause_menu.gd" />
|
||||
<Content Include="menus\scenes\overlaid_menus\pause_menu.gd.uid" />
|
||||
<Content Include="menus\scenes\overlaid_menus\pause_menu.tscn" />
|
||||
<Content Include="menus\scripts\game_state.gd" />
|
||||
<Content Include="menus\scripts\game_state.gd.uid" />
|
||||
<Content Include="menus\scripts\level_list_and_state_manager.gd" />
|
||||
<Content Include="menus\scripts\level_list_and_state_manager.gd.uid" />
|
||||
<Content Include="menus\scripts\level_state.gd" />
|
||||
<Content Include="menus\scripts\level_state.gd.uid" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="addons\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="RustyOptions" Version="0.10.1" />
|
||||
</ItemGroup>
|
||||
<!-- gdUnit4 package dependencies -->
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
|
||||
<PackageReference Include="gdUnit4.api" Version="5.1.0-rc3" />
|
||||
<PackageReference Include="gdUnit4.test.adapter" Version="3.0.0" />
|
||||
<PackageReference Include="gdUnit4.analyzers" Version="1.0.0">
|
||||
<PrivateAssets>none</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<EnableDynamicLoading>true</EnableDynamicLoading>
|
||||
<RootNamespace>Movementtests</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Content Include=".runsettings"/>
|
||||
<Content Include="export_presets.cfg"/>
|
||||
<Content Include="menus\assets\git_logo\Git-Logo-2Color.png"/>
|
||||
<Content Include="menus\assets\git_logo\Git-Logo-2Color.png.import"/>
|
||||
<Content Include="menus\assets\git_logo\LICENSE.txt"/>
|
||||
<Content Include="menus\assets\godot_engine_logo\LICENSE.txt"/>
|
||||
<Content Include="menus\assets\godot_engine_logo\logo_vertical_color_dark.png"/>
|
||||
<Content Include="menus\assets\godot_engine_logo\logo_vertical_color_dark.png.import"/>
|
||||
<Content Include="menus\assets\icon.png"/>
|
||||
<Content Include="menus\assets\icon.png.import"/>
|
||||
<Content Include="menus\ATTRIBUTION.md"/>
|
||||
<Content Include="menus\resources\themes\expedition.tres"/>
|
||||
<Content Include="menus\resources\themes\gravity.tres"/>
|
||||
<Content Include="menus\resources\themes\grow.tres"/>
|
||||
<Content Include="menus\resources\themes\lab.tres"/>
|
||||
<Content Include="menus\resources\themes\lore.tres"/>
|
||||
<Content Include="menus\resources\themes\steal_this_theme.tres"/>
|
||||
<Content Include="menus\scenes\credits\scrollable_credits.gd"/>
|
||||
<Content Include="menus\scenes\credits\scrollable_credits.gd.uid"/>
|
||||
<Content Include="menus\scenes\credits\scrollable_credits.tscn"/>
|
||||
<Content Include="menus\scenes\credits\scrolling_credits.gd"/>
|
||||
<Content Include="menus\scenes\credits\scrolling_credits.gd.uid"/>
|
||||
<Content Include="menus\scenes\credits\scrolling_credits.tscn"/>
|
||||
<Content Include="menus\scenes\end_credits\end_credits.gd"/>
|
||||
<Content Include="menus\scenes\end_credits\end_credits.gd.uid"/>
|
||||
<Content Include="menus\scenes\end_credits\end_credits.tscn"/>
|
||||
<Content Include="menus\scenes\game_scene\configurable_sub_viewport.gd"/>
|
||||
<Content Include="menus\scenes\game_scene\configurable_sub_viewport.gd.uid"/>
|
||||
<Content Include="menus\scenes\game_scene\game_ui.tscn"/>
|
||||
<Content Include="menus\scenes\game_scene\input_display_label.gd"/>
|
||||
<Content Include="menus\scenes\game_scene\input_display_label.gd.uid"/>
|
||||
<Content Include="menus\scenes\game_scene\levels\level.gd"/>
|
||||
<Content Include="menus\scenes\game_scene\levels\level.gd.uid"/>
|
||||
<Content Include="menus\scenes\game_scene\levels\level_1.tscn"/>
|
||||
<Content Include="menus\scenes\game_scene\levels\level_2.tscn"/>
|
||||
<Content Include="menus\scenes\game_scene\levels\level_3.tscn"/>
|
||||
<Content Include="menus\scenes\game_scene\tutorials\tutorial_1.tscn"/>
|
||||
<Content Include="menus\scenes\game_scene\tutorials\tutorial_2.tscn"/>
|
||||
<Content Include="menus\scenes\game_scene\tutorials\tutorial_3.tscn"/>
|
||||
<Content Include="menus\scenes\game_scene\tutorial_manager.gd"/>
|
||||
<Content Include="menus\scenes\game_scene\tutorial_manager.gd.uid"/>
|
||||
<Content Include="menus\scenes\loading_screen\level_loading_screen.tscn"/>
|
||||
<Content Include="menus\scenes\loading_screen\loading_screen.gd"/>
|
||||
<Content Include="menus\scenes\loading_screen\loading_screen.gd.uid"/>
|
||||
<Content Include="menus\scenes\loading_screen\loading_screen.tscn"/>
|
||||
<Content Include="menus\scenes\loading_screen\loading_screen_with_shader_caching.gd"/>
|
||||
<Content Include="menus\scenes\loading_screen\loading_screen_with_shader_caching.gd.uid"/>
|
||||
<Content Include="menus\scenes\loading_screen\loading_screen_with_shader_caching.tscn"/>
|
||||
<Content Include="menus\scenes\menus\level_select_menu\level_select_menu.gd"/>
|
||||
<Content Include="menus\scenes\menus\level_select_menu\level_select_menu.gd.uid"/>
|
||||
<Content Include="menus\scenes\menus\level_select_menu\level_select_menu.tscn"/>
|
||||
<Content Include="menus\scenes\menus\main_menu\main_menu.gd"/>
|
||||
<Content Include="menus\scenes\menus\main_menu\main_menu.gd.uid"/>
|
||||
<Content Include="menus\scenes\menus\main_menu\main_menu.tscn"/>
|
||||
<Content Include="menus\scenes\menus\main_menu\main_menu_with_animations.gd"/>
|
||||
<Content Include="menus\scenes\menus\main_menu\main_menu_with_animations.gd.uid"/>
|
||||
<Content Include="menus\scenes\menus\main_menu\main_menu_with_animations.tscn"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\audio\audio_input_option_control.gd"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\audio\audio_input_option_control.gd.uid"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\audio\audio_input_option_control.tscn"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\audio\audio_options_menu.gd"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\audio\audio_options_menu.gd.uid"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\audio\audio_options_menu.tscn"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\game\game_options_menu.gd"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\game\game_options_menu.gd.uid"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\game\game_options_menu.tscn"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\game\reset_game_control\reset_game_control.gd"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\game\reset_game_control\reset_game_control.gd.uid"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\game\reset_game_control\reset_game_control.tscn"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\input\input_extras_menu.tscn"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\input\input_options_menu.gd"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\input\input_options_menu.gd.uid"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\input\input_options_menu.tscn"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\input\input_options_menu_with_mouse_sensitivity.tscn"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\master_options_menu.gd"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\master_options_menu.gd.uid"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\master_options_menu.tscn"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\master_options_menu_with_tabs.tscn"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\mini_options_menu.gd"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\mini_options_menu.gd.uid"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\mini_options_menu.tscn"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\mini_options_menu_with_reset.gd"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\mini_options_menu_with_reset.gd.uid"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\mini_options_menu_with_reset.tscn"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\video\video_options_menu.gd"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\video\video_options_menu.gd.uid"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\video\video_options_menu.tscn"/>
|
||||
<Content Include="menus\scenes\menus\options_menu\video\video_options_menu_with_extras.tscn"/>
|
||||
<Content Include="menus\scenes\opening\opening.gd"/>
|
||||
<Content Include="menus\scenes\opening\opening.gd.uid"/>
|
||||
<Content Include="menus\scenes\opening\opening.tscn"/>
|
||||
<Content Include="menus\scenes\opening\opening_with_logo.tscn"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\game_won_menu.gd"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\game_won_menu.gd.uid"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\game_won_menu.tscn"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\level_lost_menu.gd"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\level_lost_menu.gd.uid"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\level_lost_menu.tscn"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\level_won_menu.gd"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\level_won_menu.gd.uid"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\level_won_menu.tscn"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\mini_options_overlaid_menu.tscn"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\overlaid_menu.gd"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\overlaid_menu.gd.uid"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\overlaid_menu.tscn"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\overlaid_menu_container.gd"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\overlaid_menu_container.gd.uid"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\overlaid_menu_container.tscn"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\pause_menu.gd"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\pause_menu.gd.uid"/>
|
||||
<Content Include="menus\scenes\overlaid_menus\pause_menu.tscn"/>
|
||||
<Content Include="menus\scripts\game_state.gd"/>
|
||||
<Content Include="menus\scripts\game_state.gd.uid"/>
|
||||
<Content Include="menus\scripts\level_list_and_state_manager.gd"/>
|
||||
<Content Include="menus\scripts\level_list_and_state_manager.gd.uid"/>
|
||||
<Content Include="menus\scripts\level_state.gd"/>
|
||||
<Content Include="menus\scripts\level_state.gd.uid"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="addons\"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="RustyOptions" Version="0.10.1"/>
|
||||
</ItemGroup>
|
||||
<!-- gdUnit4 package dependencies -->
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.0"/>
|
||||
<PackageReference Include="gdUnit4.api" Version="5.1.0-rc3"/>
|
||||
<PackageReference Include="gdUnit4.test.adapter" Version="3.0.0"/>
|
||||
<PackageReference Include="gdUnit4.analyzers" Version="1.0.0">
|
||||
<PrivateAssets>none</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<Import Project="addons/forge/Forge.props"/>
|
||||
</Project>
|
||||
8
addons/forge/Forge.props
Normal file
@@ -0,0 +1,8 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Gamesmiths.Forge" Version="0.2.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
109
addons/forge/ForgePluginLoader.cs
Normal file
@@ -0,0 +1,109 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
#if TOOLS
|
||||
using System.Diagnostics;
|
||||
using Gamesmiths.Forge.Godot.Editor;
|
||||
using Gamesmiths.Forge.Godot.Editor.Attributes;
|
||||
using Gamesmiths.Forge.Godot.Editor.Cues;
|
||||
using Gamesmiths.Forge.Godot.Editor.Tags;
|
||||
using Godot;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot;
|
||||
|
||||
[Tool]
|
||||
public partial class ForgePluginLoader : EditorPlugin
|
||||
{
|
||||
private const string AutoloadPath = "uid://ba8fquhtwu5mu";
|
||||
private const string PluginScenePath = "uid://pjscvogl6jak";
|
||||
|
||||
private EditorDock? _editorDock;
|
||||
private PanelContainer? _dockedScene;
|
||||
private TagContainerInspectorPlugin? _tagContainerInspectorPlugin;
|
||||
private TagInspectorPlugin? _tagInspectorPlugin;
|
||||
private AttributeSetInspectorPlugin? _attributeSetInspectorPlugin;
|
||||
private CueHandlerInspectorPlugin? _cueHandlerInspectorPlugin;
|
||||
private AttributeEditorPlugin? _attributeEditorPlugin;
|
||||
|
||||
public override void _EnterTree()
|
||||
{
|
||||
PackedScene pluginScene = ResourceLoader.Load<PackedScene>(PluginScenePath);
|
||||
|
||||
_editorDock = new EditorDock
|
||||
{
|
||||
Title = "Forge",
|
||||
DockIcon = GD.Load<Texture2D>("uid://cu6ncpuumjo20"),
|
||||
DefaultSlot = EditorDock.DockSlot.RightUl,
|
||||
};
|
||||
|
||||
_dockedScene = (PanelContainer)pluginScene.Instantiate();
|
||||
_dockedScene.GetNode<TagsEditor>("%Tags").IsPluginInstance = true;
|
||||
|
||||
_editorDock.AddChild(_dockedScene);
|
||||
AddDock(_editorDock);
|
||||
|
||||
_tagContainerInspectorPlugin = new TagContainerInspectorPlugin();
|
||||
AddInspectorPlugin(_tagContainerInspectorPlugin);
|
||||
_tagInspectorPlugin = new TagInspectorPlugin();
|
||||
AddInspectorPlugin(_tagInspectorPlugin);
|
||||
_attributeSetInspectorPlugin = new AttributeSetInspectorPlugin();
|
||||
AddInspectorPlugin(_attributeSetInspectorPlugin);
|
||||
_cueHandlerInspectorPlugin = new CueHandlerInspectorPlugin();
|
||||
AddInspectorPlugin(_cueHandlerInspectorPlugin);
|
||||
_attributeEditorPlugin = new AttributeEditorPlugin();
|
||||
AddInspectorPlugin(_attributeEditorPlugin);
|
||||
|
||||
AddToolMenuItem("Repair assets tags", new Callable(this, MethodName.CallAssetRepairTool));
|
||||
}
|
||||
|
||||
public override void _ExitTree()
|
||||
{
|
||||
Debug.Assert(_editorDock is not null, $"{nameof(_editorDock)} should have been initialized on _Ready().");
|
||||
Debug.Assert(_dockedScene is not null, $"{nameof(_dockedScene)} should have been initialized on _Ready().");
|
||||
|
||||
RemoveDock(_editorDock);
|
||||
_editorDock.QueueFree();
|
||||
_dockedScene.Free();
|
||||
|
||||
RemoveInspectorPlugin(_tagContainerInspectorPlugin);
|
||||
RemoveInspectorPlugin(_tagInspectorPlugin);
|
||||
RemoveInspectorPlugin(_attributeSetInspectorPlugin);
|
||||
RemoveInspectorPlugin(_cueHandlerInspectorPlugin);
|
||||
RemoveInspectorPlugin(_attributeEditorPlugin);
|
||||
|
||||
RemoveToolMenuItem("Repair assets tags");
|
||||
}
|
||||
|
||||
public override void _EnablePlugin()
|
||||
{
|
||||
base._EnablePlugin();
|
||||
|
||||
var config = ProjectSettings.LoadResourcePack(AutoloadPath);
|
||||
|
||||
if (config)
|
||||
{
|
||||
GD.PrintErr("Failed to load script at res://addons/forge/core/ForgeBootstrap.cs");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ProjectSettings.HasSetting("autoload/Forge Bootstrap"))
|
||||
{
|
||||
ProjectSettings.SetSetting("autoload/Forge Bootstrap", AutoloadPath);
|
||||
ProjectSettings.Save();
|
||||
}
|
||||
}
|
||||
|
||||
public override void _DisablePlugin()
|
||||
{
|
||||
if (ProjectSettings.HasSetting("autoload/Forge Bootstrap"))
|
||||
{
|
||||
ProjectSettings.Clear("autoload/Forge Bootstrap");
|
||||
ProjectSettings.Save();
|
||||
}
|
||||
}
|
||||
|
||||
private static void CallAssetRepairTool()
|
||||
{
|
||||
AssetRepairTool.RepairAllAssetsTags();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
1
addons/forge/ForgePluginLoader.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://686m2ah4as6w
|
||||
21
addons/forge/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 Gamesmiths Guild
|
||||
|
||||
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.
|
||||
58
addons/forge/README.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# Forge for Godot
|
||||
|
||||
Forge for Godot is an Unreal GAS-like gameplay framework for the Godot Engine.
|
||||
|
||||
It integrates the [Forge Gameplay System](https://github.com/gamesmiths-guild/forge) into Godot, providing a robust, data-driven foundation for gameplay features such as attributes, effects, gameplay tags, abilities, events, and cues, fully aligned with Godot’s node, resource, and editor workflows.
|
||||
|
||||
This plugin enables you to:
|
||||
|
||||
- Use **ForgeEntity** nodes or implement `IForgeEntity` to integrate core Forge systems like attributes, effects, abilities, events and tags.
|
||||
- Define attributes, effects, abilities, cues, and tags directly in the Godot editor.
|
||||
- Apply and manage gameplay effects with area or raycasting nodes.
|
||||
- Create hierarchical gameplay tags using the built-in Tags Editor.
|
||||
- Trigger visual and audio feedback with the Cues system.
|
||||
- Create player skills, attacks, or behaviors, with support for custom logic, costs, cooldowns, and triggers.
|
||||
|
||||
## Features
|
||||
|
||||
- **Effects System**: Comprehensive effect application and management, including stacking, periodic, instant, and infinite effects.
|
||||
- **Attributes System**: Attribute management, supporting sets, modifiers, and configuration.
|
||||
- **Tags System**: Full hierarchical tag system with Godot editor integration.
|
||||
- **Abilities System**: Feature-complete ability system, supporting grant/removal, custom behaviors, triggers, cooldowns, and costs.
|
||||
- **Events System**: Gameplay event bus supporting event-driven logic, subscriptions, and triggers.
|
||||
- **Cues System**: Visual/audio feedback layer; decouples presentation from game logic.
|
||||
- **Editor Extensions**: Custom inspector elements and tag editor with Godot integration.
|
||||
- **Custom Nodes**: Includes nodes like `ForgeEntity`, `ForgeAttributeSet`, `EffectArea2D`, and more.
|
||||
|
||||
## Installation
|
||||
|
||||
### Requirements
|
||||
|
||||
- Godot 4.6 or later with .NET support.
|
||||
- .NET SDK 8.0 or later.
|
||||
|
||||
### Steps
|
||||
|
||||
1. Install the plugin via the Godot Asset Library or manually by copying the `addons` folder.
|
||||
- [Godot Asset Library](https://godotengine.org/asset-library/asset/4239)
|
||||
- [Manual installation guide](https://docs.godotengine.org/en/stable/tutorials/plugins/editor/installing_plugins.html)
|
||||
2. Add the following line in your `.csproj` file (before the closing `</Project>` tag). The `.csproj` file can be created through Godot by navigating to `Project > Tools > C# > Create C# solution`:
|
||||
```xml
|
||||
<Import Project="addons/forge/Forge.props" />
|
||||
```
|
||||
3. Back in the Godot editor, build your project by clicking `Build` in the top-right corner of the script editor.
|
||||
4. Enable **Forge Gameplay System** in `Project > Project Settings > Plugins`.
|
||||
|
||||
## Getting Started
|
||||
|
||||
- See the [Quick Start Guide](https://github.com/gamesmiths-guild/forge-godot/blob/main/docs/quick-start.md) for a basic setup.
|
||||
- Explore [sample scenes](https://github.com/gamesmiths-guild/forge-godot/tree/main/examples) by cloning the full repo.
|
||||
|
||||
## Documentation
|
||||
|
||||
Full documentation, examples, and advanced usage are available in the [Forge for Godot GitHub repository](https://github.com/gamesmiths-guild/forge-godot).
|
||||
For technical details about core systems, see the [Forge Gameplay System documentation](https://github.com/gamesmiths-guild/forge/blob/main/docs/README.md).
|
||||
|
||||
## License
|
||||
|
||||
This plugin is licensed under the same terms as the core [Forge Gameplay System](https://github.com/gamesmiths-guild/forge).
|
||||
312
addons/forge/core/EffectApplier.cs
Normal file
@@ -0,0 +1,312 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using Gamesmiths.Forge.Core;
|
||||
using Gamesmiths.Forge.Effects;
|
||||
using Gamesmiths.Forge.Godot.Nodes;
|
||||
using Godot;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Core;
|
||||
|
||||
internal sealed class EffectApplier
|
||||
{
|
||||
private record struct EffectKey(EffectData EffectData, EffectOwnership EffectOwnership, int Level);
|
||||
|
||||
private readonly List<EffectData> _effects = [];
|
||||
|
||||
private readonly Dictionary<IForgeEntity, List<ActiveEffectHandle>> _effectInstances = [];
|
||||
private readonly Dictionary<EffectKey, Effect> _effectsCache = [];
|
||||
|
||||
public EffectApplier(Node node)
|
||||
{
|
||||
foreach (Node child in node.GetChildren())
|
||||
{
|
||||
if (child is ForgeEffect effectNode && effectNode.EffectData is not null)
|
||||
{
|
||||
_effects.Add(effectNode.EffectData.GetEffectData());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void ApplyEffects(
|
||||
Node node,
|
||||
IForgeEntity? effectOwner,
|
||||
IForgeEntity? effectSource,
|
||||
int level = 1)
|
||||
{
|
||||
if (node is IForgeEntity forgeEntity)
|
||||
{
|
||||
ApplyEffects(forgeEntity, effectOwner, effectSource, level);
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (Node? child in node.GetChildren())
|
||||
{
|
||||
if (child is IForgeEntity forgeEntityChild)
|
||||
{
|
||||
ApplyEffects(forgeEntityChild, effectOwner, effectSource, level);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void ApplyEffects<TData>(
|
||||
Node node,
|
||||
TData contextData,
|
||||
IForgeEntity? effectOwner,
|
||||
IForgeEntity? effectSource,
|
||||
int level = 1)
|
||||
{
|
||||
if (node is IForgeEntity forgeEntity)
|
||||
{
|
||||
ApplyEffects(forgeEntity, contextData, effectOwner, effectSource, level);
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (Node? child in node.GetChildren())
|
||||
{
|
||||
if (child is IForgeEntity forgeEntityChild)
|
||||
{
|
||||
ApplyEffects(forgeEntityChild, contextData, effectOwner, effectSource, level);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void AddEffects(
|
||||
Node node,
|
||||
IForgeEntity? effectOwner,
|
||||
IForgeEntity? effectSource,
|
||||
int level)
|
||||
{
|
||||
if (node is IForgeEntity forgeEntity)
|
||||
{
|
||||
AddEffects(forgeEntity, effectOwner, effectSource, level);
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (Node? child in node.GetChildren())
|
||||
{
|
||||
if (child is IForgeEntity forgeEntityChild)
|
||||
{
|
||||
AddEffects(forgeEntityChild, effectOwner, effectSource, level);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void AddEffects<TData>(
|
||||
Node node,
|
||||
TData contextData,
|
||||
IForgeEntity? effectOwner,
|
||||
IForgeEntity? effectSource,
|
||||
int level)
|
||||
{
|
||||
if (node is IForgeEntity forgeEntity)
|
||||
{
|
||||
AddEffects(forgeEntity, contextData, effectOwner, effectSource, level);
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (Node? child in node.GetChildren())
|
||||
{
|
||||
if (child is IForgeEntity forgeEntityChild)
|
||||
{
|
||||
AddEffects(forgeEntityChild, contextData, effectOwner, effectSource, level);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveEffects(Node node)
|
||||
{
|
||||
if (node is IForgeEntity forgeEntity)
|
||||
{
|
||||
RemoveEffects(forgeEntity);
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (Node? child in node.GetChildren())
|
||||
{
|
||||
if (child is IForgeEntity forgeEntityChild)
|
||||
{
|
||||
RemoveEffects(forgeEntityChild);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplyEffects(
|
||||
IForgeEntity forgeEntity,
|
||||
IForgeEntity? effectOwner,
|
||||
IForgeEntity? effectSource,
|
||||
int level)
|
||||
{
|
||||
var effectOwnership = new EffectOwnership(effectOwner, effectSource);
|
||||
|
||||
foreach (EffectData effectData in _effects)
|
||||
{
|
||||
var key = new EffectKey(effectData, effectOwnership, level);
|
||||
|
||||
if (_effectsCache.TryGetValue(key, out Effect? cachedEffect))
|
||||
{
|
||||
forgeEntity.EffectsManager.ApplyEffect(cachedEffect);
|
||||
continue;
|
||||
}
|
||||
|
||||
var effect = new Effect(
|
||||
effectData,
|
||||
new EffectOwnership(effectOwner, effectSource),
|
||||
level);
|
||||
|
||||
_effectsCache[key] = effect;
|
||||
|
||||
forgeEntity.EffectsManager.ApplyEffect(effect);
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplyEffects<TData>(
|
||||
IForgeEntity forgeEntity,
|
||||
TData contextData,
|
||||
IForgeEntity? effectOwner,
|
||||
IForgeEntity? effectSource,
|
||||
int level)
|
||||
{
|
||||
var effectOwnership = new EffectOwnership(effectOwner, effectSource);
|
||||
|
||||
foreach (EffectData effectData in _effects)
|
||||
{
|
||||
var key = new EffectKey(effectData, effectOwnership, level);
|
||||
|
||||
if (_effectsCache.TryGetValue(key, out Effect? cachedEffect))
|
||||
{
|
||||
forgeEntity.EffectsManager.ApplyEffect(cachedEffect);
|
||||
continue;
|
||||
}
|
||||
|
||||
var effect = new Effect(
|
||||
effectData,
|
||||
new EffectOwnership(effectOwner, effectSource),
|
||||
level);
|
||||
|
||||
_effectsCache[key] = effect;
|
||||
|
||||
forgeEntity.EffectsManager.ApplyEffect(effect, contextData);
|
||||
}
|
||||
}
|
||||
|
||||
private void AddEffects(
|
||||
IForgeEntity forgeEntity,
|
||||
IForgeEntity?
|
||||
effectOwner,
|
||||
IForgeEntity? effectSource,
|
||||
int level)
|
||||
{
|
||||
var instanceEffects = new List<ActiveEffectHandle>();
|
||||
if (!_effectInstances.TryAdd(forgeEntity, instanceEffects))
|
||||
{
|
||||
instanceEffects = _effectInstances[forgeEntity];
|
||||
}
|
||||
|
||||
var effectOwnership = new EffectOwnership(effectOwner, effectSource);
|
||||
|
||||
foreach (EffectData effectData in _effects)
|
||||
{
|
||||
var key = new EffectKey(effectData, effectOwnership, level);
|
||||
|
||||
ActiveEffectHandle? handle;
|
||||
if (_effectsCache.TryGetValue(key, out Effect? cachedEffect))
|
||||
{
|
||||
handle = forgeEntity.EffectsManager.ApplyEffect(cachedEffect);
|
||||
|
||||
if (handle is null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
instanceEffects.Add(handle);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
var effect = new Effect(
|
||||
effectData,
|
||||
new EffectOwnership(effectOwner, effectSource),
|
||||
level);
|
||||
|
||||
handle = forgeEntity.EffectsManager.ApplyEffect(effect);
|
||||
|
||||
if (handle is null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
instanceEffects.Add(handle);
|
||||
}
|
||||
}
|
||||
|
||||
private void AddEffects<TData>(
|
||||
IForgeEntity forgeEntity,
|
||||
TData contextData,
|
||||
IForgeEntity? effectOwner,
|
||||
IForgeEntity? effectSource,
|
||||
int level)
|
||||
{
|
||||
var instanceEffects = new List<ActiveEffectHandle>();
|
||||
if (!_effectInstances.TryAdd(forgeEntity, instanceEffects))
|
||||
{
|
||||
instanceEffects = _effectInstances[forgeEntity];
|
||||
}
|
||||
|
||||
var effectOwnership = new EffectOwnership(effectOwner, effectSource);
|
||||
|
||||
foreach (EffectData effectData in _effects)
|
||||
{
|
||||
var key = new EffectKey(effectData, effectOwnership, level);
|
||||
|
||||
ActiveEffectHandle? handle;
|
||||
if (_effectsCache.TryGetValue(key, out Effect? cachedEffect))
|
||||
{
|
||||
handle = forgeEntity.EffectsManager.ApplyEffect(cachedEffect);
|
||||
|
||||
if (handle is null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
instanceEffects.Add(handle);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
var effect = new Effect(
|
||||
effectData,
|
||||
new EffectOwnership(effectOwner, effectSource),
|
||||
level);
|
||||
|
||||
handle = forgeEntity.EffectsManager.ApplyEffect(effect, contextData);
|
||||
|
||||
if (handle is null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
instanceEffects.Add(handle);
|
||||
}
|
||||
}
|
||||
|
||||
private void RemoveEffects(IForgeEntity forgeEntity)
|
||||
{
|
||||
if (!_effectInstances.TryGetValue(forgeEntity, out List<ActiveEffectHandle>? value))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (ActiveEffectHandle handle in value)
|
||||
{
|
||||
forgeEntity.EffectsManager.RemoveEffect(handle);
|
||||
}
|
||||
|
||||
_effectInstances[forgeEntity] = [];
|
||||
}
|
||||
}
|
||||
1
addons/forge/core/EffectApplier.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bs52uo5esaiu2
|
||||
14
addons/forge/core/ForgeBootstrap.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
using Godot;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Core;
|
||||
|
||||
public partial class ForgeBootstrap : Node
|
||||
{
|
||||
public override void _Ready()
|
||||
{
|
||||
ForgeData pluginData = ResourceLoader.Load<ForgeData>("uid://8j4xg16o3qnl");
|
||||
_ = new ForgeManagers(pluginData);
|
||||
}
|
||||
}
|
||||
1
addons/forge/core/ForgeBootstrap.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://ba8fquhtwu5mu
|
||||
21
addons/forge/core/ForgeCurve.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
using Gamesmiths.Forge.Core;
|
||||
using Godot;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Core;
|
||||
|
||||
public readonly struct ForgeCurve(Curve? curve) : ICurve
|
||||
{
|
||||
private readonly Curve? _curve = curve;
|
||||
|
||||
public float Evaluate(float value)
|
||||
{
|
||||
if (_curve is null)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
return _curve.Sample(value);
|
||||
}
|
||||
}
|
||||
1
addons/forge/core/ForgeCurve.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cei2cgvy84iy6
|
||||
13
addons/forge/core/ForgeData.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
using Godot;
|
||||
using Godot.Collections;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Core;
|
||||
|
||||
[Tool]
|
||||
public partial class ForgeData : Resource
|
||||
{
|
||||
[Export]
|
||||
public Array<string> RegisteredTags { get; set; } = [];
|
||||
}
|
||||
1
addons/forge/core/ForgeData.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bq4vlbfx00hea
|
||||
30
addons/forge/core/ForgeManagers.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
using Gamesmiths.Forge.Core;
|
||||
using Gamesmiths.Forge.Cues;
|
||||
using Gamesmiths.Forge.Tags;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Core;
|
||||
|
||||
public class ForgeManagers
|
||||
{
|
||||
public static ForgeManagers Instance { get; private set; } = null!;
|
||||
|
||||
public TagsManager TagsManager { get; private set; }
|
||||
|
||||
public CuesManager CuesManager { get; private set; }
|
||||
|
||||
public ForgeManagers(ForgeData pluginData)
|
||||
{
|
||||
Instance = this;
|
||||
|
||||
#if DEBUG
|
||||
Validation.Enabled = true;
|
||||
#else
|
||||
Validation.Enabled = false;
|
||||
#endif
|
||||
|
||||
TagsManager = new TagsManager([.. pluginData.RegisteredTags]);
|
||||
CuesManager = new CuesManager();
|
||||
}
|
||||
}
|
||||
1
addons/forge/core/ForgeManagers.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://djeiinm1gclh4
|
||||
98
addons/forge/core/ForgeRandom.cs
Normal file
@@ -0,0 +1,98 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
using System;
|
||||
using Gamesmiths.Forge.Core;
|
||||
using Godot;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Core;
|
||||
|
||||
public class ForgeRandom : IRandom, IDisposable
|
||||
{
|
||||
private readonly RandomNumberGenerator _randomNumberGenerator;
|
||||
|
||||
public ForgeRandom()
|
||||
{
|
||||
_randomNumberGenerator = new RandomNumberGenerator();
|
||||
_randomNumberGenerator.Randomize();
|
||||
}
|
||||
|
||||
public void NextBytes(byte[] buffer)
|
||||
{
|
||||
for (var i = 0; i < buffer.Length; i++)
|
||||
{
|
||||
buffer[i] = (byte)_randomNumberGenerator.RandiRange(0, 255);
|
||||
}
|
||||
}
|
||||
|
||||
public void NextBytes(Span<byte> buffer)
|
||||
{
|
||||
for (var i = 0; i < buffer.Length; i++)
|
||||
{
|
||||
buffer[i] = (byte)_randomNumberGenerator.RandiRange(0, 255);
|
||||
}
|
||||
}
|
||||
|
||||
public double NextDouble()
|
||||
{
|
||||
return _randomNumberGenerator.Randf();
|
||||
}
|
||||
|
||||
public int NextInt()
|
||||
{
|
||||
return (int)_randomNumberGenerator.Randi();
|
||||
}
|
||||
|
||||
public int NextInt(int maxValue)
|
||||
{
|
||||
return _randomNumberGenerator.RandiRange(0, maxValue - 1);
|
||||
}
|
||||
|
||||
public int NextInt(int minValue, int maxValue)
|
||||
{
|
||||
return _randomNumberGenerator.RandiRange(minValue, maxValue - 1);
|
||||
}
|
||||
|
||||
public long NextInt64()
|
||||
{
|
||||
unchecked
|
||||
{
|
||||
var high = _randomNumberGenerator.Randi();
|
||||
var low = _randomNumberGenerator.Randi();
|
||||
return ((long)high << 32) | low;
|
||||
}
|
||||
}
|
||||
|
||||
public long NextInt64(long maxValue)
|
||||
{
|
||||
return NextInt64(0, maxValue);
|
||||
}
|
||||
|
||||
public long NextInt64(long minValue, long maxValue)
|
||||
{
|
||||
if (minValue >= maxValue)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(minValue), "minValue must be less than maxValue.");
|
||||
}
|
||||
|
||||
var range = (ulong)(maxValue - minValue);
|
||||
var rand = (ulong)NextInt64();
|
||||
|
||||
return (long)(rand % range) + minValue;
|
||||
}
|
||||
|
||||
public float NextSingle()
|
||||
{
|
||||
return _randomNumberGenerator.Randf();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
_randomNumberGenerator.Dispose();
|
||||
}
|
||||
}
|
||||
1
addons/forge/core/ForgeRandom.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dap6x2ddf6baj
|
||||
7
addons/forge/core/forge_data.tres
Normal file
@@ -0,0 +1,7 @@
|
||||
[gd_resource type="Resource" load_steps=2 format=3 uid="uid://8j4xg16o3qnl"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bq4vlbfx00hea" path="res://addons/forge/core/ForgeData.cs" id="1_x0pne"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_x0pne")
|
||||
RegisteredTags = Array[String](["effect.fire", "effect.wet", "cue.floating.text", "cue.vfx.fire", "cue.vfx.wet", "cue.vfx.regen", "cooldown.enemy.attack", "set_by_caller.damage", "event.damage", "cooldown", "cooldown.skill.projectile", "cooldown.skill.shield", "cooldown.skill.dash", "movement.block", "immunity.damage", "effect.mana_shield", "cue.vfx.shield", "event.damage.taken", "event.damage.dealt", "event", "set_by_caller", "trait.flammable", "trait.healable", "trait.damageable", "trait.wettable", "cue.vfx.reflect", "cue.vfx", "cooldown.skill", "cooldown.skill.reflect"])
|
||||
210
addons/forge/editor/AssetRepairTool.cs
Normal file
@@ -0,0 +1,210 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
#if TOOLS
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Gamesmiths.Forge.Godot.Core;
|
||||
using Gamesmiths.Forge.Godot.Resources;
|
||||
using Gamesmiths.Forge.Tags;
|
||||
using Godot;
|
||||
using Godot.Collections;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Editor;
|
||||
|
||||
[Tool]
|
||||
public partial class AssetRepairTool : EditorPlugin
|
||||
{
|
||||
public static void RepairAllAssetsTags()
|
||||
{
|
||||
ForgeData pluginData = ResourceLoader.Load<ForgeData>("uid://8j4xg16o3qnl");
|
||||
var tagsManager = new TagsManager([.. pluginData.RegisteredTags]);
|
||||
|
||||
List<string> scenes = GetScenePaths("res://");
|
||||
GD.Print($"Found {scenes.Count} scene(s) to process.");
|
||||
|
||||
var openedScenes = EditorInterface.Singleton.GetOpenScenes();
|
||||
|
||||
foreach (var originalScenePath in scenes)
|
||||
{
|
||||
// For some weird reason scenes from the GetScenePath are coming with 3 slashes instead of just two.
|
||||
var scenePath = originalScenePath.Replace("res:///", "res://");
|
||||
|
||||
GD.Print($"Processing scene: {scenePath}.");
|
||||
PackedScene? packedScene = ResourceLoader.Load<PackedScene>(scenePath);
|
||||
|
||||
if (packedScene is null)
|
||||
{
|
||||
GD.PrintErr($"Failed to load scene: {scenePath}.");
|
||||
continue;
|
||||
}
|
||||
|
||||
Node sceneInstance = packedScene.Instantiate();
|
||||
var modified = ProcessNode(sceneInstance, tagsManager);
|
||||
|
||||
if (!modified)
|
||||
{
|
||||
GD.Print($"No changes needed for {scenePath}.");
|
||||
continue;
|
||||
}
|
||||
|
||||
// 'sceneInstance' is the modified scene instance in memory, need to save to disk and reload if needed.
|
||||
var newScene = new PackedScene();
|
||||
Error error = newScene.Pack(sceneInstance);
|
||||
if (error != Error.Ok)
|
||||
{
|
||||
GD.PrintErr($"Failed to pack scene: {error}.");
|
||||
continue;
|
||||
}
|
||||
|
||||
error = ResourceSaver.Save(newScene, scenePath);
|
||||
if (error != Error.Ok)
|
||||
{
|
||||
GD.PrintErr($"Failed to save scene: {error}.");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (openedScenes.Contains(scenePath))
|
||||
{
|
||||
GD.Print($"Scene was opened, reloading background scene: {scenePath}.");
|
||||
EditorInterface.Singleton.ReloadSceneFromPath(scenePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recursively get scene files from a folder.
|
||||
/// </summary>
|
||||
/// <param name="basePath">Current path iteration.</param>
|
||||
/// <returns>List of scenes found.</returns>
|
||||
private static List<string> GetScenePaths(string basePath)
|
||||
{
|
||||
var scenePaths = new List<string>();
|
||||
var dir = DirAccess.Open(basePath);
|
||||
|
||||
if (dir is null)
|
||||
{
|
||||
GD.PrintErr($"Failed to open directory: {basePath}");
|
||||
return scenePaths;
|
||||
}
|
||||
|
||||
// Start listing directory entries; skip navigational and hidden files.
|
||||
dir.ListDirBegin();
|
||||
while (true)
|
||||
{
|
||||
var fileName = dir.GetNext();
|
||||
if (string.IsNullOrEmpty(fileName))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
var filePath = $"{basePath}/{fileName}";
|
||||
if (dir.CurrentIsDir())
|
||||
{
|
||||
// Recursively scan subdirectories.
|
||||
scenePaths.AddRange(GetScenePaths(filePath));
|
||||
}
|
||||
else if (fileName.EndsWith(".tscn", StringComparison.InvariantCultureIgnoreCase)
|
||||
|| fileName.EndsWith(".scn", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
scenePaths.Add(filePath);
|
||||
}
|
||||
}
|
||||
|
||||
dir.ListDirEnd();
|
||||
return scenePaths;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recursively process nodes; returns true if any ForgeEntity was modified.
|
||||
/// </summary>
|
||||
/// <param name="node">Current node iteration.</param>
|
||||
/// <param name="tagsManager">The tags manager used to validate tags.</param>
|
||||
/// <returns><see langword="true"/> if any ForgeEntity was modified.</returns>
|
||||
private static bool ProcessNode(Node node, TagsManager tagsManager)
|
||||
{
|
||||
var modified = ValidateNode(node, tagsManager);
|
||||
|
||||
foreach (Node child in node.GetChildren())
|
||||
{
|
||||
modified |= ProcessNode(child, tagsManager);
|
||||
}
|
||||
|
||||
return modified;
|
||||
}
|
||||
|
||||
private static bool ValidateNode(Node node, TagsManager tagsManager)
|
||||
{
|
||||
var modified = false;
|
||||
foreach (Dictionary propertyInfo in node.GetPropertyList())
|
||||
{
|
||||
if (!propertyInfo.TryGetValue("class_name", out Variant className))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (className.AsString() != "TagContainer")
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!propertyInfo.TryGetValue("name", out Variant nameObj))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var propertyName = nameObj.AsString();
|
||||
Variant value = node.Get(propertyName);
|
||||
|
||||
if (value.VariantType != Variant.Type.Object)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (value.As<Resource>() is ForgeTagContainer tagContainer)
|
||||
{
|
||||
modified |= ValidateTagContainerProperty(tagContainer, node.Name, tagsManager);
|
||||
}
|
||||
}
|
||||
|
||||
return modified;
|
||||
}
|
||||
|
||||
private static bool ValidateTagContainerProperty(
|
||||
ForgeTagContainer container,
|
||||
string nodeName,
|
||||
TagsManager tagsManager)
|
||||
{
|
||||
if (container.ContainerTags is null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Array<string> originalTags = container.ContainerTags;
|
||||
var newTags = new Array<string>();
|
||||
var modified = false;
|
||||
|
||||
foreach (var tag in originalTags)
|
||||
{
|
||||
try
|
||||
{
|
||||
Tag.RequestTag(tagsManager, tag);
|
||||
newTags.Add(tag);
|
||||
}
|
||||
catch (TagNotRegisteredException)
|
||||
{
|
||||
GD.PrintRich(
|
||||
$"[color=LIGHT_STEEL_BLUE][RepairTool] Removing invalid tag [{tag}] from node {nodeName}.");
|
||||
modified = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (modified)
|
||||
{
|
||||
container.ContainerTags = newTags;
|
||||
}
|
||||
|
||||
return modified;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
1
addons/forge/editor/AssetRepairTool.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://1runivyr5don
|
||||
62
addons/forge/editor/EditorUtils.cs
Normal file
@@ -0,0 +1,62 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
#if TOOLS
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Gamesmiths.Forge.Attributes;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Editor;
|
||||
|
||||
internal static class EditorUtils
|
||||
{
|
||||
/// <summary>
|
||||
/// Uses reflection to gather all classes inheriting from AttributeSet and their fields of type Attribute.
|
||||
/// </summary>
|
||||
/// <returns>An array with the available attributes.</returns>
|
||||
public static string[] GetAttributeSetOptions()
|
||||
{
|
||||
var options = new List<string>();
|
||||
|
||||
// Get all types in the current assembly
|
||||
Type[] allTypes = Assembly.GetExecutingAssembly().GetTypes();
|
||||
|
||||
// Find all types that subclass AttributeSet
|
||||
foreach (Type attributeSetType in allTypes.Where(x => x.IsSubclassOf(typeof(AttributeSet))))
|
||||
{
|
||||
options.Add(attributeSetType.Name);
|
||||
}
|
||||
|
||||
return [.. options];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Uses reflection to gather all classes inheriting from AttributeSet and their fields of type Attribute.
|
||||
/// </summary>
|
||||
/// <param name="attributeSet">The attribute set used to search for the attributes.</param>
|
||||
/// <returns>An array with the available attributes.</returns>
|
||||
public static string[] GetAttributeOptions(string? attributeSet)
|
||||
{
|
||||
if (string.IsNullOrEmpty(attributeSet))
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
var asm = Assembly.GetExecutingAssembly();
|
||||
Type? type = Array.Find(
|
||||
asm.GetTypes(),
|
||||
x => x.IsSubclassOf(typeof(AttributeSet)) && x.Name == attributeSet);
|
||||
|
||||
if (type is null)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
IEnumerable<PropertyInfo> properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
|
||||
.Where(x => x.PropertyType == typeof(EntityAttribute));
|
||||
|
||||
return [.. properties.Select(x => $"{x.Name}")];
|
||||
}
|
||||
}
|
||||
#endif
|
||||
1
addons/forge/editor/EditorUtils.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dcvmf0r1f43m6
|
||||
14
addons/forge/editor/ForgeEditor.tscn
Normal file
@@ -0,0 +1,14 @@
|
||||
[gd_scene format=3 uid="uid://pjscvogl6jak"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c17f812by5x23" path="res://addons/forge/editor/tags/TagsEditor.tscn" id="1_bxwfw"]
|
||||
|
||||
[node name="Forge" type="PanelContainer" unique_id=249446352]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Tags" parent="." unique_id=654228508 instance=ExtResource("1_bxwfw")]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
34
addons/forge/editor/attributes/AttributeEditorPlugin.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
#if TOOLS
|
||||
using Godot;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Editor.Attributes;
|
||||
|
||||
[Tool]
|
||||
public partial class AttributeEditorPlugin : EditorInspectorPlugin
|
||||
{
|
||||
public override bool _CanHandle(GodotObject @object)
|
||||
{
|
||||
return @object is Resources.ForgeModifier || @object is Resources.ForgeCue;
|
||||
}
|
||||
|
||||
public override bool _ParseProperty(
|
||||
GodotObject @object,
|
||||
Variant.Type type,
|
||||
string name,
|
||||
PropertyHint hintType,
|
||||
string hintString,
|
||||
PropertyUsageFlags usageFlags,
|
||||
bool wide)
|
||||
{
|
||||
if (name == "Attribute" || name == "CapturedAttribute" || name == "MagnitudeAttribute")
|
||||
{
|
||||
AddPropertyEditor(name, new AttributeEditorProperty());
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1 @@
|
||||
uid://bl2w0vp6b5p8k
|
||||
101
addons/forge/editor/attributes/AttributeEditorProperty.cs
Normal file
@@ -0,0 +1,101 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
#if TOOLS
|
||||
using Godot;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Editor.Attributes;
|
||||
|
||||
[Tool]
|
||||
public partial class AttributeEditorProperty : EditorProperty
|
||||
{
|
||||
private const int ButtonSize = 26;
|
||||
private const int PopupSize = 300;
|
||||
|
||||
private Label _label = null!;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
Texture2D dropdownIcon = EditorInterface.Singleton
|
||||
.GetEditorTheme()
|
||||
.GetIcon("GuiDropdown", "EditorIcons");
|
||||
|
||||
var hbox = new HBoxContainer();
|
||||
_label = new Label { Text = "None", SizeFlagsHorizontal = SizeFlags.ExpandFill };
|
||||
var button = new Button { Icon = dropdownIcon, CustomMinimumSize = new Vector2(ButtonSize, 0) };
|
||||
|
||||
hbox.AddChild(_label);
|
||||
hbox.AddChild(button);
|
||||
AddChild(hbox);
|
||||
|
||||
var popup = new Popup { Size = new Vector2I(PopupSize, PopupSize) };
|
||||
var tree = new Tree
|
||||
{
|
||||
HideRoot = true,
|
||||
AnchorRight = 1,
|
||||
AnchorBottom = 1,
|
||||
};
|
||||
popup.AddChild(tree);
|
||||
|
||||
var bg = new StyleBoxFlat
|
||||
{
|
||||
BgColor = EditorInterface.Singleton
|
||||
.GetEditorTheme()
|
||||
.GetColor("dark_color_2", "Editor"),
|
||||
};
|
||||
tree.AddThemeStyleboxOverride("panel", bg);
|
||||
|
||||
AddChild(popup);
|
||||
|
||||
BuildAttributeTree(tree);
|
||||
|
||||
button.Pressed += () =>
|
||||
{
|
||||
Window win = GetWindow();
|
||||
popup.Position = (Vector2I)button.GlobalPosition
|
||||
+ win.Position
|
||||
- new Vector2I(PopupSize - ButtonSize, -30);
|
||||
popup.Popup();
|
||||
};
|
||||
|
||||
tree.ItemActivated += () =>
|
||||
{
|
||||
TreeItem item = tree.GetSelected();
|
||||
if (item?.HasMeta("attribute_path") != true)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var fullPath = item.GetMeta("attribute_path").AsString();
|
||||
_label.Text = fullPath;
|
||||
EmitChanged(GetEditedProperty(), fullPath);
|
||||
popup.Hide();
|
||||
};
|
||||
}
|
||||
|
||||
public override void _UpdateProperty()
|
||||
{
|
||||
var value = GetEditedObject().Get(GetEditedProperty()).AsString();
|
||||
_label.Text = string.IsNullOrEmpty(value) ? "None" : value;
|
||||
}
|
||||
|
||||
private static void BuildAttributeTree(Tree tree)
|
||||
{
|
||||
TreeItem root = tree.CreateItem();
|
||||
|
||||
foreach (var attributeSet in EditorUtils.GetAttributeSetOptions())
|
||||
{
|
||||
TreeItem setItem = tree.CreateItem(root);
|
||||
setItem.SetText(0, attributeSet);
|
||||
setItem.Collapsed = true;
|
||||
|
||||
foreach (var attribute in EditorUtils.GetAttributeOptions(attributeSet))
|
||||
{
|
||||
TreeItem attributeItem = tree.CreateItem(setItem);
|
||||
var attributePath = $"{attributeSet}.{attribute}";
|
||||
attributeItem.SetText(0, attribute);
|
||||
attributeItem.SetMeta("attribute_path", attributePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1 @@
|
||||
uid://dvjqj637kfav
|
||||
@@ -0,0 +1,74 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
#if TOOLS
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Gamesmiths.Forge.Attributes;
|
||||
using Gamesmiths.Forge.Godot.Nodes;
|
||||
using Godot;
|
||||
using Godot.Collections;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Editor.Attributes;
|
||||
|
||||
[Tool]
|
||||
public partial class AttributeSetClassEditorProperty : EditorProperty
|
||||
{
|
||||
private OptionButton _optionButton = null!;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
_optionButton = new OptionButton();
|
||||
AddChild(_optionButton);
|
||||
|
||||
_optionButton.AddItem("Select AttributeSet Class");
|
||||
foreach (var option in EditorUtils.GetAttributeSetOptions())
|
||||
{
|
||||
_optionButton.AddItem(option);
|
||||
}
|
||||
|
||||
_optionButton.ItemSelected += x =>
|
||||
{
|
||||
var className = _optionButton.GetItemText((int)x);
|
||||
EmitChanged(GetEditedProperty(), className);
|
||||
|
||||
GodotObject obj = GetEditedObject();
|
||||
if (obj is not null)
|
||||
{
|
||||
var dict = new Dictionary<string, AttributeValues>();
|
||||
|
||||
var assembly = Assembly.GetAssembly(typeof(ForgeAttributeSet));
|
||||
Type? targetType = System.Array.Find(assembly?.GetTypes() ?? [], x => x.Name == className);
|
||||
if (targetType is not null)
|
||||
{
|
||||
System.Collections.Generic.IEnumerable<PropertyInfo> attrProps = targetType
|
||||
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
|
||||
.Where(x => x.PropertyType == typeof(EntityAttribute));
|
||||
|
||||
foreach (PropertyInfo? pi in attrProps)
|
||||
{
|
||||
dict[pi.Name] = new AttributeValues(0, 0, int.MaxValue);
|
||||
}
|
||||
}
|
||||
|
||||
EmitChanged("InitialAttributeValues", dict);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public override void _UpdateProperty()
|
||||
{
|
||||
GodotObject obj = GetEditedObject();
|
||||
StringName property = GetEditedProperty();
|
||||
var val = obj.Get(property).AsString();
|
||||
for (var i = 0; i < _optionButton.GetItemCount(); i++)
|
||||
{
|
||||
if (_optionButton.GetItemText(i) == val)
|
||||
{
|
||||
_optionButton.Selected = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1 @@
|
||||
uid://bumuxlivyt66b
|
||||
@@ -0,0 +1,43 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
#if TOOLS
|
||||
using Gamesmiths.Forge.Godot.Nodes;
|
||||
using Godot;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Editor.Attributes;
|
||||
|
||||
[Tool]
|
||||
public partial class AttributeSetInspectorPlugin : EditorInspectorPlugin
|
||||
{
|
||||
private PackedScene? _inspectorScene;
|
||||
|
||||
public override bool _CanHandle(GodotObject @object)
|
||||
{
|
||||
return @object is ForgeAttributeSet;
|
||||
}
|
||||
|
||||
public override bool _ParseProperty(
|
||||
GodotObject @object,
|
||||
Variant.Type type,
|
||||
string name,
|
||||
PropertyHint hintType,
|
||||
string hintString,
|
||||
PropertyUsageFlags usageFlags,
|
||||
bool wide)
|
||||
{
|
||||
if (name == "AttributeSetClass")
|
||||
{
|
||||
AddPropertyEditor(name, new AttributeSetClassEditorProperty());
|
||||
return true;
|
||||
}
|
||||
|
||||
if (name == "InitialAttributeValues")
|
||||
{
|
||||
AddPropertyEditor(name, new AttributeSetValuesEditorProperty());
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1 @@
|
||||
uid://t3gpjlcyqor
|
||||
@@ -0,0 +1,171 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
#if TOOLS
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Gamesmiths.Forge.Attributes;
|
||||
using Gamesmiths.Forge.Godot.Nodes;
|
||||
using Godot;
|
||||
using Godot.Collections;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Editor.Attributes;
|
||||
|
||||
[Tool]
|
||||
public partial class AttributeSetValuesEditorProperty : EditorProperty
|
||||
{
|
||||
public override void _Ready()
|
||||
{
|
||||
var attributesRoot = new VBoxContainer { Name = "AttributesRoot" };
|
||||
AddChild(attributesRoot);
|
||||
SetBottomEditor(attributesRoot);
|
||||
}
|
||||
|
||||
public override void _UpdateProperty()
|
||||
{
|
||||
VBoxContainer attributesRoot = GetNodeOrNull<VBoxContainer>("AttributesRoot");
|
||||
|
||||
if (attributesRoot is null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
FreeAllChildren(attributesRoot);
|
||||
|
||||
if (GetEditedObject() is not ForgeAttributeSet obj
|
||||
|| string.IsNullOrEmpty(obj.AttributeSetClass)
|
||||
|| obj.InitialAttributeValues is null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var className = obj.AttributeSetClass;
|
||||
var assembly = Assembly.GetAssembly(typeof(ForgeAttributeSet));
|
||||
Type? targetType = System.Array.Find(assembly?.GetTypes() ?? [], x => x.Name == className);
|
||||
|
||||
if (targetType is null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
System.Collections.Generic.IEnumerable<PropertyInfo> attributeProperties = targetType
|
||||
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
|
||||
.Where(x => x.PropertyType == typeof(EntityAttribute));
|
||||
|
||||
foreach (var attributeName in attributeProperties.Select(x => x.Name))
|
||||
{
|
||||
var groupVBox = new VBoxContainer();
|
||||
|
||||
groupVBox.AddChild(AttributeHeader(attributeName));
|
||||
|
||||
AttributeValues value = obj.InitialAttributeValues.TryGetValue(attributeName, out AttributeValues? v)
|
||||
? v
|
||||
: new AttributeValues(0, 0, int.MaxValue);
|
||||
|
||||
SpinBox spinDefault = CreateSpinBox(value.Min, value.Max, value.Default);
|
||||
SpinBox spinMin = CreateSpinBox(int.MinValue, value.Max, value.Min);
|
||||
SpinBox spinMax = CreateSpinBox(value.Min, int.MaxValue, value.Max);
|
||||
|
||||
groupVBox.AddChild(AttributeFieldRow("Default", spinDefault));
|
||||
groupVBox.AddChild(AttributeFieldRow("Min", spinMin));
|
||||
groupVBox.AddChild(AttributeFieldRow("Max", spinMax));
|
||||
|
||||
spinDefault.ValueChanged += x =>
|
||||
{
|
||||
UpdateAndEmit(obj, attributeName, (int)x, (int)spinMin.Value, (int)spinMax.Value);
|
||||
};
|
||||
|
||||
spinMin.ValueChanged += x =>
|
||||
{
|
||||
spinDefault.MinValue = x;
|
||||
spinMax.MinValue = x;
|
||||
UpdateAndEmit(obj, attributeName, (int)spinDefault.Value, (int)x, (int)spinMax.Value);
|
||||
};
|
||||
|
||||
spinMax.ValueChanged += x =>
|
||||
{
|
||||
spinDefault.MaxValue = x;
|
||||
spinMin.MaxValue = x;
|
||||
UpdateAndEmit(obj, attributeName, (int)spinDefault.Value, (int)spinMin.Value, (int)x);
|
||||
};
|
||||
|
||||
attributesRoot.AddChild(groupVBox);
|
||||
}
|
||||
}
|
||||
|
||||
private static PanelContainer AttributeHeader(string text)
|
||||
{
|
||||
var headerPanel = new PanelContainer
|
||||
{
|
||||
CustomMinimumSize = new Vector2(0, 28),
|
||||
};
|
||||
|
||||
var style = new StyleBoxFlat
|
||||
{
|
||||
BgColor = new Color(0.16f, 0.17f, 0.20f),
|
||||
};
|
||||
|
||||
headerPanel.AddThemeStyleboxOverride("panel", style);
|
||||
|
||||
var label = new Label
|
||||
{
|
||||
Text = text,
|
||||
HorizontalAlignment = HorizontalAlignment.Center,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
SizeFlagsHorizontal = (SizeFlags)(int)SizeFlags.ExpandFill,
|
||||
CustomMinimumSize = new Vector2(0, 22),
|
||||
AutowrapMode = TextServer.AutowrapMode.Off,
|
||||
};
|
||||
|
||||
headerPanel.AddChild(label);
|
||||
return headerPanel;
|
||||
}
|
||||
|
||||
private static HBoxContainer AttributeFieldRow(string label, SpinBox spinBox)
|
||||
{
|
||||
var hbox = new HBoxContainer();
|
||||
|
||||
hbox.AddChild(new Label
|
||||
{
|
||||
Text = label,
|
||||
CustomMinimumSize = new Vector2(80, 0),
|
||||
SizeFlagsHorizontal = SizeFlags.ExpandFill,
|
||||
});
|
||||
|
||||
hbox.AddChild(spinBox);
|
||||
return hbox;
|
||||
}
|
||||
|
||||
private static SpinBox CreateSpinBox(int min, int max, int value)
|
||||
{
|
||||
return new SpinBox
|
||||
{
|
||||
MinValue = min,
|
||||
MaxValue = max,
|
||||
Value = value,
|
||||
SizeFlagsHorizontal = SizeFlags.ExpandFill,
|
||||
};
|
||||
}
|
||||
|
||||
private static void FreeAllChildren(Node node)
|
||||
{
|
||||
for (var i = node.GetChildCount() - 1; i >= 0; i--)
|
||||
{
|
||||
node.GetChild(i).QueueFree();
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateAndEmit(ForgeAttributeSet obj, string name, int def, int min, int max)
|
||||
{
|
||||
Debug.Assert(obj.InitialAttributeValues is not null, "InitialAttributeValues should not be null here.");
|
||||
|
||||
var dict = new Dictionary<string, AttributeValues>(obj.InitialAttributeValues)
|
||||
{
|
||||
[name] = new AttributeValues(def, min, max),
|
||||
};
|
||||
|
||||
EmitChanged(nameof(ForgeAttributeSet.InitialAttributeValues), dict);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1 @@
|
||||
uid://cdj20gbpxkda1
|
||||
29
addons/forge/editor/attributes/AttributeValues.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
using Godot;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Editor.Attributes;
|
||||
|
||||
[Tool]
|
||||
public partial class AttributeValues : Resource
|
||||
{
|
||||
[Export]
|
||||
public int Default { get; set; }
|
||||
|
||||
[Export]
|
||||
public int Min { get; set; }
|
||||
|
||||
[Export]
|
||||
public int Max { get; set; }
|
||||
|
||||
public AttributeValues()
|
||||
{
|
||||
}
|
||||
|
||||
public AttributeValues(int @default, int min, int max)
|
||||
{
|
||||
Default = @default;
|
||||
Min = min;
|
||||
Max = max;
|
||||
}
|
||||
}
|
||||
1
addons/forge/editor/attributes/AttributeValues.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://ccovd5i0wr3kk
|
||||
53
addons/forge/editor/cues/CueHandlerInspectorPlugin.cs
Normal file
@@ -0,0 +1,53 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
#if TOOLS
|
||||
using System;
|
||||
using Gamesmiths.Forge.Godot.Nodes;
|
||||
using Godot;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Editor.Cues;
|
||||
|
||||
[Tool]
|
||||
public partial class CueHandlerInspectorPlugin : EditorInspectorPlugin
|
||||
{
|
||||
public override bool _CanHandle(GodotObject @object)
|
||||
{
|
||||
// Find out if its an implementation of CueHandler without having to add [Tool] attribute to them.
|
||||
if (@object?.GetScript().As<CSharpScript>() is CSharpScript script)
|
||||
{
|
||||
StringName className = script.GetGlobalName();
|
||||
|
||||
Type baseType = typeof(ForgeCueHandler);
|
||||
System.Reflection.Assembly assembly = baseType.Assembly;
|
||||
|
||||
Type? implementationType =
|
||||
Array.Find(assembly.GetTypes(), x =>
|
||||
x.Name == className &&
|
||||
baseType.IsAssignableFrom(x));
|
||||
|
||||
return implementationType is not null;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool _ParseProperty(
|
||||
GodotObject @object,
|
||||
Variant.Type type,
|
||||
string name,
|
||||
PropertyHint hintType,
|
||||
string hintString,
|
||||
PropertyUsageFlags usageFlags,
|
||||
bool wide)
|
||||
{
|
||||
if (name == "CueTag")
|
||||
{
|
||||
var cueKeyEditorProperty = new CueKeyEditorProperty();
|
||||
AddPropertyEditor(name, cueKeyEditorProperty);
|
||||
return true;
|
||||
}
|
||||
|
||||
return base._ParseProperty(@object, type, name, hintType, hintString, usageFlags, wide);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1 @@
|
||||
uid://dattkelp87mhv
|
||||
106
addons/forge/editor/cues/CueKeyEditorProperty.cs
Normal file
@@ -0,0 +1,106 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
#if TOOLS
|
||||
using System.Collections.Generic;
|
||||
using Gamesmiths.Forge.Godot.Core;
|
||||
using Gamesmiths.Forge.Tags;
|
||||
using Godot;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Editor.Cues;
|
||||
|
||||
[Tool]
|
||||
public partial class CueKeyEditorProperty : EditorProperty
|
||||
{
|
||||
private const int ButtonSize = 26;
|
||||
private const int PopupSize = 300;
|
||||
|
||||
private Label _label = null!;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
Texture2D dropdownIcon = EditorInterface.Singleton
|
||||
.GetEditorTheme()
|
||||
.GetIcon("GuiDropdown", "EditorIcons");
|
||||
|
||||
var hbox = new HBoxContainer();
|
||||
_label = new Label { Text = "None", SizeFlagsHorizontal = SizeFlags.ExpandFill };
|
||||
var button = new Button { Icon = dropdownIcon, CustomMinimumSize = new Vector2(ButtonSize, 0) };
|
||||
|
||||
hbox.AddChild(_label);
|
||||
hbox.AddChild(button);
|
||||
AddChild(hbox);
|
||||
|
||||
var popup = new Popup { Size = new Vector2I(PopupSize, PopupSize) };
|
||||
var tree = new Tree
|
||||
{
|
||||
HideRoot = true,
|
||||
AnchorRight = 1,
|
||||
AnchorBottom = 1,
|
||||
};
|
||||
popup.AddChild(tree);
|
||||
|
||||
var backgroundStyle = new StyleBoxFlat
|
||||
{
|
||||
BgColor = EditorInterface.Singleton.GetEditorTheme().GetColor("base_color", "Editor"),
|
||||
};
|
||||
tree.AddThemeStyleboxOverride("panel", backgroundStyle);
|
||||
|
||||
AddChild(popup);
|
||||
|
||||
ForgeData pluginData = ResourceLoader.Load<ForgeData>("uid://8j4xg16o3qnl");
|
||||
var tagsManager = new TagsManager([.. pluginData.RegisteredTags]);
|
||||
TreeItem root = tree.CreateItem();
|
||||
BuildTreeRecursively(tree, root, tagsManager.RootNode);
|
||||
|
||||
button.Pressed += () =>
|
||||
{
|
||||
Window win = GetWindow();
|
||||
popup.Position = (Vector2I)button.GlobalPosition
|
||||
+ win.Position
|
||||
- new Vector2I(PopupSize - ButtonSize, -30);
|
||||
popup.Popup();
|
||||
};
|
||||
|
||||
tree.ItemActivated += () =>
|
||||
{
|
||||
TreeItem item = tree.GetSelected();
|
||||
if (item is null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Build full path from root.
|
||||
var segments = new List<string>();
|
||||
TreeItem current = item;
|
||||
while (current.GetParent() is not null)
|
||||
{
|
||||
segments.Insert(0, current.GetText(0));
|
||||
current = current.GetParent();
|
||||
}
|
||||
|
||||
var fullPath = string.Join(".", segments);
|
||||
|
||||
_label.Text = fullPath;
|
||||
EmitChanged(GetEditedProperty(), fullPath);
|
||||
popup.Hide();
|
||||
};
|
||||
}
|
||||
|
||||
public override void _UpdateProperty()
|
||||
{
|
||||
var property = GetEditedObject().Get(GetEditedProperty()).AsString();
|
||||
_label.Text = string.IsNullOrEmpty(property) ? "None" : property;
|
||||
}
|
||||
|
||||
private static void BuildTreeRecursively(Tree tree, TreeItem currentTreeItem, TagNode currentNode)
|
||||
{
|
||||
foreach (TagNode childTagNode in currentNode.ChildTags)
|
||||
{
|
||||
TreeItem childTreeNode = tree.CreateItem(currentTreeItem);
|
||||
childTreeNode.SetText(0, childTagNode.TagKey);
|
||||
childTreeNode.Collapsed = true;
|
||||
BuildTreeRecursively(tree, childTreeNode, childTagNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
1
addons/forge/editor/cues/CueKeyEditorProperty.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://csmr2puffid4k
|
||||
1
addons/forge/editor/cues/CueKeysEditor.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dnsy7p8h1ujjv
|
||||
160
addons/forge/editor/tags/TagContainerEditorProperty.cs
Normal file
@@ -0,0 +1,160 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
#if TOOLS
|
||||
using System.Collections.Generic;
|
||||
using Gamesmiths.Forge.Godot.Core;
|
||||
using Gamesmiths.Forge.Tags;
|
||||
using Godot;
|
||||
|
||||
using GodotStringArray = Godot.Collections.Array<string>;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Editor.Tags;
|
||||
|
||||
[Tool]
|
||||
public partial class TagContainerEditorProperty : EditorProperty
|
||||
{
|
||||
private readonly Dictionary<TreeItem, TagNode> _treeItemToNode = [];
|
||||
|
||||
private VBoxContainer _root = null!;
|
||||
private Button _containerButton = null!;
|
||||
private ScrollContainer _scroll = null!;
|
||||
private Tree _tree = null!;
|
||||
|
||||
private Texture2D _checkedIcon = null!;
|
||||
private Texture2D _uncheckedIcon = null!;
|
||||
|
||||
private GodotStringArray _currentValue = [];
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
_root = new VBoxContainer
|
||||
{
|
||||
SizeFlagsHorizontal = SizeFlags.ExpandFill,
|
||||
};
|
||||
|
||||
_containerButton = new Button
|
||||
{
|
||||
ToggleMode = true,
|
||||
SizeFlagsHorizontal = SizeFlags.ExpandFill,
|
||||
};
|
||||
_containerButton.Toggled += OnToggled;
|
||||
|
||||
_scroll = new ScrollContainer
|
||||
{
|
||||
Visible = false,
|
||||
CustomMinimumSize = new Vector2(0, 220),
|
||||
SizeFlagsHorizontal = SizeFlags.ExpandFill,
|
||||
SizeFlagsVertical = SizeFlags.ExpandFill,
|
||||
};
|
||||
|
||||
_tree = new Tree
|
||||
{
|
||||
HideRoot = true,
|
||||
SizeFlagsHorizontal = SizeFlags.ExpandFill,
|
||||
SizeFlagsVertical = SizeFlags.ExpandFill,
|
||||
};
|
||||
|
||||
_scroll.AddChild(_tree);
|
||||
|
||||
_root.AddChild(_containerButton);
|
||||
_root.AddChild(_scroll);
|
||||
|
||||
AddChild(_root);
|
||||
SetBottomEditor(_root);
|
||||
|
||||
_checkedIcon = EditorInterface.Singleton
|
||||
.GetEditorTheme()
|
||||
.GetIcon("GuiChecked", "EditorIcons");
|
||||
|
||||
_uncheckedIcon = EditorInterface.Singleton
|
||||
.GetEditorTheme()
|
||||
.GetIcon("GuiUnchecked", "EditorIcons");
|
||||
|
||||
_tree.ButtonClicked += OnTreeButtonClicked;
|
||||
}
|
||||
|
||||
public override void _UpdateProperty()
|
||||
{
|
||||
GodotObject obj = GetEditedObject();
|
||||
string propertyName = GetEditedProperty();
|
||||
|
||||
_currentValue =
|
||||
obj.Get(propertyName).AsGodotArray<string>() ?? [];
|
||||
|
||||
RebuildTree();
|
||||
}
|
||||
|
||||
private void RebuildTree()
|
||||
{
|
||||
_tree.Clear();
|
||||
_treeItemToNode.Clear();
|
||||
|
||||
_containerButton.Text =
|
||||
$"Container (size: {_currentValue.Count})";
|
||||
|
||||
TreeItem root = _tree.CreateItem();
|
||||
|
||||
ForgeData forgePluginData =
|
||||
ResourceLoader.Load<ForgeData>("uid://8j4xg16o3qnl");
|
||||
|
||||
var tagsManager =
|
||||
new TagsManager([.. forgePluginData.RegisteredTags]);
|
||||
|
||||
BuildTreeRecursive(root, tagsManager.RootNode);
|
||||
|
||||
UpdateMinimumSize();
|
||||
NotifyPropertyListChanged();
|
||||
}
|
||||
|
||||
private void BuildTreeRecursive(TreeItem parent, TagNode node)
|
||||
{
|
||||
foreach (TagNode child in node.ChildTags)
|
||||
{
|
||||
TreeItem item = _tree.CreateItem(parent);
|
||||
item.SetText(0, child.TagKey);
|
||||
|
||||
var checkedState =
|
||||
_currentValue.Contains(child.CompleteTagKey);
|
||||
|
||||
item.AddButton(
|
||||
0,
|
||||
checkedState ? _checkedIcon : _uncheckedIcon);
|
||||
|
||||
_treeItemToNode[item] = child;
|
||||
BuildTreeRecursive(item, child);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTreeButtonClicked(
|
||||
TreeItem item,
|
||||
long column,
|
||||
long id,
|
||||
long mouseButtonIndex)
|
||||
{
|
||||
if (mouseButtonIndex != 1 || id != 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string tag = _treeItemToNode[item].CompleteTagKey;
|
||||
|
||||
var newValue = new GodotStringArray();
|
||||
newValue.AddRange(_currentValue);
|
||||
|
||||
if (!newValue.Remove(tag))
|
||||
{
|
||||
newValue.Add(tag);
|
||||
}
|
||||
|
||||
EmitChanged(GetEditedProperty(), newValue);
|
||||
}
|
||||
|
||||
private void OnToggled(bool toggled)
|
||||
{
|
||||
_scroll.Visible = toggled;
|
||||
|
||||
UpdateMinimumSize();
|
||||
NotifyPropertyListChanged();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1 @@
|
||||
uid://dppi5lmv8q5ti
|
||||
35
addons/forge/editor/tags/TagContainerInspectorPlugin.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
#if TOOLS
|
||||
using Gamesmiths.Forge.Godot.Resources;
|
||||
using Godot;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Editor.Tags;
|
||||
|
||||
public partial class TagContainerInspectorPlugin : EditorInspectorPlugin
|
||||
{
|
||||
public override bool _CanHandle(GodotObject @object)
|
||||
{
|
||||
return @object is ForgeTagContainer;
|
||||
}
|
||||
|
||||
public override bool _ParseProperty(
|
||||
GodotObject @object,
|
||||
Variant.Type type,
|
||||
string name,
|
||||
PropertyHint hintType,
|
||||
string hintString,
|
||||
PropertyUsageFlags usageFlags,
|
||||
bool wide)
|
||||
{
|
||||
if (name != "ContainerTags")
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var prop = new TagContainerEditorProperty();
|
||||
AddPropertyEditor(name, prop);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1 @@
|
||||
uid://8g56j8vs35mn
|
||||
149
addons/forge/editor/tags/TagEditorProperty.cs
Normal file
@@ -0,0 +1,149 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
#if TOOLS
|
||||
using System.Collections.Generic;
|
||||
using Gamesmiths.Forge.Godot.Core;
|
||||
using Gamesmiths.Forge.Tags;
|
||||
using Godot;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Editor.Tags;
|
||||
|
||||
[Tool]
|
||||
public partial class TagEditorProperty : EditorProperty
|
||||
{
|
||||
private readonly Dictionary<TreeItem, TagNode> _treeItemToNode = [];
|
||||
|
||||
private VBoxContainer _root = null!;
|
||||
private Button _containerButton = null!;
|
||||
private ScrollContainer _scroll = null!;
|
||||
private Tree _tree = null!;
|
||||
|
||||
private Texture2D _checkedIcon = null!;
|
||||
private Texture2D _uncheckedIcon = null!;
|
||||
|
||||
private string _currentValue = string.Empty;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
_root = new VBoxContainer
|
||||
{
|
||||
SizeFlagsHorizontal = SizeFlags.ExpandFill,
|
||||
};
|
||||
|
||||
_containerButton = new Button
|
||||
{
|
||||
ToggleMode = true,
|
||||
SizeFlagsHorizontal = SizeFlags.ExpandFill,
|
||||
};
|
||||
_containerButton.Toggled += OnToggled;
|
||||
|
||||
_scroll = new ScrollContainer
|
||||
{
|
||||
Visible = false,
|
||||
CustomMinimumSize = new Vector2(0, 220),
|
||||
SizeFlagsHorizontal = SizeFlags.ExpandFill,
|
||||
SizeFlagsVertical = SizeFlags.ExpandFill,
|
||||
};
|
||||
|
||||
_tree = new Tree
|
||||
{
|
||||
HideRoot = true,
|
||||
SizeFlagsHorizontal = SizeFlags.ExpandFill,
|
||||
SizeFlagsVertical = SizeFlags.ExpandFill,
|
||||
};
|
||||
|
||||
_scroll.AddChild(_tree);
|
||||
|
||||
_root.AddChild(_containerButton);
|
||||
_root.AddChild(_scroll);
|
||||
|
||||
AddChild(_root);
|
||||
SetBottomEditor(_root);
|
||||
|
||||
_checkedIcon = EditorInterface.Singleton
|
||||
.GetEditorTheme()
|
||||
.GetIcon("GuiRadioChecked", "EditorIcons");
|
||||
|
||||
_uncheckedIcon = EditorInterface.Singleton
|
||||
.GetEditorTheme()
|
||||
.GetIcon("GuiRadioUnchecked", "EditorIcons");
|
||||
|
||||
_tree.ButtonClicked += OnTreeButtonClicked;
|
||||
}
|
||||
|
||||
public override void _UpdateProperty()
|
||||
{
|
||||
GodotObject obj = GetEditedObject();
|
||||
string propertyName = GetEditedProperty();
|
||||
|
||||
_currentValue = obj.Get(propertyName).AsString();
|
||||
RebuildTree();
|
||||
}
|
||||
|
||||
private void RebuildTree()
|
||||
{
|
||||
_tree.Clear();
|
||||
_treeItemToNode.Clear();
|
||||
|
||||
_containerButton.Text =
|
||||
string.IsNullOrEmpty(_currentValue) ? "(none)" : _currentValue;
|
||||
|
||||
TreeItem root = _tree.CreateItem();
|
||||
|
||||
ForgeData forgePluginData =
|
||||
ResourceLoader.Load<ForgeData>("uid://8j4xg16o3qnl");
|
||||
|
||||
var tagsManager =
|
||||
new TagsManager([.. forgePluginData.RegisteredTags]);
|
||||
|
||||
BuildTreeRecursive(root, tagsManager.RootNode);
|
||||
|
||||
UpdateMinimumSize();
|
||||
NotifyPropertyListChanged();
|
||||
}
|
||||
|
||||
private void BuildTreeRecursive(TreeItem parent, TagNode node)
|
||||
{
|
||||
foreach (TagNode child in node.ChildTags)
|
||||
{
|
||||
TreeItem item = _tree.CreateItem(parent);
|
||||
item.SetText(0, child.TagKey);
|
||||
|
||||
var selected = _currentValue == child.CompleteTagKey;
|
||||
item.AddButton(0, selected ? _checkedIcon : _uncheckedIcon);
|
||||
|
||||
_treeItemToNode[item] = child;
|
||||
BuildTreeRecursive(item, child);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTreeButtonClicked(
|
||||
TreeItem item,
|
||||
long column,
|
||||
long id,
|
||||
long mouseButtonIndex)
|
||||
{
|
||||
if (mouseButtonIndex != 1 || id != 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string newValue = _treeItemToNode[item].CompleteTagKey;
|
||||
|
||||
if (newValue == _currentValue)
|
||||
{
|
||||
newValue = string.Empty;
|
||||
}
|
||||
|
||||
EmitChanged(GetEditedProperty(), newValue);
|
||||
}
|
||||
|
||||
private void OnToggled(bool toggled)
|
||||
{
|
||||
_scroll.Visible = toggled;
|
||||
|
||||
UpdateMinimumSize();
|
||||
NotifyPropertyListChanged();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
1
addons/forge/editor/tags/TagEditorProperty.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bc4vhfbuyp7xd
|
||||
35
addons/forge/editor/tags/TagInspectorPlugin.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
#if TOOLS
|
||||
using Gamesmiths.Forge.Godot.Resources;
|
||||
using Godot;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Editor.Tags;
|
||||
|
||||
public partial class TagInspectorPlugin : EditorInspectorPlugin
|
||||
{
|
||||
public override bool _CanHandle(GodotObject @object)
|
||||
{
|
||||
return @object is ForgeTag;
|
||||
}
|
||||
|
||||
public override bool _ParseProperty(
|
||||
GodotObject @object,
|
||||
Variant.Type type,
|
||||
string name,
|
||||
PropertyHint hintType,
|
||||
string hintString,
|
||||
PropertyUsageFlags usageFlags,
|
||||
bool wide)
|
||||
{
|
||||
if (name != "Tag")
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var prop = new TagEditorProperty();
|
||||
AddPropertyEditor(name, prop);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
1
addons/forge/editor/tags/TagInspectorPlugin.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cx3reriadfsnh
|
||||
192
addons/forge/editor/tags/TagsEditor.cs
Normal file
@@ -0,0 +1,192 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
#if TOOLS
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using Gamesmiths.Forge.Godot.Core;
|
||||
using Gamesmiths.Forge.Tags;
|
||||
using Godot;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Editor.Tags;
|
||||
|
||||
[Tool]
|
||||
public partial class TagsEditor : VBoxContainer, ISerializationListener
|
||||
{
|
||||
private readonly Dictionary<TreeItem, TagNode> _treeItemToNode = [];
|
||||
|
||||
private TagsManager _tagsManager = null!;
|
||||
|
||||
private ForgeData? _forgePluginData;
|
||||
|
||||
private Tree? _tree;
|
||||
private LineEdit? _tagNameTextField;
|
||||
private Button? _addTagButton;
|
||||
|
||||
private Texture2D? _addIcon;
|
||||
private Texture2D? _removeIcon;
|
||||
|
||||
public bool IsPluginInstance { get; set; }
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
base._Ready();
|
||||
|
||||
if (!IsPluginInstance)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_forgePluginData = ResourceLoader.Load<ForgeData>("uid://8j4xg16o3qnl");
|
||||
_tagsManager = new TagsManager([.. _forgePluginData.RegisteredTags]);
|
||||
|
||||
_addIcon = EditorInterface.Singleton.GetEditorTheme().GetIcon("Add", "EditorIcons");
|
||||
_removeIcon = EditorInterface.Singleton.GetEditorTheme().GetIcon("Remove", "EditorIcons");
|
||||
|
||||
_tree = GetNode<Tree>("%Tree");
|
||||
_tagNameTextField = GetNode<LineEdit>("%TagNameField");
|
||||
_addTagButton = GetNode<Button>("%AddTagButton");
|
||||
|
||||
ConstructTagTree();
|
||||
|
||||
_tree.ButtonClicked += TreeButtonClicked;
|
||||
_addTagButton.Pressed += AddTagButton_Pressed;
|
||||
}
|
||||
|
||||
public void OnBeforeSerialize()
|
||||
{
|
||||
// This method was intentionally left empty.
|
||||
}
|
||||
|
||||
public void OnAfterDeserialize()
|
||||
{
|
||||
EnsureInitialized();
|
||||
|
||||
_tagsManager = new TagsManager([.. _forgePluginData.RegisteredTags]);
|
||||
ReconstructTreeNode();
|
||||
}
|
||||
|
||||
private void AddTagButton_Pressed()
|
||||
{
|
||||
EnsureInitialized();
|
||||
Debug.Assert(
|
||||
_forgePluginData.RegisteredTags is not null,
|
||||
$"{_forgePluginData.RegisteredTags} should have been initialized by the Forge plugin.");
|
||||
|
||||
if (!Tag.IsValidKey(_tagNameTextField.Text, out var _, out var fixedTag))
|
||||
{
|
||||
_tagNameTextField.Text = fixedTag;
|
||||
}
|
||||
|
||||
if (_forgePluginData.RegisteredTags.Contains(_tagNameTextField.Text))
|
||||
{
|
||||
GD.PushWarning($"Tag [{_tagNameTextField.Text}] is already present in the manager.");
|
||||
return;
|
||||
}
|
||||
|
||||
_forgePluginData.RegisteredTags.Add(_tagNameTextField.Text);
|
||||
ResourceSaver.Save(_forgePluginData);
|
||||
|
||||
ReconstructTreeNode();
|
||||
}
|
||||
|
||||
private void ReconstructTreeNode()
|
||||
{
|
||||
EnsureInitialized();
|
||||
Debug.Assert(
|
||||
_forgePluginData.RegisteredTags is not null,
|
||||
$"{_forgePluginData.RegisteredTags} should have been initialized by the Forge plugin.");
|
||||
|
||||
_tagsManager.DestroyTagTree();
|
||||
_tagsManager = new TagsManager([.. _forgePluginData.RegisteredTags]);
|
||||
|
||||
_tree.Clear();
|
||||
ConstructTagTree();
|
||||
}
|
||||
|
||||
private void ConstructTagTree()
|
||||
{
|
||||
EnsureInitialized();
|
||||
|
||||
TreeItem rootTreeNode = _tree.CreateItem();
|
||||
_tree.HideRoot = true;
|
||||
|
||||
if (_tagsManager.RootNode.ChildTags.Count == 0)
|
||||
{
|
||||
TreeItem childTreeNode = _tree.CreateItem(rootTreeNode);
|
||||
childTreeNode.SetText(0, "No tag has been registered yet.");
|
||||
childTreeNode.SetCustomColor(0, Color.FromHtml("EED202"));
|
||||
return;
|
||||
}
|
||||
|
||||
BuildTreeRecursively(_tree, rootTreeNode, _tagsManager.RootNode);
|
||||
}
|
||||
|
||||
private void BuildTreeRecursively(Tree tree, TreeItem currentTreeItem, TagNode currentNode)
|
||||
{
|
||||
foreach (TagNode childTagNode in currentNode.ChildTags)
|
||||
{
|
||||
TreeItem childTreeNode = tree.CreateItem(currentTreeItem);
|
||||
childTreeNode.SetText(0, childTagNode.TagKey);
|
||||
childTreeNode.AddButton(0, _addIcon);
|
||||
childTreeNode.AddButton(0, _removeIcon);
|
||||
|
||||
_treeItemToNode.Add(childTreeNode, childTagNode);
|
||||
|
||||
BuildTreeRecursively(tree, childTreeNode, childTagNode);
|
||||
}
|
||||
}
|
||||
|
||||
private void TreeButtonClicked(TreeItem item, long column, long id, long mouseButtonIndex)
|
||||
{
|
||||
EnsureInitialized();
|
||||
Debug.Assert(
|
||||
_forgePluginData.RegisteredTags is not null,
|
||||
$"{_forgePluginData.RegisteredTags} should have been initialized by the Forge plugin.");
|
||||
|
||||
if (mouseButtonIndex == 1)
|
||||
{
|
||||
if (id == 0)
|
||||
{
|
||||
_tagNameTextField.Text = $"{_treeItemToNode[item].CompleteTagKey}.";
|
||||
_tagNameTextField.GrabFocus();
|
||||
_tagNameTextField.CaretColumn = _tagNameTextField.Text.Length;
|
||||
}
|
||||
|
||||
if (id == 1)
|
||||
{
|
||||
TagNode selectedTag = _treeItemToNode[item];
|
||||
|
||||
for (var i = _forgePluginData.RegisteredTags.Count - 1; i >= 0; i--)
|
||||
{
|
||||
var tag = _forgePluginData.RegisteredTags[i];
|
||||
|
||||
if (string.Equals(tag, selectedTag.CompleteTagKey, StringComparison.OrdinalIgnoreCase) ||
|
||||
tag.StartsWith(selectedTag.CompleteTagKey + ".", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
_forgePluginData.RegisteredTags.Remove(tag);
|
||||
}
|
||||
}
|
||||
|
||||
if (selectedTag.ParentTagNode is not null
|
||||
&& !_forgePluginData.RegisteredTags.Contains(selectedTag.ParentTagNode.CompleteTagKey))
|
||||
{
|
||||
_forgePluginData.RegisteredTags.Add(selectedTag.ParentTagNode.CompleteTagKey);
|
||||
}
|
||||
|
||||
ResourceSaver.Save(_forgePluginData);
|
||||
ReconstructTreeNode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[MemberNotNull(nameof(_tree), nameof(_tagNameTextField), nameof(_forgePluginData))]
|
||||
private void EnsureInitialized()
|
||||
{
|
||||
Debug.Assert(_tree is not null, $"{_tree} should have been initialized on _Ready().");
|
||||
Debug.Assert(_tagNameTextField is not null, $"{_tagNameTextField} should have been initialized on _Ready().");
|
||||
Debug.Assert(_forgePluginData is not null, $"{_forgePluginData} should have been initialized on _Ready().");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
1
addons/forge/editor/tags/TagsEditor.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://do8jplrf64p5f
|
||||
33
addons/forge/editor/tags/TagsEditor.tscn
Normal file
@@ -0,0 +1,33 @@
|
||||
[gd_scene format=3 uid="uid://c17f812by5x23"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://do8jplrf64p5f" path="res://addons/forge/editor/tags/TagsEditor.cs" id="1_7jg4t"]
|
||||
|
||||
[node name="GameplayTagsEditor" type="VBoxContainer" unique_id=1724725192]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_7jg4t")
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="." unique_id=613044022]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="HBoxContainer" unique_id=2121441014]
|
||||
layout_mode = 2
|
||||
text = "Tag Name:"
|
||||
|
||||
[node name="TagNameField" type="LineEdit" parent="HBoxContainer" unique_id=337174471]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="AddTagButton" type="Button" parent="HBoxContainer" unique_id=19730410]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
text = "Add Tag"
|
||||
|
||||
[node name="Tree" type="Tree" parent="." unique_id=1467435445]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
37
addons/forge/icons/Component.svg
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="Component.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="38.71875"
|
||||
inkscape:cx="-2.5569007"
|
||||
inkscape:cy="12.229217"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
id="path1"
|
||||
d="M 2 1 A 1 1 0 0 0 1 2 L 1 10 A 1 1 0 0 0 2 11 L 5 11 L 5 11.25 A 2 2 0 1 0 7 11.25 L 7 11 L 10 11 A 1 1 0 0 0 11 10 L 11 7 L 11.25 7 A 2 2 0 1 0 11.25 5 L 11 5 L 11 2 A 1 1 0 0 0 10 1 L 2 1 z M 5.9511719 1.2792969 C 6.1185719 1.2701534 6.2744307 1.3251527 6.4257812 1.4042969 L 9.2949219 3.0644531 C 9.4301815 3.2067284 9.6365783 3.3229416 9.2851562 3.6445312 L 6.3261719 5.3144531 C 6.1107587 5.4239228 5.8805972 5.4823444 5.5859375 5.3144531 L 2.5742188 3.5644531 C 2.4153933 3.4085242 2.3598137 3.2358539 2.625 3.0136719 L 5.6347656 1.3730469 C 5.7454085 1.3114219 5.8507402 1.2847569 5.9511719 1.2792969 z M 6.0332031 2.6894531 C 5.6520888 2.6894531 5.3417969 2.9070874 5.3417969 3.1777344 C 5.3417969 3.448379 5.6520888 3.6679688 6.0332031 3.6679688 C 6.4143173 3.6679687 6.7226562 3.4483811 6.7226562 3.1777344 C 6.7226563 2.9070883 6.4143179 2.6894531 6.0332031 2.6894531 z M 1.8691406 4.0332031 C 1.9335624 4.0353281 2.0095282 4.0494568 2.0957031 4.0742188 C 3.0773271 4.6476906 5.1953125 5.8535156 5.1953125 5.8535156 C 5.5889109 6.104997 5.5354819 6.2930662 5.5761719 6.4941406 L 5.5859375 9.6835938 C 5.4998457 10.167951 5.2323451 10.165924 4.9355469 10.083984 L 1.8652344 8.2734375 C 1.7066216 8.1255786 1.4907006 8.0558101 1.4941406 7.6835938 C 1.4941406 7.6835938 1.4580738 5.5430631 1.4648438 4.4238281 C 1.5003081 4.2094734 1.5899828 4.0239031 1.8691406 4.0332031 z M 10.107422 4.0507812 C 10.347874 4.0487345 10.420931 4.2373663 10.476562 4.4433594 L 10.480469 7.71875 C 10.438667 8.0884717 10.273485 8.1715083 10.115234 8.2695312 L 6.890625 10.068359 C 6.6433259 10.095889 6.3579755 10.272959 6.2753906 9.6542969 L 6.3007812 6.4492188 C 6.2997989 6.2047287 6.4106434 6.0093456 6.6894531 5.8847656 L 9.8066406 4.1230469 C 9.9299153 4.0738499 10.027272 4.0514652 10.107422 4.0507812 z M 2.6523438 5.6191406 C 2.3485583 5.6191352 2.1015586 5.9000697 2.1015625 6.2480469 C 2.1015586 6.5960221 2.3485543 6.8789002 2.6523438 6.8789062 C 2.9561289 6.8789109 3.2031285 6.5960238 3.203125 6.2480469 C 3.2031285 5.9000703 2.9561284 5.6191358 2.6523438 5.6191406 z M 4.25 7.5273438 C 3.9462137 7.5273391 3.6992152 7.8082734 3.6992188 8.15625 C 3.6992152 8.5042267 3.9462152 8.7871148 4.25 8.7871094 C 4.553784 8.7871157 4.8007853 8.5042276 4.8007812 8.15625 C 4.8007853 7.8082743 4.5537895 7.5273384 4.25 7.5273438 z "
|
||||
style="fill:#e0e0e0;fill-opacity:1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.3 KiB |
43
addons/forge/icons/Component.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bcx7anhepqfmd"
|
||||
path="res://.godot/imported/Component.svg-24c843a11e5d49c1760fb4d44ede1d06.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/Component.svg"
|
||||
dest_files=["res://.godot/imported/Component.svg-24c843a11e5d49c1760fb4d44ede1d06.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
34
addons/forge/icons/ability.svg
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="ability.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xml:space="preserve"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs1" /><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="53.961086"
|
||||
inkscape:cx="4.4476496"
|
||||
inkscape:cy="8.330077"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="3432"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" /><path
|
||||
style="fill:#d2d3d5;stroke-width:0.58;stroke-linecap:round;stroke-linejoin:round;paint-order:markers fill stroke;stroke:#d2d3d5;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"
|
||||
d="M 1.5381455,12.990843 3.1133547,14.621648 10.767018,6.5602831 12.490483,8.3949386 14.825499,6.0599225 13.027907,4.1882034 13.342949,3.8546296 11.730676,2.2423567 11.489762,2.5944623 10.322253,1.5196136 7.2830261,1.5381455 6.5788149,2.2052929 9.1732772,4.9294783 Z"
|
||||
id="path6" /></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
43
addons/forge/icons/ability.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://l04b8et2244r"
|
||||
path="res://.godot/imported/ability.svg-cd6e6cbb3e7cb989c28f2c9df8e8c09e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/ability.svg"
|
||||
dest_files=["res://.godot/imported/ability.svg-cd6e6cbb3e7cb989c28f2c9df8e8c09e.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
69
addons/forge/icons/attributes.svg
Normal file
@@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="16"
|
||||
height="15.999999"
|
||||
viewBox="0 0 4.2333332 4.233333"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="attributes.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="76.312505"
|
||||
inkscape:cx="8.3341518"
|
||||
inkscape:cy="7.3710069"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" /><defs
|
||||
id="defs1"><inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 2.1166665 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="4.2333332 : 2.1166665 : 1"
|
||||
inkscape:persp3d-origin="2.1166666 : 1.411111 : 1"
|
||||
id="perspective1" /></defs><path
|
||||
sodipodi:type="star"
|
||||
style="fill:none;stroke:#ffca5f;stroke-width:0.31872669;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:markers fill stroke;stroke-opacity:1"
|
||||
id="path7"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="6"
|
||||
sodipodi:cx="1.9970515"
|
||||
sodipodi:cy="2.0594592"
|
||||
sodipodi:r1="2.1229575"
|
||||
sodipodi:r2="1.838535"
|
||||
sodipodi:arg1="-0.52359878"
|
||||
sodipodi:arg2="0"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 3.8355866,0.99798047 0,2.12295743 -1.8385351,1.0614788 -1.83853512,-1.0614787 -1e-8,-2.12295752 1.83853513,-1.06147874 z"
|
||||
transform="matrix(0.91313864,0,0,0.91313864,0.18769001,0.24756988)" /><path
|
||||
id="path9"
|
||||
style="fill:#ffca5f;fill-opacity:1;stroke:#ffca5f;stroke-width:0.105833;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;paint-order:markers fill stroke"
|
||||
transform="translate(0.79085464,1.0290699)"
|
||||
d="M 1.877053,1.4646749 1.239307,2.2259255 -0.14541727,1.8880592 0.98677415,0.95883034 1.2188689,-0.3328871 l 0.76758,0.97928037 z"
|
||||
sodipodi:nodetypes="ccccccc" /><path
|
||||
style="fill:#ffca5f;fill-opacity:1;stroke:#ffca5f;stroke-width:0.29104166;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:markers fill stroke;stroke-opacity:1"
|
||||
d="M 2.014387,0.19069068 V 4.0565107"
|
||||
id="path10" /><path
|
||||
style="fill:#6d6e72;fill-opacity:1;stroke:#ffca5f;stroke-width:0.29104166;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:markers fill stroke;stroke-opacity:1"
|
||||
d="M 3.6855307,3.0961232 0.34671031,1.1580125"
|
||||
id="path11" /><path
|
||||
style="fill:#ffca5f;fill-opacity:1;stroke:#ffca5f;stroke-width:0.29104166;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:markers fill stroke;stroke-opacity:1"
|
||||
d="M 3.6751294,1.1614796 0.36751294,3.0718535"
|
||||
id="path12" /></svg>
|
||||
|
After Width: | Height: | Size: 3.3 KiB |
43
addons/forge/icons/attributes.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dnqaqpc02lx3p"
|
||||
path="res://.godot/imported/attributes.svg-742b4837434c2bfaff3c7290518935f0.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/attributes.svg"
|
||||
dest_files=["res://.godot/imported/attributes.svg-742b4837434c2bfaff3c7290518935f0.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
34
addons/forge/icons/calculator.svg
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
sodipodi:docname="calculator.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xml:space="preserve"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs4" /><sodipodi:namedview
|
||||
id="namedview4"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="27.378291"
|
||||
inkscape:cx="-0.23741438"
|
||||
inkscape:cy="9.9531415"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" /><path
|
||||
style="fill:#e0e0e0;fill-opacity:1"
|
||||
d="M 4.1470306,14.992828 C 3.7695856,14.858214 3.5750051,14.678558 3.4044987,14.307247 3.2731068,14.021116 3.2653701,13.660984 3.2653701,7.831065 c 0,-5.829919 0.00774,-6.1900511 0.1391286,-6.4761821 C 3.5750051,0.98357254 3.7695856,0.80391606 4.1470306,0.66930228 4.5228372,0.53527283 11.836886,0.51218703 12.309994,0.643537 c 0.382892,0.10630276 0.760087,0.4834984 0.86639,0.8663898 0.05716,0.2058833 0.08326,2.2051995 0.08355,6.3997697 4.23e-4,6.1003445 4.23e-4,6.1003445 -0.170003,6.4338755 -0.200746,0.392868 -0.449214,0.591665 -0.857991,0.686472 -0.163415,0.0379 -1.984333,0.06823 -4.0464859,0.06739 -2.9674845,-0.0012 -3.8096476,-0.02302 -4.0384255,-0.104608 z M 8.5011403,14.115623 C 8.6569841,14.072337 8.8814508,13.921721 9.0124178,13.772558 9.2965965,13.448896 9.3273203,13.017744 9.0931999,12.638929 8.8133927,12.186192 8.6287283,12.14852 6.6892501,12.14852 c -1.6794974,0 -1.7471415,0.0058 -1.9957904,0.171425 -0.3498332,0.23301 -0.5535951,0.661517 -0.4859706,1.021987 0.058017,0.309256 0.4614738,0.744656 0.7396524,0.798213 0.3593062,0.06918 3.2894406,0.04896 3.5539988,-0.02452 z m 3.4971107,-0.255576 c 0.566827,-0.566827 0.343025,-1.434555 -0.423211,-1.640881 -0.613521,-0.165203 -1.192984,0.27487 -1.192984,0.906011 0,0.636726 0.351443,0.984161 1.001094,0.989675 0.307417,0.0026 0.393237,-0.03294 0.615101,-0.254805 z M 5.5583033,11.002882 C 6.0964205,10.725735 6.2987087,10.265851 6.1052831,9.7593729 5.79256,8.940519 4.6656594,8.8944844 4.2904238,9.6852347 4.1234626,10.037079 4.1787926,10.389777 4.45186,10.714299 c 0.3033021,0.360454 0.7438144,0.475349 1.1064433,0.288583 z m 3.2104978,-0.06321 C 9.311954,10.608489 9.4012767,9.8451196 8.9497133,9.3935562 8.7372642,9.1811071 8.6660535,9.1565994 8.2612009,9.1565994 c -0.4048526,0 -0.4760634,0.024508 -0.6885125,0.2369568 -0.6146044,0.6146048 -0.1758974,1.6939698 0.6885125,1.6939698 0.1458088,0 0.3742288,-0.06654 0.5076002,-0.147857 z m 2.9737349,0.03632 C 12.261652,10.707543 12.447674,10.198582 12.207789,9.7030452 12.018286,9.3115837 11.715145,9.118727 11.289332,9.118727 c -0.269725,0 -0.364673,0.045533 -0.613208,0.2940681 -0.261496,0.2614963 -0.294068,0.3351369 -0.294068,0.6648499 0,0.419341 0.128151,0.649248 0.482245,0.865164 0.284844,0.173689 0.584618,0.185015 0.878235,0.03318 z M 5.7163619,7.8447379 C 6.2570275,7.5316953 6.3351994,6.8000423 5.8770171,6.3410788 5.4427471,5.9060684 4.8341492,5.9326578 4.437568,6.4039678 4.0092999,6.9129355 4.1611285,7.5779353 4.7769394,7.8903937 5.141788,8.0755155 5.3339047,8.0661786 5.7163619,7.8447379 Z M 8.6163238,7.9470687 C 8.7074923,7.9209403 8.8864394,7.780709 9.0139841,7.6354437 9.4279889,7.1639182 9.2620537,6.4091311 8.6840924,6.1348705 c -0.3233975,-0.1534622 -0.5223856,-0.1534622 -0.845783,0 -0.3344109,0.1586884 -0.5617911,0.5335256 -0.5617911,0.926115 0,0.3743135 0.3353781,0.8069649 0.7083356,0.9137818 0.2362074,0.067651 0.3100776,0.064411 0.6314699,-0.027699 z M 11.831607,7.8635597 C 12.154209,7.6967358 12.364788,7.2036216 12.277916,6.8184392 12.097072,6.0166034 11.1029,5.7740967 10.573897,6.4027811 10.225551,6.816766 10.35915,7.614722 10.818541,7.8639846 11.09135,8.0120093 11.544905,8.011819 11.831607,7.8635597 Z m 0.0436,-2.9903129 c 0.35249,-0.1228787 0.400467,-0.3274422 0.400467,-1.7074952 0,-1.2258154 -0.0035,-1.2532172 -0.185919,-1.4355875 C 11.903838,1.544245 11.903838,1.544245 8.2612009,1.544245 c -3.6426371,0 -3.6426371,0 -3.8285561,0.1859191 -0.1823704,0.1823703 -0.1859191,0.2097721 -0.1859191,1.4355875 0,1.3543371 0.050224,1.584995 0.3707322,1.7026217 0.2796437,0.1026292 6.9644521,0.1071181 7.2577511,0.00487 z"
|
||||
id="path1" /></svg>
|
||||
|
After Width: | Height: | Size: 4.6 KiB |
43
addons/forge/icons/calculator.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b3mnlhfvbttw0"
|
||||
path="res://.godot/imported/calculator.svg-df0be254cf026a5b94684b8dc0da5148.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/calculator.svg"
|
||||
dest_files=["res://.godot/imported/calculator.svg-df0be254cf026a5b94684b8dc0da5148.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
39
addons/forge/icons/cue_data.svg
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="cue_data.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="53.961086"
|
||||
inkscape:cx="9.0806178"
|
||||
inkscape:cy="7.4776108"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
fill="#e0e0e0"
|
||||
d="m 5.6478944,1.0744881 h 5.9999996 l -1.9999996,6 h 3.9999996 l -7.9999996,7.9999999 2,-5.9999999 h -4 z"
|
||||
id="path1"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
style="stroke-width:2" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
43
addons/forge/icons/cue_data.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://din7fexs0x53h"
|
||||
path="res://.godot/imported/cue_data.svg-6d5a0b820e64495d08303cc07b8d0a2e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/cue_data.svg"
|
||||
dest_files=["res://.godot/imported/cue_data.svg-6d5a0b820e64495d08303cc07b8d0a2e.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
39
addons/forge/icons/cue_handler.svg
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="cue_handler.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="38.71875"
|
||||
inkscape:cx="2.401937"
|
||||
inkscape:cy="6.3664245"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
fill="#e0e0e0"
|
||||
d="m 2.2953994,0.10169496 c -0.7947728,0 -1.4390637,0.64429087 -1.4390637,1.43906364 V 14.492331 c 0,0.794774 0.6442909,1.439064 1.4390637,1.439064 H 13.807908 c 0.794774,0 1.439064,-0.64429 1.439064,-1.439064 V 1.5407586 c 0,-0.79477277 -0.64429,-1.43906364 -1.439064,-1.43906364 z M 6.6125906,2.9798225 H 10.929782 L 9.4907181,7.2970134 H 12.368846 L 6.6125906,13.053269 8.0516543,8.7360772 H 5.1735271 Z"
|
||||
id="path1"
|
||||
sodipodi:nodetypes="ssssssssscccccccc"
|
||||
style="stroke-width:1.43906;fill:#ffca5f;fill-opacity:1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
43
addons/forge/icons/cue_handler.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://snulmvxydrp4"
|
||||
path="res://.godot/imported/cue_handler.svg-28576752521f681db16ed2a959088ef8.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/cue_handler.svg"
|
||||
dest_files=["res://.godot/imported/cue_handler.svg-28576752521f681db16ed2a959088ef8.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
44
addons/forge/icons/effect.svg
Normal file
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="16"
|
||||
height="15.999999"
|
||||
viewBox="0 0 4.2333332 4.233333"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="effect.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="45.254834"
|
||||
inkscape:cx="1.9887378"
|
||||
inkscape:cy="9.3360192"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" /><defs
|
||||
id="defs1"><inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 2.1166665 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="4.2333332 : 2.1166665 : 1"
|
||||
inkscape:persp3d-origin="2.1166666 : 1.411111 : 1"
|
||||
id="perspective1" /></defs><path
|
||||
id="path12"
|
||||
style="display:inline;fill:#ffca5f;stroke:#d2d3d5;stroke-width:0.00370879;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:markers fill stroke;fill-opacity:1"
|
||||
d="M 2.037535,0.06018232 C 2.1277826,0.43135157 2.1511779,1.286157 1.807312,1.2179896 1.6627523,1.1893322 1.1623632,0.91914409 1.1950463,0.69389747 1.2277292,0.46865071 0.83800893,0.95023713 0.55714215,1.9753147 0.27627529,3.0003922 0.71026348,4.1910236 2.1618721,4.1975096 4.5119453,4.1530485 3.5625124,1.5727466 3.2688439,0.72643753 2.767567,2.1509769 2.8415957,0.41887306 2.037535,0.06018232 Z M 2.119064,1.4269357 c 0.048499,-0.00265 0.093781,0.013289 0.1376308,0.036218 l 0.8315811,0.4809842 c 0.039196,0.04122 0.098917,0.074883 -0.0029,0.1680548 L 2.2277151,2.5960748 c -0.06241,0.031716 -0.1290451,0.048642 -0.2144146,0 L 1.1411587,2.0890134 C 1.0951435,2.0438377 1.0788163,1.994022 1.155646,1.9296511 L 2.0277923,1.4544619 c 0.032055,-0.01785 0.062172,-0.025935 0.091272,-0.027526 z m 0.023904,0.4085468 c -0.1104172,0 -0.1999273,0.063565 -0.1999273,0.1419773 0,0.078413 0.08951,0.1419773 0.1999273,0.1419773 0.1104171,0 0.1999271,-0.063565 0.1999271,-0.1419773 0,-0.078412 -0.08951,-0.1419773 -0.1999271,-0.1419773 z M 0.93688522,2.2251957 c 0.0186643,6.205e-4 0.0402274,0.00442 0.0651939,0.011592 0.2843981,0.1661474 0.8982236,0.5157542 0.8982236,0.5157542 0.1140295,0.07286 0.098313,0.1271849 0.1101046,0.1854398 l 0.0029,0.9243009 C 1.9883621,4.0026102 1.910956,4.0019218 1.8249676,3.9781803 L 0.93543652,3.4537338 C 0.88948298,3.4108963 0.82723551,3.3906214 0.82822935,3.2827815 c 0,0 -0.0106533,-0.6203164 -0.008691,-0.9445835 0.0102748,-0.062103 0.0364707,-0.1156906 0.11734882,-0.113002 z m 2.38681178,0.00507 c 0.069664,-5.924e-4 0.090395,0.054046 0.1064825,0.1137267 l 0.00144,0.9489298 C 3.4195122,3.4000426 3.3717125,3.4238891 3.3258641,3.4522887 L 2.391428,3.9738341 C 2.3197804,3.98181 2.2371584,4.0328281 2.2132319,3.8535878 l 0.00725,-0.9286473 c -2.845e-4,-0.070835 0.032225,-0.1276152 0.113002,-0.1637084 l 0.9025669,-0.509959 c 0.035718,-0.014257 0.064427,-0.020809 0.087648,-0.021007 z m -2.1600827,0.454183 c -0.088014,-1.5e-6 -0.1593634,0.081726 -0.1593623,0.1825422 -1.1e-6,0.1008166 0.071349,0.1825438 0.1593623,0.1825422 0.088013,1.4e-6 0.1593633,-0.081726 0.1593622,-0.1825422 1.1e-6,-0.1008152 -0.071349,-0.1825436 -0.1593622,-0.1825422 z m 0.4628748,0.5526972 c -0.088013,-1.4e-6 -0.1593634,0.081726 -0.1593622,0.1825422 -1.2e-6,0.1008152 0.071349,0.1825436 0.1593622,0.1825422 0.088014,1.5e-6 0.1593634,-0.081726 0.1593623,-0.1825422 1.1e-6,-0.1008166 -0.071349,-0.1825438 -0.1593623,-0.1825422 z"
|
||||
sodipodi:nodetypes="cssssccccccccccccssssssccccccccssccccccccscccccccccccc" /></svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
43
addons/forge/icons/effect.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bpl454nqdpfjx"
|
||||
path="res://.godot/imported/effect.svg-8509f01b90acfb491db905096f21979a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/effect.svg"
|
||||
dest_files=["res://.godot/imported/effect.svg-8509f01b90acfb491db905096f21979a.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
44
addons/forge/icons/effect_area_2d.svg
Normal file
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="effect_area_2d.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="45.254834"
|
||||
inkscape:cx="2.784233"
|
||||
inkscape:cy="7.6124464"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
fill="#fc7f7f"
|
||||
d="M 1,1 V 5 H 3 V 3 H 5 V 1 Z m 10,0 v 2 h 2 v 2 h 2 V 1 Z M 4,4 v 8 z m 2,2 v 4 z m -5,5 v 4 H 5 V 13 H 3 v -2 z m 12,0 v 2 h -2 v 2 h 4 v -4 z"
|
||||
id="path1"
|
||||
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccc"
|
||||
style="fill:#8da5f3;fill-opacity:1" />
|
||||
<path
|
||||
id="path12"
|
||||
style="display:inline;fill:#8da5f3;stroke:#d2d3d5;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:markers fill stroke;fill-opacity:1"
|
||||
d="M 7.7175263,1.4524809 C 7.9758008,2.5147092 8.0427544,4.9610285 7.058664,4.7659441 6.6449569,4.6839312 5.2129216,3.9106951 5.3064556,3.2660745 5.3999889,2.6214536 4.2846704,3.9996785 3.4808742,6.9332899 2.6770765,9.8669014 3.9190832,13.274301 8.0733595,13.292864 14.798902,13.165622 12.081772,5.7812031 11.24134,3.3591991 9.8067637,7.4360076 10.018622,2.4789977 7.7175263,1.4524809 Z m 0.2333231,3.9114342 c 0.1387966,-0.00759 0.2683867,0.038031 0.3938779,0.1036501 l 2.3798547,1.3765014 c 0.112173,0.1179647 0.283085,0.2143034 -0.0083,0.4809466 L 8.2617919,8.7098081 c -0.1786076,0.090766 -0.3693068,0.139206 -0.6136211,0 L 5.1522377,7.2586778 C 5.0205494,7.1293919 4.9738234,6.9868272 5.193698,6.8026079 L 7.6896442,5.4426908 c 0.091736,-0.051084 0.1779266,-0.074222 0.2612052,-0.078776 z m 0.068409,1.169197 c -0.3159967,0 -0.5721606,0.1819129 -0.5721606,0.4063167 0,0.2244058 0.2561637,0.4063168 0.5721606,0.4063168 0.3159965,0 0.57216,-0.1819131 0.57216,-0.4063168 0,-0.2244028 -0.2561635,-0.4063167 -0.57216,-0.4063167 z M 4.5676391,7.6484102 c 0.053413,0.00178 0.115125,0.012644 0.1865747,0.033175 C 5.5681165,8.1570731 7.324789,9.1575926 7.324789,9.1575926 7.6511235,9.366107 7.6061453,9.5215754 7.6398912,9.6882924 l 0.00829,2.6452046 c -0.07138,0.401596 -0.2929043,0.399625 -0.5389895,0.331681 L 4.5634933,11.164294 C 4.4319814,11.0417 4.2538388,10.983676 4.2566829,10.675055 c 0,0 -0.030485,-1.7752483 -0.024874,-2.7032499 0.029402,-0.1777291 0.1043738,-0.3310884 0.3358339,-0.323394 z m 6.8306819,0.014509 c 0.199367,-0.0017 0.258696,0.1546714 0.304737,0.3254682 l 0.004,2.7156886 c -0.03461,0.306562 -0.171405,0.374807 -0.302616,0.456082 L 8.7302633,12.65274 C 8.5252194,12.67556 8.2887681,12.821571 8.2202943,12.308613 L 8.2410423,9.6509704 C 8.2402734,9.4482514 8.3333141,9.2857556 8.5644852,9.1824627 L 11.147491,7.7230396 c 0.102219,-0.040802 0.184379,-0.059552 0.250834,-0.060119 z M 5.2165022,8.9627206 c -0.2518824,-4.5e-6 -0.4560732,0.2338865 -0.4560701,0.5224068 -3.1e-6,0.288521 0.2041898,0.5224116 0.4560701,0.5224066 0.2518794,5e-6 0.4560727,-0.2338856 0.4560695,-0.5224066 3.2e-6,-0.2885172 -0.2041896,-0.5224113 -0.4560695,-0.5224068 z m 1.3246751,1.5817324 c -0.2518795,-4e-6 -0.4560731,0.233887 -0.4560696,0.522407 -3.5e-6,0.288517 0.2041896,0.522411 0.4560696,0.522408 0.2518823,3e-6 0.4560731,-0.233887 0.4560699,-0.522408 3.2e-6,-0.288521 -0.2041897,-0.522411 -0.4560699,-0.522407 z"
|
||||
sodipodi:nodetypes="cssssccccccccccccssssssccccccccssccccccccscccccccccccc" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
43
addons/forge/icons/effect_area_2d.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cnjrjkgwyewjx"
|
||||
path="res://.godot/imported/effect_area_2d.svg-2fa846cc04ac024c81e4a9b438b2b2ce.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/effect_area_2d.svg"
|
||||
dest_files=["res://.godot/imported/effect_area_2d.svg-2fa846cc04ac024c81e4a9b438b2b2ce.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
44
addons/forge/icons/effect_area_3d.svg
Normal file
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="effect_area_3d.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="45.254834"
|
||||
inkscape:cx="2.7842329"
|
||||
inkscape:cy="7.6124464"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
fill="#fc7f7f"
|
||||
d="M 1,1 V 5 H 3 V 3 H 5 V 1 Z m 10,0 v 2 h 2 v 2 h 2 V 1 Z M 4,4 v 8 z m 2,2 v 4 z m -5,5 v 4 H 5 V 13 H 3 v -2 z m 12,0 v 2 h -2 v 2 h 4 v -4 z"
|
||||
id="path1"
|
||||
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccc"
|
||||
style="fill:#fc7f7f;fill-opacity:1" />
|
||||
<path
|
||||
id="path12"
|
||||
style="display:inline;fill:#fc7f7f;stroke:#d2d3d5;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:markers fill stroke;fill-opacity:1"
|
||||
d="M 7.7175263,1.4524809 C 7.9758008,2.5147092 8.0427544,4.9610285 7.058664,4.7659441 6.6449569,4.6839312 5.2129216,3.9106951 5.3064556,3.2660745 5.3999889,2.6214536 4.2846704,3.9996785 3.4808742,6.9332899 2.6770765,9.8669014 3.9190832,13.274301 8.0733595,13.292864 14.798902,13.165622 12.081772,5.7812031 11.24134,3.3591991 9.8067637,7.4360076 10.018622,2.4789977 7.7175263,1.4524809 Z m 0.2333231,3.9114342 c 0.1387966,-0.00759 0.2683867,0.038031 0.3938779,0.1036501 l 2.3798547,1.3765014 c 0.112173,0.1179647 0.283085,0.2143034 -0.0083,0.4809466 L 8.2617919,8.7098081 c -0.1786076,0.090766 -0.3693068,0.139206 -0.6136211,0 L 5.1522377,7.2586778 C 5.0205494,7.1293919 4.9738234,6.9868272 5.193698,6.8026079 L 7.6896442,5.4426908 c 0.091736,-0.051084 0.1779266,-0.074222 0.2612052,-0.078776 z m 0.068409,1.169197 c -0.3159967,0 -0.5721606,0.1819129 -0.5721606,0.4063167 0,0.2244058 0.2561637,0.4063168 0.5721606,0.4063168 0.3159965,0 0.57216,-0.1819131 0.57216,-0.4063168 0,-0.2244028 -0.2561635,-0.4063167 -0.57216,-0.4063167 z M 4.5676391,7.6484102 c 0.053413,0.00178 0.115125,0.012644 0.1865747,0.033175 C 5.5681165,8.1570731 7.324789,9.1575926 7.324789,9.1575926 7.6511235,9.366107 7.6061453,9.5215754 7.6398912,9.6882924 l 0.00829,2.6452046 c -0.07138,0.401596 -0.2929043,0.399625 -0.5389895,0.331681 L 4.5634933,11.164294 C 4.4319814,11.0417 4.2538388,10.983676 4.2566829,10.675055 c 0,0 -0.030485,-1.7752483 -0.024874,-2.7032499 0.029402,-0.1777291 0.1043738,-0.3310884 0.3358339,-0.323394 z m 6.8306819,0.014509 c 0.199367,-0.0017 0.258696,0.1546714 0.304737,0.3254682 l 0.004,2.7156886 c -0.03461,0.306562 -0.171405,0.374807 -0.302616,0.456082 L 8.7302633,12.65274 C 8.5252194,12.67556 8.2887681,12.821571 8.2202943,12.308613 L 8.2410423,9.6509704 C 8.2402734,9.4482514 8.3333141,9.2857556 8.5644852,9.1824627 L 11.147491,7.7230396 c 0.102219,-0.040802 0.184379,-0.059552 0.250834,-0.060119 z M 5.2165022,8.9627206 c -0.2518824,-4.5e-6 -0.4560732,0.2338865 -0.4560701,0.5224068 -3.1e-6,0.288521 0.2041898,0.5224116 0.4560701,0.5224066 0.2518794,5e-6 0.4560727,-0.2338856 0.4560695,-0.5224066 3.2e-6,-0.2885172 -0.2041896,-0.5224113 -0.4560695,-0.5224068 z m 1.3246751,1.5817324 c -0.2518795,-4e-6 -0.4560731,0.233887 -0.4560696,0.522407 -3.5e-6,0.288517 0.2041896,0.522411 0.4560696,0.522408 0.2518823,3e-6 0.4560731,-0.233887 0.4560699,-0.522408 3.2e-6,-0.288521 -0.2041897,-0.522411 -0.4560699,-0.522407 z"
|
||||
sodipodi:nodetypes="cssssccccccccccccssssssccccccccssccccccccscccccccccccc" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
43
addons/forge/icons/effect_area_3d.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://tbuwwf03ikr3"
|
||||
path="res://.godot/imported/effect_area_3d.svg-576bfbd1397bd9e6d9b73a1004c934e8.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/effect_area_3d.svg"
|
||||
dest_files=["res://.godot/imported/effect_area_3d.svg-576bfbd1397bd9e6d9b73a1004c934e8.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
44
addons/forge/icons/effect_data.svg
Normal file
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="16"
|
||||
height="15.999999"
|
||||
viewBox="0 0 4.2333332 4.233333"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="effect_data.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="45.254834"
|
||||
inkscape:cx="1.9887378"
|
||||
inkscape:cy="9.3360192"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" /><defs
|
||||
id="defs1"><inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 2.1166665 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="4.2333332 : 2.1166665 : 1"
|
||||
inkscape:persp3d-origin="2.1166666 : 1.411111 : 1"
|
||||
id="perspective1" /></defs><path
|
||||
id="path12"
|
||||
style="display:inline;fill:#d2d3d5;stroke:#d2d3d5;stroke-width:0.00564427;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:markers fill stroke"
|
||||
d="m 2.1144199,0.11266658 c -0.044282,0.00241 -0.090117,0.0147196 -0.1389013,0.0418909 L 0.64823191,0.87773002 C 0.53130687,0.97569372 0.5561563,1.0515058 0.62618504,1.1202574 L 1.9534708,1.891935 c 0.1299203,0.074026 0.2313301,0.048267 0.3263093,0 L 3.5850177,1.1555342 C 3.7399656,1.01374 3.6490711,0.96250952 3.5894325,0.89977802 L 2.3238753,0.16778639 c -0.066733,-0.034896 -0.135646,-0.0591513 -0.2094554,-0.0551198 z m 0.036379,0.62175183 c 0.1680397,0 0.3042614,0.0967376 0.3042614,0.21606991 0,0.11933258 -0.1362219,0.21606968 -0.3042614,0.21606968 -0.1680396,0 -0.3042616,-0.096738 -0.3042616,-0.21606968 0,-0.11933271 0.136222,-0.21606991 0.3042616,-0.21606991 z M 0.31530865,1.327508 c -0.12308528,-0.0041 -0.16295183,0.077461 -0.17858868,0.1719735 -0.002987,0.4934892 0.0132263,1.4375254 0.0132263,1.4375254 -0.001513,0.1641166 0.093219,0.1949723 0.163154,0.2601658 L 1.6668468,3.9953083 c 0.1308633,0.036131 0.2486638,0.037178 0.2866231,-0.176383 l -0.00441,-1.4066582 c -0.017941,-0.088657 0.00598,-0.1713313 -0.1675639,-0.2822136 0,0 -0.93415802,-0.5320535 -1.36697226,-0.7849067 -0.0379957,-0.010918 -0.0708116,-0.016704 -0.0992162,-0.017641 z m 3.63239755,0.00773 c -0.03534,3.01e-4 -0.079035,0.010277 -0.1333889,0.031969 L 2.4407293,2.1432817 C 2.3177975,2.1982111 2.2683228,2.2846236 2.2687559,2.3924233 l -0.011029,1.4132728 c 0.036413,0.2727785 0.1621518,0.1951364 0.2711898,0.1829982 L 3.9510129,3.1949682 c 0.069775,-0.04322 0.1425195,-0.079511 0.1609509,-0.2425272 l -0.0022,-1.4441401 C 4.0852746,1.4174751 4.053725,1.3343223 3.9477057,1.3352248 Z M 0.66035851,2.0264328 c 0.13394368,-2.1e-6 0.2425288,0.1243754 0.24252723,0.277804 1.57e-6,0.1534288 -0.10858334,0.277806 -0.24252723,0.2778039 -0.1339458,-2.7e-6 -0.24252914,-0.124381 -0.24252743,-0.277809 -1.71e-6,-0.1534289 0.10858339,-0.2778064 0.24252743,-0.277804 z M 1.3647899,2.8675614 c 0.1339458,-2.4e-6 0.2425292,0.1243756 0.2425274,0.277804 1.8e-6,0.1534288 -0.108584,0.2778064 -0.2425274,0.277804 -0.1339437,2.2e-6 -0.2425288,-0.1243755 -0.2425272,-0.277804 -1.6e-6,-0.1534289 0.1085828,-0.2778061 0.2425272,-0.277804 z"
|
||||
sodipodi:nodetypes="ccccccccccsssssscccccccccsccccccccscccccccccccc" /></svg>
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
43
addons/forge/icons/effect_data.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://obsk7rrtq1xd"
|
||||
path="res://.godot/imported/effect_data.svg-d846693cd1c2700362c2e6f5c6281239.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/effect_data.svg"
|
||||
dest_files=["res://.godot/imported/effect_data.svg-d846693cd1c2700362c2e6f5c6281239.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
42
addons/forge/icons/effect_ray_cast_2d.svg
Normal file
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="ray_cast_2d.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="19.078125"
|
||||
inkscape:cx="11.321867"
|
||||
inkscape:cy="5.3202293"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
id="path1"
|
||||
d="M 7 1 L 7 2.7050781 C 7.2900472 3.318458 7.8139989 4.6324434 7.7832031 6.0800781 C 7.753814 7.4615875 7.2858874 8.1120413 7 8.3808594 L 7 10 L 4 10 L 8 15 L 12 10 L 9 10 L 9 1 L 7 1 z "
|
||||
style="fill:#8da5f3;fill-opacity:1" />
|
||||
<path
|
||||
id="path12"
|
||||
style="display:inline;fill:#8da5f3;stroke:#d2d3d5;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:markers fill stroke;fill-opacity:1"
|
||||
d="M 4.1978808,1.1704294 C 4.365921,1.861544 4.4094828,3.4531862 3.7692071,3.3262589 3.5000377,3.2728989 2.5683167,2.7698105 2.6291727,2.3504027 2.6900281,1.9309948 1.9643713,2.8277055 1.441399,4.7363929 0.91842677,6.6450804 1.7265098,8.8620289 4.4293953,8.8741054 8.8052157,8.7913187 7.0373782,3.9868141 6.4905693,2.4109922 5.5571953,5.0634748 5.6950364,1.8383092 4.1978808,1.1704294 Z m 0.1518064,2.5448858 c 0.090304,-0.00494 0.1746196,0.024744 0.2562679,0.067437 l 1.5483981,0.8955891 c 0.072984,0.076748 0.184183,0.139432 -0.00539,0.3129169 L 4.5520063,5.8922444 c -0.116207,0.059054 -0.2402814,0.090571 -0.3992386,0 L 2.5288418,4.9480994 C 2.4431618,4.8639829 2.4127606,4.7712264 2.5558171,4.6513681 L 4.1797478,3.7665688 c 0.059686,-0.033236 0.115764,-0.048291 0.1699473,-0.051254 z m 0.044511,0.7607113 c -0.205596,0 -0.3722632,0.1183574 -0.3722632,0.2643605 0,0.1460045 0.1666672,0.2643611 0.3722632,0.2643611 0.2055958,0 0.3722631,-0.1183574 0.3722631,-0.2643611 0,-0.1460024 -0.1666673,-0.2643605 -0.3722631,-0.2643605 z m -2.245718,0.7256434 c 0.034752,0.00115 0.074902,0.00822 0.1213911,0.021583 0.5295471,0.3093648 1.6724863,0.9603307 1.6724863,0.9603307 0.2123219,0.1356644 0.1830579,0.2368177 0.2050138,0.345288 l 0.0054,1.7210427 C 4.1063217,8.5112041 3.9621916,8.5099222 3.8020819,8.4657155 L 2.1457806,7.4891997 C 2.0602157,7.4094357 1.9443115,7.3716848 1.9461617,7.1708871 c 0,0 -0.019834,-1.1550243 -0.016185,-1.7588075 0.01913,-0.1156353 0.067908,-0.2154151 0.2185035,-0.2104097 z m 4.4442277,0.00943 c 0.1297136,-0.00108 0.1683147,0.1006334 0.1982689,0.2117588 l 0.00269,1.7669057 C 6.771126,7.3892241 6.6821247,7.4336257 6.5967551,7.4865057 L 4.8568297,8.45762 C 4.7234223,8.472469 4.5695809,8.5674665 4.5250297,8.2337219 L 4.5385282,6.504587 C 4.5380011,6.3726927 4.598532,6.266968 4.748938,6.1997628 l 1.6805737,-0.94954 c 0.066503,-0.026547 0.1199624,-0.038747 0.1632,-0.039117 z m -4.0220601,0.845696 c -0.1638813,-3.3e-6 -0.2967335,0.1521723 -0.2967315,0.3398915 -2e-6,0.1877201 0.1328517,0.3398954 0.2967315,0.3398924 0.1638797,3e-6 0.2967334,-0.1521731 0.2967314,-0.3398924 2e-6,-0.1877169 -0.132851,-0.3398948 -0.2967314,-0.3398915 z M 3.432518,7.0859142 c -0.1638799,-3e-6 -0.2967338,0.1521731 -0.2967313,0.3398916 -2.5e-6,0.1877178 0.1328511,0.3398955 0.2967313,0.3398931 0.1638813,2.4e-6 0.2967333,-0.1521738 0.2967314,-0.3398931 C 3.7292513,7.2380865 3.5963979,7.0859112 3.432518,7.0859142 Z"
|
||||
sodipodi:nodetypes="cssssccccccccccccssssssccccccccssccccccccscccccccccccc" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
43
addons/forge/icons/effect_ray_cast_2d.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d3wjawuu1ej3s"
|
||||
path="res://.godot/imported/effect_ray_cast_2d.svg-38774a815d0c14e2adb8c8d652e29ca6.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/effect_ray_cast_2d.svg"
|
||||
dest_files=["res://.godot/imported/effect_ray_cast_2d.svg-38774a815d0c14e2adb8c8d652e29ca6.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
42
addons/forge/icons/effect_ray_cast_3d.svg
Normal file
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="ray_cast_3d.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="19.078125"
|
||||
inkscape:cx="11.321867"
|
||||
inkscape:cy="5.3202293"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
id="path1"
|
||||
d="M 7 1 L 7 2.7050781 C 7.2900472 3.318458 7.8139989 4.6324434 7.7832031 6.0800781 C 7.753814 7.4615875 7.2858874 8.1120413 7 8.3808594 L 7 10 L 4 10 L 8 15 L 12 10 L 9 10 L 9 1 L 7 1 z "
|
||||
style="fill:#fc7f7f;fill-opacity:1" />
|
||||
<path
|
||||
id="path12"
|
||||
style="display:inline;fill:#fc7f7f;stroke:#d2d3d5;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:markers fill stroke;fill-opacity:1"
|
||||
d="M 4.1978808,1.1704294 C 4.365921,1.861544 4.4094828,3.4531862 3.7692071,3.3262589 3.5000377,3.2728989 2.5683167,2.7698105 2.6291727,2.3504027 2.6900281,1.9309948 1.9643713,2.8277055 1.441399,4.7363929 0.91842677,6.6450804 1.7265098,8.8620289 4.4293953,8.8741054 8.8052157,8.7913187 7.0373782,3.9868141 6.4905693,2.4109922 5.5571953,5.0634748 5.6950364,1.8383092 4.1978808,1.1704294 Z m 0.1518064,2.5448858 c 0.090304,-0.00494 0.1746196,0.024744 0.2562679,0.067437 l 1.5483981,0.8955891 c 0.072984,0.076748 0.184183,0.139432 -0.00539,0.3129169 L 4.5520063,5.8922444 c -0.116207,0.059054 -0.2402814,0.090571 -0.3992386,0 L 2.5288418,4.9480994 C 2.4431618,4.8639829 2.4127606,4.7712264 2.5558171,4.6513681 L 4.1797478,3.7665688 c 0.059686,-0.033236 0.115764,-0.048291 0.1699473,-0.051254 z m 0.044511,0.7607113 c -0.205596,0 -0.3722632,0.1183574 -0.3722632,0.2643605 0,0.1460045 0.1666672,0.2643611 0.3722632,0.2643611 0.2055958,0 0.3722631,-0.1183574 0.3722631,-0.2643611 0,-0.1460024 -0.1666673,-0.2643605 -0.3722631,-0.2643605 z m -2.245718,0.7256434 c 0.034752,0.00115 0.074902,0.00822 0.1213911,0.021583 0.5295471,0.3093648 1.6724863,0.9603307 1.6724863,0.9603307 0.2123219,0.1356644 0.1830579,0.2368177 0.2050138,0.345288 l 0.0054,1.7210427 C 4.1063217,8.5112041 3.9621916,8.5099222 3.8020819,8.4657155 L 2.1457806,7.4891997 C 2.0602157,7.4094357 1.9443115,7.3716848 1.9461617,7.1708871 c 0,0 -0.019834,-1.1550243 -0.016185,-1.7588075 0.01913,-0.1156353 0.067908,-0.2154151 0.2185035,-0.2104097 z m 4.4442277,0.00943 c 0.1297136,-0.00108 0.1683147,0.1006334 0.1982689,0.2117588 l 0.00269,1.7669057 C 6.771126,7.3892241 6.6821247,7.4336257 6.5967551,7.4865057 L 4.8568297,8.45762 C 4.7234223,8.472469 4.5695809,8.5674665 4.5250297,8.2337219 L 4.5385282,6.504587 C 4.5380011,6.3726927 4.598532,6.266968 4.748938,6.1997628 l 1.6805737,-0.94954 c 0.066503,-0.026547 0.1199624,-0.038747 0.1632,-0.039117 z m -4.0220601,0.845696 c -0.1638813,-3.3e-6 -0.2967335,0.1521723 -0.2967315,0.3398915 -2e-6,0.1877201 0.1328517,0.3398954 0.2967315,0.3398924 0.1638797,3e-6 0.2967334,-0.1521731 0.2967314,-0.3398924 2e-6,-0.1877169 -0.132851,-0.3398948 -0.2967314,-0.3398915 z M 3.432518,7.0859142 c -0.1638799,-3e-6 -0.2967338,0.1521731 -0.2967313,0.3398916 -2.5e-6,0.1877178 0.1328511,0.3398955 0.2967313,0.3398931 0.1638813,2.4e-6 0.2967333,-0.1521738 0.2967314,-0.3398931 C 3.7292513,7.2380865 3.5963979,7.0859112 3.432518,7.0859142 Z"
|
||||
sodipodi:nodetypes="cssssccccccccccccssssssccccccccssccccccccscccccccccccc" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
43
addons/forge/icons/effect_ray_cast_3d.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dskf1b0eecaxl"
|
||||
path="res://.godot/imported/effect_ray_cast_3d.svg-d66a481d1126e3560bd16542349178e3.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/effect_ray_cast_3d.svg"
|
||||
dest_files=["res://.godot/imported/effect_ray_cast_3d.svg-d66a481d1126e3560bd16542349178e3.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
37
addons/forge/icons/effect_shape_cast_2d.svg
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="effect_shape_cast_2d.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="38.15625"
|
||||
inkscape:cx="13.81163"
|
||||
inkscape:cy="7.8755119"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
id="path1"
|
||||
style="fill:#8da5f3;fill-opacity:1"
|
||||
d="M 7.8007812 0.35742188 C 7.9851717 1.1157788 8.032649 2.8619329 7.3300781 2.7226562 C 7.0347193 2.6641044 6.0113482 2.1125579 6.078125 1.6523438 C 6.1449028 1.1921293 5.3492464 2.1751373 4.7753906 4.2695312 C 4.2725277 6.1048268 4.8904099 8.2000344 7.046875 8.6992188 C 7.0214837 8.6994116 7.0268071 8.6990006 7 8.6992188 L 7 10 L 4 10 L 8 15 L 12 10 L 9 10 L 9 8.7109375 C 12.579035 7.9688284 10.872634 3.3217163 10.316406 1.71875 C 9.2922191 4.629307 9.4436034 1.0902832 7.8007812 0.35742188 z M 7.9667969 3.1503906 C 8.0658878 3.1449706 8.1584554 3.1777614 8.2480469 3.2246094 L 9.9472656 4.2070312 C 10.027346 4.2912502 10.149409 4.3604166 9.9414062 4.5507812 L 8.1894531 5.5390625 C 8.0619394 5.6038634 7.9244223 5.6384454 7.75 5.5390625 L 5.96875 4.5019531 C 5.8747337 4.409652 5.8410714 4.3092542 5.9980469 4.1777344 L 7.7792969 3.2070312 C 7.8447868 3.1705613 7.9073417 3.153642 7.9667969 3.1503906 z M 8.015625 3.984375 C 7.7900255 3.984375 7.6074219 4.1151821 7.6074219 4.2753906 C 7.6074219 4.4356008 7.7900255 4.5644531 8.015625 4.5644531 C 8.2412236 4.5644531 8.4238281 4.4355993 8.4238281 4.2753906 C 8.4238281 4.1151827 8.2412236 3.984375 8.015625 3.984375 z M 5.5507812 4.78125 C 5.5889162 4.78252 5.6325818 4.7900335 5.6835938 4.8046875 C 6.2646636 5.1441527 7.5195312 5.8574219 7.5195312 5.8574219 C 7.7525107 6.006286 7.7200485 6.117304 7.7441406 6.2363281 L 7.75 8.125 C 7.6990305 8.411711 7.5409217 8.4117891 7.3652344 8.3632812 L 5.5488281 7.2910156 C 5.4549382 7.2034897 5.3280475 7.1617402 5.3300781 6.9414062 C 5.3300781 6.9414062 5.3065419 5.6742476 5.3105469 5.0117188 C 5.3315419 4.8848326 5.385533 4.7757568 5.5507812 4.78125 z M 10.427734 4.7910156 C 10.570069 4.7898056 10.611662 4.9015004 10.644531 5.0234375 L 10.648438 6.9628906 C 10.623708 7.1817541 10.525317 7.229085 10.431641 7.2871094 L 8.5234375 8.3535156 C 8.3770504 8.3698087 8.2070894 8.4736383 8.1582031 8.1074219 L 8.1738281 6.2109375 C 8.1732476 6.0662105 8.2392578 5.9506972 8.4042969 5.8769531 L 10.248047 4.8339844 C 10.321027 4.8048554 10.380289 4.7914206 10.427734 4.7910156 z M 6.0136719 5.71875 C 5.8338456 5.7187473 5.6894505 5.8858135 5.6894531 6.0917969 C 5.6894505 6.2977811 5.8338474 6.4648473 6.0136719 6.4648438 C 6.1934964 6.4648473 6.3398455 6.2977803 6.3398438 6.0917969 C 6.3398455 5.8858161 6.1934972 5.7187473 6.0136719 5.71875 z M 6.9609375 6.8476562 C 6.781113 6.8476537 6.634763 7.0147197 6.6347656 7.2207031 C 6.634763 7.4266838 6.781113 7.5937526 6.9609375 7.59375 C 7.1407637 7.5937526 7.2851588 7.4266865 7.2851562 7.2207031 C 7.2851588 7.0147188 7.140762 6.8476528 6.9609375 6.8476562 z " />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
43
addons/forge/icons/effect_shape_cast_2d.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dni75h8pnigh2"
|
||||
path="res://.godot/imported/effect_shape_cast_2d.svg-760a67ed358df0828149d5d37860ebe1.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/effect_shape_cast_2d.svg"
|
||||
dest_files=["res://.godot/imported/effect_shape_cast_2d.svg-760a67ed358df0828149d5d37860ebe1.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
37
addons/forge/icons/effect_shape_cast_3d.svg
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="effect_shape_cast_3d.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="38.15625"
|
||||
inkscape:cx="13.81163"
|
||||
inkscape:cy="7.8755119"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
id="path1"
|
||||
d="M 7.8007812 0.35742188 C 7.9851717 1.1157788 8.032649 2.8619329 7.3300781 2.7226562 C 7.0347193 2.6641044 6.0113482 2.1125579 6.078125 1.6523438 C 6.1449028 1.1921293 5.3492464 2.1751373 4.7753906 4.2695312 C 4.2725277 6.1048268 4.8904099 8.2000344 7.046875 8.6992188 C 7.0214837 8.6994116 7.0268071 8.6990006 7 8.6992188 L 7 10 L 4 10 L 8 15 L 12 10 L 9 10 L 9 8.7109375 C 12.579035 7.9688284 10.872634 3.3217163 10.316406 1.71875 C 9.2922191 4.629307 9.4436034 1.0902832 7.8007812 0.35742188 z M 7.9667969 3.1503906 C 8.0658878 3.1449706 8.1584554 3.1777614 8.2480469 3.2246094 L 9.9472656 4.2070312 C 10.027346 4.2912502 10.149409 4.3604166 9.9414062 4.5507812 L 8.1894531 5.5390625 C 8.0619394 5.6038634 7.9244223 5.6384454 7.75 5.5390625 L 5.96875 4.5019531 C 5.8747337 4.409652 5.8410714 4.3092542 5.9980469 4.1777344 L 7.7792969 3.2070312 C 7.8447868 3.1705613 7.9073417 3.153642 7.9667969 3.1503906 z M 8.015625 3.984375 C 7.7900255 3.984375 7.6074219 4.1151821 7.6074219 4.2753906 C 7.6074219 4.4356008 7.7900255 4.5644531 8.015625 4.5644531 C 8.2412236 4.5644531 8.4238281 4.4355993 8.4238281 4.2753906 C 8.4238281 4.1151827 8.2412236 3.984375 8.015625 3.984375 z M 5.5507812 4.78125 C 5.5889162 4.78252 5.6325818 4.7900335 5.6835938 4.8046875 C 6.2646636 5.1441527 7.5195312 5.8574219 7.5195312 5.8574219 C 7.7525107 6.006286 7.7200485 6.117304 7.7441406 6.2363281 L 7.75 8.125 C 7.6990305 8.411711 7.5409217 8.4117891 7.3652344 8.3632812 L 5.5488281 7.2910156 C 5.4549382 7.2034897 5.3280475 7.1617402 5.3300781 6.9414062 C 5.3300781 6.9414062 5.3065419 5.6742476 5.3105469 5.0117188 C 5.3315419 4.8848326 5.385533 4.7757568 5.5507812 4.78125 z M 10.427734 4.7910156 C 10.570069 4.7898056 10.611662 4.9015004 10.644531 5.0234375 L 10.648438 6.9628906 C 10.623708 7.1817541 10.525317 7.229085 10.431641 7.2871094 L 8.5234375 8.3535156 C 8.3770504 8.3698087 8.2070894 8.4736383 8.1582031 8.1074219 L 8.1738281 6.2109375 C 8.1732476 6.0662105 8.2392578 5.9506972 8.4042969 5.8769531 L 10.248047 4.8339844 C 10.321027 4.8048554 10.380289 4.7914206 10.427734 4.7910156 z M 6.0136719 5.71875 C 5.8338456 5.7187473 5.6894505 5.8858135 5.6894531 6.0917969 C 5.6894505 6.2977811 5.8338474 6.4648473 6.0136719 6.4648438 C 6.1934964 6.4648473 6.3398455 6.2977803 6.3398438 6.0917969 C 6.3398455 5.8858161 6.1934972 5.7187473 6.0136719 5.71875 z M 6.9609375 6.8476562 C 6.781113 6.8476537 6.634763 7.0147197 6.6347656 7.2207031 C 6.634763 7.4266838 6.781113 7.5937526 6.9609375 7.59375 C 7.1407637 7.5937526 7.2851588 7.4266865 7.2851562 7.2207031 C 7.2851588 7.0147188 7.140762 6.8476528 6.9609375 6.8476562 z "
|
||||
style="fill:#fc7f7f;fill-opacity:1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
43
addons/forge/icons/effect_shape_cast_3d.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://e2ynjdppura3"
|
||||
path="res://.godot/imported/effect_shape_cast_3d.svg-7792dea5e674a600e08c04ad5e3ff501.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/effect_shape_cast_3d.svg"
|
||||
dest_files=["res://.godot/imported/effect_shape_cast_3d.svg-7792dea5e674a600e08c04ad5e3ff501.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
42
addons/forge/icons/execution.svg
Normal file
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="execution.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="54.756581"
|
||||
inkscape:cx="7.5972603"
|
||||
inkscape:cy="11.350234"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
id="path1"
|
||||
style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1.03396;stroke-opacity:1"
|
||||
d="M 7.0019531 0.65234375 L 6.4199219 2.984375 L 5.7109375 3.2792969 L 3.6503906 2.0429688 L 2.1894531 3.5039062 L 3.4238281 5.5605469 L 3.1328125 6.2734375 L 0.79882812 6.8574219 L 0.79882812 8.9238281 L 3.1289062 9.5058594 L 3.4257812 10.214844 L 2.1894531 12.277344 L 3.6503906 13.738281 L 5.7070312 12.503906 L 6.4199219 12.792969 L 7.0019531 15.128906 L 9.0703125 15.128906 L 9.0703125 15.09375 L 9.6464844 12.785156 L 9.8417969 12.703125 L 9.8417969 9.4804688 C 9.841732 9.0433396 10.099183 8.6881937 10.447266 8.5019531 C 10.59955 8.4204729 10.76831 8.370519 10.941406 8.3613281 C 11.163959 8.3495113 11.393116 8.40455 11.597656 8.5410156 L 13.009766 9.4824219 L 15.253906 8.921875 L 15.253906 6.859375 L 12.929688 6.2792969 L 12.634766 5.5722656 L 13.867188 3.5136719 L 12.410156 2.0566406 L 10.355469 3.2890625 L 9.6464844 3.0019531 L 9.0703125 0.6875 L 9.0703125 0.65234375 L 7.0019531 0.65234375 z M 8.0605469 5.8242188 C 9.1148666 5.8566237 10.0625 6.7122379 10.0625 7.890625 C 10.0625 9.1366866 9.0036711 10.020371 7.8789062 9.953125 C 7.8742063 9.9526749 7.8679772 9.9516519 7.8632812 9.9511719 C 6.8661274 9.8486789 6.0019531 9.0174651 6.0019531 7.890625 C 6.0019531 6.7645404 6.8650202 5.9334789 7.8613281 5.8300781 C 7.8666881 5.8295217 7.8735373 5.828635 7.8789062 5.828125 C 7.9399932 5.824475 7.9999974 5.8223588 8.0605469 5.8242188 z " />
|
||||
<path
|
||||
fill="#e0e0e0"
|
||||
d="m 10.651663,14.48505 a 0.54883988,0.54883988 0 0 0 0.853445,0.456634 l 3.293039,-2.195359 a 0.54883988,0.54883988 0 0 0 0,-0.91327 L 11.505108,9.6376949 A 0.54883988,0.54883988 0 0 0 10.651663,10.09433 Z"
|
||||
id="path1-1"
|
||||
style="stroke-width:0.54884" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
43
addons/forge/icons/execution.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dy874wbbpsewt"
|
||||
path="res://.godot/imported/execution.svg-83228725b36fa4c88a76f83bfdec0286.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/execution.svg"
|
||||
dest_files=["res://.godot/imported/execution.svg-83228725b36fa4c88a76f83bfdec0286.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
39
addons/forge/icons/forge_entity.svg
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="16"
|
||||
height="15.999999"
|
||||
viewBox="0 0 4.2333332 4.233333"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="forge_entity.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="77.437505"
|
||||
inkscape:cx="8.0064563"
|
||||
inkscape:cy="7.9999995"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" /><defs
|
||||
id="defs1" /><g
|
||||
id="layer1"
|
||||
style="stroke-width:1.00012497;stroke-dasharray:none"><path
|
||||
style="fill:#ffca5f;stroke-width:1.00012497;stroke-dasharray:none;fill-opacity:1"
|
||||
d="M 1.5551745,0.96467593 4.1685694,0.98221542 4.1627221,1.4674766 3.4494464,1.6077932 2.8881805,2.0813613 V 2.5081574 L 3.1688135,2.7770973 3.6248422,3.098656 V 3.3208237 L 2.9934185,3.3383635 2.6426274,3.098656 2.0872079,3.07527 1.7364167,3.3149772 H 1.1576111 L 1.1693042,3.07527 1.6019467,2.7595578 1.8825797,2.5081574 V 2.256757 L 1.5785606,1.9819706 1.0172946,1.964431 0.42679601,1.5785606 0.06431173,1.0757598 H 1.5434815 Z"
|
||||
id="path2" /></g></svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
43
addons/forge/icons/forge_entity.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cu6ncpuumjo20"
|
||||
path="res://.godot/imported/forge_entity.svg-d743df11c7a67f6bf91b9199475109b5.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/forge_entity.svg"
|
||||
dest_files=["res://.godot/imported/forge_entity.svg-d743df11c7a67f6bf91b9199475109b5.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
57
addons/forge/icons/modifier.svg
Normal file
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
sodipodi:docname="modifier.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="namedview4"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="38.71875"
|
||||
inkscape:cx="9.4527845"
|
||||
inkscape:cy="11.867635"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="3432"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:none;fill-rule:nonzero;stroke:#e0e0e0;stroke-width:1.82772133;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
|
||||
id="path1"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="6"
|
||||
sodipodi:cx="4.6618242"
|
||||
sodipodi:cy="2.5827279"
|
||||
sodipodi:r1="8.1015778"
|
||||
sodipodi:r2="7.0161719"
|
||||
sodipodi:arg1="0.52359878"
|
||||
sodipodi:arg2="1.0471976"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 11.677996,6.6335168 -7.0161718,4.0507892 -7.0161721,-4.0507892 0,-8.1015778 7.0161722,-4.0507888 7.0161717,4.0507889 z"
|
||||
transform="matrix(0.82069404,0,0,0.82069404,4.1875682,5.8716712)" />
|
||||
<path
|
||||
fill="#5fff97"
|
||||
d="m 7.9265537,9.7974173 -2,-4 -2,4 z"
|
||||
id="path1-1" />
|
||||
<path
|
||||
fill="#ff5f5f"
|
||||
d="m 11.926554,5.7974173 -2.0000003,4 -2,-4 z"
|
||||
id="path2" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
43
addons/forge/icons/modifier.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bbwv58ku4cv0i"
|
||||
path="res://.godot/imported/modifier.svg-3b296d7c6fecf2c20d9d36cbf7b38059.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/modifier.svg"
|
||||
dest_files=["res://.godot/imported/modifier.svg-3b296d7c6fecf2c20d9d36cbf7b38059.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
43
addons/forge/icons/modifier_magnitude.svg
Normal file
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
sodipodi:docname="modifier_magnitude.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="namedview4"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="38.71875"
|
||||
inkscape:cx="9.4527845"
|
||||
inkscape:cy="11.867635"
|
||||
inkscape:window-width="3408"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="24"
|
||||
inkscape:window-y="723"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
fill="#5fff97"
|
||||
d="M 7.9265536,11.734463 3.9895075,3.8603713 0.05246155,11.734463 Z"
|
||||
id="path1-1"
|
||||
style="stroke-width:1.96852" />
|
||||
<path
|
||||
fill="#ff5f5f"
|
||||
d="M 15.800646,3.8603713 11.8636,11.734463 7.9265536,3.8603713 Z"
|
||||
id="path2"
|
||||
style="stroke-width:1.96852" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
43
addons/forge/icons/modifier_magnitude.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cesj1p71jsco5"
|
||||
path="res://.godot/imported/modifier_magnitude.svg-e06a8ba19595207512a4ac520c20cda1.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/modifier_magnitude.svg"
|
||||
dest_files=["res://.godot/imported/modifier_magnitude.svg-e06a8ba19595207512a4ac520c20cda1.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
43
addons/forge/icons/query_expression.svg
Normal file
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="query_expression.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="64"
|
||||
inkscape:cx="5.984375"
|
||||
inkscape:cy="8.2421875"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
id="path1-0"
|
||||
style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1.02962"
|
||||
d="M 5.421875,0.546875 C 5.1479804,0.54644379 4.885166,0.65466151 4.6914062,0.84765625 L 0.56835938,4.9609375 c -0.40220357,0.4013913 -0.40220357,1.0517337 0,1.453125 L 4.6914062,10.525391 C 4.860843,10.690736 5.0822564,10.79282 5.3183594,10.814453 4.5836009,9.2175943 4.6805978,7.1832208 6.1992188,5.5957031 7.1213377,4.6317496 8.2294899,4.1906359 9.2949219,4.1875 c 1.0654321,-0.00314 2.0781751,0.4157302 2.8750001,1.09375 1.461965,1.243988 2.143226,3.4343473 1.140625,5.546875 h 0.361328 c 0.570025,2.9e-5 1.031942,-0.461014 1.03125,-1.0292969 V 1.5742188 C 14.702735,1.0066984 14.241134,0.54684641 13.671875,0.546875 Z m -1.03125,4.1113281 c 1.3752944,0 1.3752944,2.0566407 0,2.0566407 -1.3752944,0 -1.3752944,-2.0566407 0,-2.0566407 z M 9.2988281,5.1875 C 8.4986886,5.189855 7.6777091,5.4969847 6.921875,6.2871094 6.041631,7.2072883 5.759352,8.2574971 5.8789062,9.2363281 6.0607113,8.9990945 6.2670421,8.7835935 6.4941406,8.59375 6.5433745,7.9581412 6.7710915,7.3329008 7.1953125,6.8339844 7.6285263,6.3244916 8.2798604,5.9672084 9.0722656,5.8984375 9.2623734,5.6462688 9.4799922,5.4181624 9.7207031,5.21875 9.5806907,5.1996101 9.4402892,5.1870845 9.2988281,5.1875 Z m 1.0371099,0.1777344 c 0.136406,0.2591255 0.245758,0.5328346 0.326171,0.8164062 0.333328,0.1639255 0.619801,0.3865299 0.845703,0.6523438 0.483258,0.5686351 0.710938,1.3003355 0.710938,2.0253906 0,0.3037427 -0.04304,0.6087209 -0.125,0.9023438 0.129291,0.2472762 0.234005,0.5077512 0.3125,0.7773432 C 13.333166,8.7717455 12.713495,7.0572511 11.521484,6.0429688 11.167313,5.7416031 10.76299,5.5113762 10.335938,5.3652344 Z M 6.0234375,9.8925781 C 6.1271092,10.22179 6.2754128,10.536225 6.4589844,10.828125 H 7.1503906 C 6.9990896,10.640122 6.874167,10.436045 6.7753906,10.220703 6.5145802,10.138745 6.2625862,10.028784 6.0234375,9.8925781 Z"
|
||||
sodipodi:nodetypes="ccccccsssccccccssscsccscccccssccscccccc" />
|
||||
<path
|
||||
fill="#e0e0e0"
|
||||
d="m 12.641903,11.13138 a 3.9462881,4.1253232 0 1 0 -1.11601,1.166641 L 14.93233,15.859 16.048339,14.692359 Z M 9.352277,6.3839578 a 2.3677731,2.4751942 0 0 1 0,4.9503882 2.3677731,2.4751942 0 0 1 0,-4.9503882 z"
|
||||
id="path1"
|
||||
style="fill:#e0e0e0;fill-opacity:1;stroke-width:0.807;stroke-dasharray:none" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.3 KiB |
43
addons/forge/icons/query_expression.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dscm401i41h52"
|
||||
path="res://.godot/imported/query_expression.svg-cb8342a68cfc5f51aa9d1b000f16c8cb.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/query_expression.svg"
|
||||
dest_files=["res://.godot/imported/query_expression.svg-cb8342a68cfc5f51aa9d1b000f16c8cb.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
52
addons/forge/icons/scalable_float.svg
Normal file
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
sodipodi:docname="scalable_float.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="namedview2"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="45.254834"
|
||||
inkscape:cx="-4.065864"
|
||||
inkscape:cy="6.1540387"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" />
|
||||
<g
|
||||
fill="none"
|
||||
stroke="#e0e0e0"
|
||||
stroke-width="2"
|
||||
id="g2">
|
||||
<path
|
||||
id="path1"
|
||||
style="color:#000000;fill:#e0e0e0;fill-opacity:0.325;-inkscape-stroke:none;stroke:none"
|
||||
d="M 1 1 L 1 1.8671875 C 1.5661756 1.4731384 2.25303 1.2402344 2.9921875 1.2402344 L 3 1.2402344 L 3 1 L 1 1 z M 2.9921875 4.2402344 C 2.7101237 4.2402344 2.4921875 4.4581706 2.4921875 4.7402344 L 2.4921875 5.2402344 L 3 5.2402344 L 3 4.2402344 L 2.9921875 4.2402344 z M 2.4921875 8.2402344 L 2.4921875 10.240234 L 1 10.240234 L 1 15 L 15 15 L 15 13 L 3 13 L 3 8.2402344 L 2.4921875 8.2402344 z " />
|
||||
<path
|
||||
id="path2"
|
||||
style="color:#000000;fill:#e0e0e0;stroke-linecap:round;-inkscape-stroke:none;stroke:none"
|
||||
d="M 14 1 A 1 1 0 0 0 13.371094 1.2402344 L 14.492188 1.2402344 L 14.492188 3.2402344 L 14.964844 3.2402344 C 14.986782 2.835054 15 2.4231804 15 2 A 1 1 0 0 0 14 1 z M 14.492188 6.2402344 L 14.492188 6.5273438 C 14.515831 6.4319983 14.54054 6.3370158 14.5625 6.2402344 L 14.492188 6.2402344 z M 11.798828 8.1640625 C 11.440482 8.8910992 11.002975 9.5281747 10.492188 10.080078 L 10.492188 10.240234 L 10.341797 10.240234 C 10.32503 10.257323 10.309886 10.276051 10.292969 10.292969 C 8.5286743 12.057263 5.8333257 13 2 13 A 1 1 0 0 0 1 14 A 1 1 0 0 0 2 15 C 6.1666583 15 9.4713337 13.942729 11.707031 11.707031 C 12.288713 11.125349 12.788618 10.470807 13.212891 9.7480469 C 12.593 9.3794825 12.09613 8.8264434 11.798828 8.1640625 z " />
|
||||
</g>
|
||||
<path
|
||||
fill="#35d4f4"
|
||||
d="m 2.992629,1.7411957 a 3,3 0 0 0 -2.99999998,3 v 5 H 1.992629 v -2 h 2 v -2 h -2 v -1 a 1,1 0 0 1 1,-1 h 1 v -2 z m 3,0 v 5 a 3,3 0 0 0 3,3 h 1 v -2 h -1 a 1,1 0 0 1 -1,-1 v -5 z m 6,0 v 5 a 3,3 0 0 0 3,3 h 1 v -2 h -1 a 1,1 0 0 1 -1,-1 v -1 h 2 v -2 h -2 v -2 z"
|
||||
id="path1-6"
|
||||
style="display:inline" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
43
addons/forge/icons/scalable_float.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dvlaw4yolashm"
|
||||
path="res://.godot/imported/scalable_float.svg-49fb50922766865135c5bd252fe20b53.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/scalable_float.svg"
|
||||
dest_files=["res://.godot/imported/scalable_float.svg-49fb50922766865135c5bd252fe20b53.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
52
addons/forge/icons/scalable_int.svg
Normal file
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
sodipodi:docname="scalable_int.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="namedview2"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="45.254834"
|
||||
inkscape:cx="-7.0268736"
|
||||
inkscape:cy="11.501534"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" />
|
||||
<g
|
||||
fill="none"
|
||||
stroke="#e0e0e0"
|
||||
stroke-width="2"
|
||||
id="g2">
|
||||
<path
|
||||
id="path1"
|
||||
style="color:#000000;fill:#e0e0e0;fill-opacity:0.325;-inkscape-stroke:none;stroke:none"
|
||||
d="M 1 1 L 1 1.234375 L 3 1.234375 L 3 1 L 1 1 z M 1 4.234375 L 1 5.234375 L 3 5.234375 L 3 4.234375 L 1 4.234375 z M 1 10.234375 L 1 15 L 15 15 L 15 13 L 3 13 L 3 10.234375 L 1 10.234375 z " />
|
||||
<path
|
||||
id="path2"
|
||||
style="color:#000000;fill:#e0e0e0;stroke-linecap:round;-inkscape-stroke:none;stroke:none"
|
||||
d="M 14 1 A 1 1 0 0 0 13.380859 1.234375 L 14.486328 1.234375 L 14.486328 3.234375 L 14.964844 3.234375 C 14.986572 2.8310508 15 2.4211509 15 2 A 1 1 0 0 0 14 1 z M 14.486328 6.234375 L 14.486328 6.5507812 C 14.512519 6.4459127 14.538352 6.3409854 14.5625 6.234375 L 14.486328 6.234375 z M 11.796875 8.1679688 C 11.437574 8.8960511 10.998628 9.5336185 10.486328 10.085938 L 10.486328 10.234375 L 10.347656 10.234375 C 10.328977 10.253455 10.311836 10.274102 10.292969 10.292969 C 8.5286743 12.057263 5.8333257 13 2 13 A 1 1 0 0 0 1 14 A 1 1 0 0 0 2 15 C 6.1666583 15 9.4713337 13.942729 11.707031 11.707031 C 12.289106 11.124957 12.788437 10.469434 13.212891 9.7460938 C 12.593176 9.3793126 12.095636 8.8282754 11.796875 8.1679688 z " />
|
||||
</g>
|
||||
<path
|
||||
fill="#5abbef"
|
||||
d="m 0.98607698,1.7338248 v 2 H 2.986077 v -2 z m 11.00000002,0 v 5.0000001 a 3,3 0 0 0 3,3 h 1 v -2 h -1 a 1,1 0 0 1 -1,-1 v -1 h 2 V 3.7338248 h -2 v -2 z m -8,2 v 6.0000001 h 2 v -4 h 1 a 1,1 0 0 1 1,1 v 3 h 2 v -3 a 3,3 0 0 0 -3,-3.0000001 h -1 z M 0.98607698,5.7338249 v 4 H 2.986077 v -4 z"
|
||||
id="path1-8"
|
||||
style="display:inline" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
43
addons/forge/icons/scalable_int.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dnagt7tdo3dos"
|
||||
path="res://.godot/imported/scalable_int.svg-76441cc193862ebf98ed5979b17f9d4a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/scalable_int.svg"
|
||||
dest_files=["res://.godot/imported/scalable_int.svg-76441cc193862ebf98ed5979b17f9d4a.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
45
addons/forge/icons/tag.svg
Normal file
@@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg3"
|
||||
sodipodi:docname="tag.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs3" />
|
||||
<sodipodi:namedview
|
||||
id="namedview3"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="77.4375"
|
||||
inkscape:cx="8.0064568"
|
||||
inkscape:cy="8"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="3432"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g3" />
|
||||
<g
|
||||
fill="none"
|
||||
stroke="#e0e0e0"
|
||||
stroke-linejoin="round"
|
||||
stroke-miterlimit="0"
|
||||
id="g3">
|
||||
<path
|
||||
fill="#8eef97"
|
||||
d="M 5.5727153,3.5360126 A 0.89391939,0.89118867 0 0 0 4.9407147,3.797131 L 1.3650364,7.3618855 a 0.89391939,0.89118867 0 0 0 0,1.2601408 l 3.5756783,3.5647557 a 0.89391939,0.89118867 0 0 0 0.6320006,0.261117 h 7.1513567 a 0.89391939,0.89118867 0 0 0 0.893917,-0.891188 V 4.4272012 A 0.89391939,0.89118867 0 0 0 12.724072,3.5360126 Z M 4.6787954,7.1007674 a 0.89391939,0.89118867 0 0 1 0,1.7823771 0.89391939,0.89118867 0 0 1 0,-1.7823771 z"
|
||||
id="path1"
|
||||
style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:0.892552" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
43
addons/forge/icons/tag.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://vsfdeevye6jm"
|
||||
path="res://.godot/imported/tag.svg-305aafc67c809438fb029f409df5751b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/tag.svg"
|
||||
dest_files=["res://.godot/imported/tag.svg-305aafc67c809438fb029f409df5751b.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
53
addons/forge/icons/tags_container.svg
Normal file
@@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg3"
|
||||
sodipodi:docname="tags_container.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs3" />
|
||||
<sodipodi:namedview
|
||||
id="namedview3"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="77.4375"
|
||||
inkscape:cx="8.0064568"
|
||||
inkscape:cy="8"
|
||||
inkscape:window-width="3407"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="25"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g3" />
|
||||
<g
|
||||
fill="none"
|
||||
stroke="#e0e0e0"
|
||||
stroke-linejoin="round"
|
||||
stroke-miterlimit="0"
|
||||
id="g3">
|
||||
<path
|
||||
d="m2.1058 5.8844v-2.7749h2.9127m5.8565 0.0498h2.7749v2.9127"
|
||||
transform="matrix(1.1315 0 0 1.1398 -.914 -1.888)"
|
||||
id="path2" />
|
||||
<path
|
||||
d="m13.757 11.466v2.7749h-2.9127m-5.856-0.0499h-2.7749v-2.9127"
|
||||
transform="matrix(1.1315 0 0 1.1398 -1.035 -1.888)"
|
||||
id="path3" />
|
||||
<path
|
||||
fill="#8eef97"
|
||||
d="M 5.5727153,3.5360126 A 0.89391939,0.89118867 0 0 0 4.9407147,3.797131 L 1.3650364,7.3618855 a 0.89391939,0.89118867 0 0 0 0,1.2601408 l 3.5756783,3.5647557 a 0.89391939,0.89118867 0 0 0 0.6320006,0.261117 h 7.1513567 a 0.89391939,0.89118867 0 0 0 0.893917,-0.891188 V 4.4272012 A 0.89391939,0.89118867 0 0 0 12.724072,3.5360126 Z M 4.6787954,7.1007674 a 0.89391939,0.89118867 0 0 1 0,1.7823771 0.89391939,0.89118867 0 0 1 0,-1.7823771 z"
|
||||
id="path1"
|
||||
style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:0.892552" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
43
addons/forge/icons/tags_container.svg.import
Normal file
@@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ddeg62ps243fn"
|
||||
path="res://.godot/imported/tags_container.svg-4859716f6791e3bae789357a5e01bb5c.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/forge/icons/tags_container.svg"
|
||||
dest_files=["res://.godot/imported/tags_container.svg-4859716f6791e3bae789357a5e01bb5c.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
81
addons/forge/nodes/EffectArea2D.cs
Normal file
@@ -0,0 +1,81 @@
|
||||
// Copyright © Gamesmiths Guild.
|
||||
|
||||
using System.Diagnostics;
|
||||
using Gamesmiths.Forge.Core;
|
||||
using Gamesmiths.Forge.Godot.Core;
|
||||
using Godot;
|
||||
|
||||
namespace Gamesmiths.Forge.Godot.Nodes;
|
||||
|
||||
[GlobalClass]
|
||||
[Icon("uid://cnjrjkgwyewjx")]
|
||||
public partial class EffectArea2D : Area2D
|
||||
{
|
||||
private EffectApplier? _effectApplier;
|
||||
|
||||
[Export]
|
||||
public Node? EffectOwner { get; set; }
|
||||
|
||||
[Export]
|
||||
public Node? EffectSource { get; set; }
|
||||
|
||||
[Export]
|
||||
public int EffectLevel { get; set; } = 1;
|
||||
|
||||
[Export]
|
||||
public EffectTriggerMode TriggerMode { get; set; }
|
||||
|
||||
private IForgeEntity? OwnerEntity => EffectOwner as IForgeEntity;
|
||||
|
||||
private IForgeEntity? SourceEntity => EffectSource as IForgeEntity;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
if (EffectOwner is not null && EffectOwner is not IForgeEntity)
|
||||
{
|
||||
GD.PushError($"{nameof(EffectOwner)} must implement {nameof(IForgeEntity)}.");
|
||||
}
|
||||
|
||||
base._Ready();
|
||||
|
||||
_effectApplier = new EffectApplier(this);
|
||||
|
||||
switch (TriggerMode)
|
||||
{
|
||||
case EffectTriggerMode.OnEnter:
|
||||
BodyEntered += ApplyEffects;
|
||||
AreaEntered += ApplyEffects;
|
||||
break;
|
||||
|
||||
case EffectTriggerMode.OnExit:
|
||||
BodyExited += ApplyEffects;
|
||||
AreaExited += ApplyEffects;
|
||||
break;
|
||||
|
||||
case EffectTriggerMode.OnStay:
|
||||
BodyEntered += AddEffects;
|
||||
AreaEntered += AddEffects;
|
||||
BodyExited += RemoveEffects;
|
||||
AreaExited += RemoveEffects;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplyEffects(Node2D node)
|
||||
{
|
||||
Debug.Assert(_effectApplier is not null, $"{_effectApplier} should have been initialized on _Ready().");
|
||||
_effectApplier.ApplyEffects(node, OwnerEntity, SourceEntity, EffectLevel);
|
||||
}
|
||||
|
||||
private void AddEffects(Node2D node)
|
||||
{
|
||||
Debug.Assert(_effectApplier is not null, $"{_effectApplier} should have been initialized on _Ready().");
|
||||
_effectApplier.AddEffects(node, OwnerEntity, SourceEntity, EffectLevel);
|
||||
}
|
||||
|
||||
private void RemoveEffects(Node2D node)
|
||||
{
|
||||
Debug.Assert(_effectApplier is not null, $"{_effectApplier} should have been initialized on _Ready().");
|
||||
_effectApplier.RemoveEffects(node);
|
||||
}
|
||||
}
|
||||
1
addons/forge/nodes/EffectArea2D.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bc8wkfv6rdpu1
|
||||