Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 68e36742af | |||
| 33f55d04f3 | |||
| a139990390 | |||
| b2b7baffe8 | |||
| bed1384dc7 | |||
| 99f383be00 | |||
| 631935fdc8 | |||
| 852f265b9f | |||
| 0e6211943d | |||
| fb30a08b89 | |||
| 24f057c15f | |||
| ec44306d48 | |||
| dcfd937e53 | |||
| cd7a230615 | |||
| 319cbf722e | |||
| bb21920488 | |||
| cd2b41b443 | |||
| d025618eb3 | |||
| 26f6a619cb | |||
| ce48f3b9d7 | |||
| 54796252ce | |||
| 054115aa89 | |||
| f5e47e9f5e | |||
| 99ed6375a2 | |||
| 6888499b78 | |||
| 2a98137653 | |||
| b0fe2549ea | |||
| 667d6b2588 | |||
| f9ca56e34a | |||
| 5a59d50be5 | |||
| 9464fc7caa | |||
| 9e57641a75 | |||
| bb2b2ace06 |
@@ -41,8 +41,8 @@ jobs:
|
|||||||
|
|
||||||
# Test:
|
# Test:
|
||||||
# runs-on: godot
|
# runs-on: godot
|
||||||
## env:
|
# env:
|
||||||
## RUNNER_TOOL_CACHE: /toolcache # Runner Tool Cache
|
# RUNNER_TOOL_CACHE: /toolcache # Runner Tool Cache
|
||||||
# steps:
|
# steps:
|
||||||
# - name: Checkout with LFS
|
# - name: Checkout with LFS
|
||||||
# uses: https://git.game-dev.space/minimata/checkout-with-lfs.git@main
|
# uses: https://git.game-dev.space/minimata/checkout-with-lfs.git@main
|
||||||
@@ -54,6 +54,14 @@ jobs:
|
|||||||
# godot-version: ${GODOT_VERSION}
|
# godot-version: ${GODOT_VERSION}
|
||||||
# dotnet-version: ${DOTNET_VERSION}
|
# dotnet-version: ${DOTNET_VERSION}
|
||||||
#
|
#
|
||||||
|
# - name: 🔬 Verify Setup
|
||||||
|
# run: |
|
||||||
|
# dotnet --version
|
||||||
|
# ${{ steps.setup-godot.outputs.godot_bin }} --version
|
||||||
|
#
|
||||||
|
# - name: 🧑🔬 Generate .NET Bindings
|
||||||
|
# run: ${{ steps.setup-godot.outputs.godot_bin }} --headless --build-solutions --quit || exit 0
|
||||||
|
#
|
||||||
# - name: Run C# Tests
|
# - name: Run C# Tests
|
||||||
# env:
|
# env:
|
||||||
# GODOT_BIN: ${{ steps.setup-godot.outputs.godot_bin }}
|
# GODOT_BIN: ${{ steps.setup-godot.outputs.godot_bin }}
|
||||||
@@ -61,24 +69,80 @@ jobs:
|
|||||||
# run: |
|
# run: |
|
||||||
# dotnet test --no-build --settings .runsettings --results-directory ./reports --logger "console;verbosity=normal" --logger "trx;LogFileName=results.xml" -- GdUnit4.Parameters="--verbose --headless --import"
|
# dotnet test --no-build --settings .runsettings --results-directory ./reports --logger "console;verbosity=normal" --logger "trx;LogFileName=results.xml" -- GdUnit4.Parameters="--verbose --headless --import"
|
||||||
#
|
#
|
||||||
## - name: Run tests
|
# # - name: Run tests
|
||||||
## uses: godot-gdunit-labs/gdUnit4-action@v1
|
# # uses: godot-gdunit-labs/gdUnit4-action@v1
|
||||||
## with:
|
# # with:
|
||||||
## godot-version: ${GODOT_VERSION}
|
# # godot-version: ${GODOT_VERSION}
|
||||||
## godot-net: true
|
# # godot-net: true
|
||||||
## godot-force-mono: true
|
# # godot-force-mono: true
|
||||||
## dotnet-version: ${DOTNET_VERSION}
|
# # dotnet-version: ${DOTNET_VERSION}
|
||||||
## paths: |
|
# # paths: |
|
||||||
## res://tests/
|
# # res://tests/
|
||||||
## publish-report: false
|
# # publish-report: false
|
||||||
## upload-report: false
|
# # upload-report: false
|
||||||
## console-verbosity: 'normal'
|
# # console-verbosity: 'normal'
|
||||||
## arguments: "--verbose --headless --import"
|
# # arguments: "--verbose --headless --import"
|
||||||
#
|
#
|
||||||
# - name: Upload test report
|
# - name: Upload test report
|
||||||
# uses: actions/upload-artifact@v3-node20
|
# uses: actions/upload-artifact@v3-node20
|
||||||
# with:
|
# with:
|
||||||
# name: Test Report
|
# name: Test Report
|
||||||
|
# path: ${{ github.workspace }}/reports/test-result.html
|
||||||
|
#
|
||||||
|
# OtherTest:
|
||||||
|
# runs-on: godot
|
||||||
|
# env:
|
||||||
|
# RUNNER_TOOL_CACHE: /toolcache # Runner Tool Cache
|
||||||
|
# steps:
|
||||||
|
# - name: Checkout with LFS
|
||||||
|
# uses: https://git.game-dev.space/minimata/checkout-with-lfs.git@main
|
||||||
|
#
|
||||||
|
# - uses: actions/setup-dotnet@v5
|
||||||
|
# name: 💽 Setup .NET SDK
|
||||||
|
# with:
|
||||||
|
# dotnet-version: '9.0.x'
|
||||||
|
#
|
||||||
|
# - name: 📦 Restore Dependencies
|
||||||
|
# run: |
|
||||||
|
# dotnet --version
|
||||||
|
# dotnet restore
|
||||||
|
# dotnet build
|
||||||
|
# dotnet list package
|
||||||
|
#
|
||||||
|
# - uses: chickensoft-games/setup-godot@v2
|
||||||
|
# name: 🤖 Setup Godot
|
||||||
|
# with:
|
||||||
|
# # Version must include major, minor, and patch, and be >= 4.0.0
|
||||||
|
# # Pre-release label is optional.
|
||||||
|
# version: '4.6.2'
|
||||||
|
# # Use .NET-enabled version of Godot (the default is also true).
|
||||||
|
# use-dotnet: true
|
||||||
|
# # Include the Godot Export Templates (the default is false).
|
||||||
|
# include-templates: true
|
||||||
|
#
|
||||||
|
# - name: 🔬 Verify Setup
|
||||||
|
# run: |
|
||||||
|
# dotnet --version
|
||||||
|
# godot --version
|
||||||
|
#
|
||||||
|
# - name: 🧑🔬 Generate .NET Bindings
|
||||||
|
# run: godot --headless --build-solutions --import --quit || exit 0
|
||||||
|
#
|
||||||
|
# - name: 🦺 Build Projects
|
||||||
|
# run: dotnet build --configuration ExportRelease
|
||||||
|
#
|
||||||
|
# - name: Run C# Tests
|
||||||
|
# env:
|
||||||
|
# GODOT_BIN: /root/bin/godot
|
||||||
|
# shell: bash
|
||||||
|
# run: |
|
||||||
|
# dotnet test --no-build --settings .runsettings --results-directory ./reports --logger "console;verbosity=normal" --logger "trx;LogFileName=results.xml" -- GdUnit4.Parameters="--headless --import --quit"
|
||||||
|
#
|
||||||
|
# - name: Upload test report
|
||||||
|
# uses: actions/upload-artifact@v3-node20
|
||||||
|
# if: always()
|
||||||
|
# with:
|
||||||
|
# name: Test Report
|
||||||
# path: ${{ github.workspace }}/reports/test-result.html
|
# path: ${{ github.workspace }}/reports/test-result.html
|
||||||
|
|
||||||
Export:
|
Export:
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
/builds
|
/builds
|
||||||
/communication
|
/communication
|
||||||
|
/reports
|
||||||
|
|
||||||
# Imported translations (automatically generated from CSV files)
|
# Imported translations (automatically generated from CSV files)
|
||||||
*.translation
|
*.translation
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<MaxCpuCount>1</MaxCpuCount>
|
<MaxCpuCount>1</MaxCpuCount>
|
||||||
<ResultsDirectory>./TestResults</ResultsDirectory>
|
<ResultsDirectory>./TestResults</ResultsDirectory>
|
||||||
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
|
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
|
||||||
<TestSessionTimeout>180000</TestSessionTimeout>
|
<TestSessionTimeout>60000</TestSessionTimeout>
|
||||||
<TreatNoTestsAsError>true</TreatNoTestsAsError>
|
<TreatNoTestsAsError>true</TreatNoTestsAsError>
|
||||||
</RunConfiguration>
|
</RunConfiguration>
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
<GdUnit4>
|
<GdUnit4>
|
||||||
<!-- Additional Godot runtime parameters. These are passed to the Godot executable when running tests.-->
|
<!-- Additional Godot runtime parameters. These are passed to the Godot executable when running tests.-->
|
||||||
<Parameters>"--verbose"</Parameters>
|
<Parameters>"--verbose --headless --import --quit"</Parameters>
|
||||||
|
|
||||||
<!-- Controls the display name format of test cases in the test results.
|
<!-- Controls the display name format of test cases in the test results.
|
||||||
Allowed values:
|
Allowed values:
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
<TargetFramework>net9.0</TargetFramework>
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
<EnableDynamicLoading>true</EnableDynamicLoading>
|
<EnableDynamicLoading>true</EnableDynamicLoading>
|
||||||
<RootNamespace>Movementtests</RootNamespace>
|
<RootNamespace>Movementtests</RootNamespace>
|
||||||
|
<!-- Catch compiler-mismatch issues with the Introspection generator -->
|
||||||
|
<WarningsAsErrors>CS9057</WarningsAsErrors>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include=".runsettings" />
|
<Content Include=".runsettings" />
|
||||||
@@ -126,11 +128,18 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="addons\" />
|
<Folder Include="addons\" />
|
||||||
<Folder Include="tests\" />
|
<Folder Include="tests\" />
|
||||||
<Folder Include="tools\" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Chickensoft.Sync" Version="2.3.0" />
|
||||||
<PackageReference Include="RustyOptions" Version="0.10.1" />
|
<PackageReference Include="RustyOptions" Version="0.10.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Chickensoft.GodotNodeInterfaces" Version="3.0.12" />
|
||||||
|
<PackageReference Include="Chickensoft.Introspection" Version="3.0.2" />
|
||||||
|
<PackageReference Include="Chickensoft.Introspection.Generator" Version="3.0.2" PrivateAssets="all" OutputItemType="analyzer" />
|
||||||
|
<PackageReference Include="Chickensoft.AutoInject" Version="2.12.8" PrivateAssets="all" />
|
||||||
|
<PackageReference Include="Chickensoft.AutoInject.Analyzers" Version="2.12.8" PrivateAssets="all" OutputItemType="analyzer" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="addons/forge/Forge.props" />
|
<Import Project="addons/forge/Forge.props" />
|
||||||
|
|
||||||
<!-- gdUnit4 package dependencies -->
|
<!-- gdUnit4 package dependencies -->
|
||||||
|
|||||||
@@ -13,22 +13,28 @@ public partial class CueHandlerInspectorPlugin : EditorInspectorPlugin
|
|||||||
public override bool _CanHandle(GodotObject @object)
|
public override bool _CanHandle(GodotObject @object)
|
||||||
{
|
{
|
||||||
// Find out if its an implementation of CueHandler without having to add [Tool] attribute to them.
|
// Find out if its an implementation of CueHandler without having to add [Tool] attribute to them.
|
||||||
if (@object?.GetScript().As<CSharpScript>() is CSharpScript script)
|
try
|
||||||
{
|
{
|
||||||
StringName className = script.GetGlobalName();
|
if (@object?.GetScript().As<CSharpScript>() is null)
|
||||||
|
return false;
|
||||||
Type baseType = typeof(ForgeCueHandler);
|
}
|
||||||
System.Reflection.Assembly assembly = baseType.Assembly;
|
catch (Exception e)
|
||||||
|
{
|
||||||
Type? implementationType =
|
return false;
|
||||||
Array.Find(assembly.GetTypes(), x =>
|
|
||||||
x.Name == className &&
|
|
||||||
baseType.IsAssignableFrom(x));
|
|
||||||
|
|
||||||
return implementationType is not null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
var script = @object?.GetScript().As<CSharpScript>();
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool _ParseProperty(
|
public override bool _ParseProperty(
|
||||||
|
|||||||
@@ -10,5 +10,9 @@ namespace Gamesmiths.Forge.Godot.Resources.Abilities;
|
|||||||
[Icon("uid://bcx7anhepqfmd")]
|
[Icon("uid://bcx7anhepqfmd")]
|
||||||
public abstract partial class ForgeAbilityBehavior : Resource
|
public abstract partial class ForgeAbilityBehavior : Resource
|
||||||
{
|
{
|
||||||
|
[Export] public string? Name { get; set; }
|
||||||
|
[Export] public string? Description { get; set; }
|
||||||
|
[Export] public Texture2D? Icon { get; set; }
|
||||||
|
|
||||||
public abstract IAbilityBehavior GetBehavior();
|
public abstract IAbilityBehavior GetBehavior();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,8 +41,8 @@ func _input(event : InputEvent) -> void:
|
|||||||
if event.is_action_released("ui_cancel"):
|
if event.is_action_released("ui_cancel"):
|
||||||
if sub_menu:
|
if sub_menu:
|
||||||
_close_sub_menu()
|
_close_sub_menu()
|
||||||
else:
|
# else:
|
||||||
get_tree().quit()
|
# get_tree().quit()
|
||||||
if event.is_action_released("ui_accept") and get_viewport().gui_get_focus_owner() == null:
|
if event.is_action_released("ui_accept") and get_viewport().gui_get_focus_owner() == null:
|
||||||
%MenuButtonsBoxContainer.focus_first()
|
%MenuButtonsBoxContainer.focus_first()
|
||||||
|
|
||||||
|
|||||||
@@ -2,5 +2,4 @@
|
|||||||
|
|
||||||
[node name="BackgroundMusicPlayer" type="AudioStreamPlayer" unique_id=676077136]
|
[node name="BackgroundMusicPlayer" type="AudioStreamPlayer" unique_id=676077136]
|
||||||
process_mode = 3
|
process_mode = 3
|
||||||
autoplay = true
|
|
||||||
bus = &"Music"
|
bus = &"Music"
|
||||||
|
|||||||
@@ -24,18 +24,29 @@ var _initial_focus_control
|
|||||||
var _scene_tree : SceneTree
|
var _scene_tree : SceneTree
|
||||||
|
|
||||||
func _exit_tree() -> void:
|
func _exit_tree() -> void:
|
||||||
|
if Engine.is_editor_hint(): return
|
||||||
|
|
||||||
GUIDE.disable_mapping_context(menu_context)
|
GUIDE.disable_mapping_context(menu_context)
|
||||||
for previous_context in previous_mapping_contexts:
|
for previous_context in previous_mapping_contexts:
|
||||||
GUIDE.enable_mapping_context(previous_context)
|
GUIDE.enable_mapping_context(previous_context)
|
||||||
|
|
||||||
func close() -> void:
|
func close() -> void:
|
||||||
menu_closing.emit()
|
menu_closing.emit()
|
||||||
|
hide()
|
||||||
|
queue_free()
|
||||||
|
|
||||||
|
func hide_menu() -> void:
|
||||||
_scene_tree.paused = _initial_pause_state
|
_scene_tree.paused = _initial_pause_state
|
||||||
Input.set_mouse_mode(_initial_mouse_mode)
|
Input.set_mouse_mode(_initial_mouse_mode)
|
||||||
if is_instance_valid(_initial_focus_control) and _initial_focus_control.is_inside_tree():
|
if is_instance_valid(_initial_focus_control) and _initial_focus_control.is_inside_tree():
|
||||||
_initial_focus_control.focus_mode = _initial_focus_mode
|
_initial_focus_control.focus_mode = _initial_focus_mode
|
||||||
_initial_focus_control.grab_focus()
|
_initial_focus_control.grab_focus()
|
||||||
queue_free()
|
|
||||||
|
GUIDE.disable_mapping_context(menu_context)
|
||||||
|
for previous_context in previous_mapping_contexts:
|
||||||
|
GUIDE.enable_mapping_context(previous_context)
|
||||||
|
|
||||||
|
visible = false
|
||||||
|
|
||||||
func _handle_cancel_input() -> void:
|
func _handle_cancel_input() -> void:
|
||||||
close()
|
close()
|
||||||
@@ -43,7 +54,7 @@ func _handle_cancel_input() -> void:
|
|||||||
func _on_close_button_pressed() -> void:
|
func _on_close_button_pressed() -> void:
|
||||||
close()
|
close()
|
||||||
|
|
||||||
func _enter_tree() -> void:
|
func show_menu() -> void:
|
||||||
_scene_tree = get_tree()
|
_scene_tree = get_tree()
|
||||||
_initial_pause_state = _scene_tree.paused
|
_initial_pause_state = _scene_tree.paused
|
||||||
_initial_mouse_mode = Input.get_mouse_mode()
|
_initial_mouse_mode = Input.get_mouse_mode()
|
||||||
@@ -59,5 +70,11 @@ func _enter_tree() -> void:
|
|||||||
for previous_context in previous_mapping_contexts:
|
for previous_context in previous_mapping_contexts:
|
||||||
GUIDE.disable_mapping_context(previous_context)
|
GUIDE.disable_mapping_context(previous_context)
|
||||||
GUIDE.enable_mapping_context(menu_context)
|
GUIDE.enable_mapping_context(menu_context)
|
||||||
|
|
||||||
|
visible = true
|
||||||
|
|
||||||
|
func _enter_tree() -> void:
|
||||||
|
print("enter_tree")
|
||||||
|
show_menu()
|
||||||
back_action.triggered.connect(_handle_cancel_input)
|
back_action.triggered.connect(_handle_cancel_input)
|
||||||
|
|
||||||
|
|||||||
72
forge/ForgeEntityNode.cs
Normal file
72
forge/ForgeEntityNode.cs
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
// Copyright © Gamesmiths Guild.
|
||||||
|
|
||||||
|
using Chickensoft.AutoInject;
|
||||||
|
using Chickensoft.Introspection;
|
||||||
|
using Gamesmiths.Forge.Core;
|
||||||
|
using Gamesmiths.Forge.Cues;
|
||||||
|
using Gamesmiths.Forge.Effects;
|
||||||
|
using Gamesmiths.Forge.Events;
|
||||||
|
using Gamesmiths.Forge.Godot.Core;
|
||||||
|
using Gamesmiths.Forge.Godot.Resources;
|
||||||
|
using Gamesmiths.Forge.Statescript;
|
||||||
|
using Gamesmiths.Forge.Tags;
|
||||||
|
using Godot;
|
||||||
|
|
||||||
|
namespace Movementtests.tools;
|
||||||
|
|
||||||
|
[GlobalClass]
|
||||||
|
[Icon("uid://cu6ncpuumjo20")]
|
||||||
|
[Meta(typeof(IAutoNode))]
|
||||||
|
public partial class ForgeEntityNode : Node3D, IForgeEntity
|
||||||
|
{
|
||||||
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
|
[Dependency]
|
||||||
|
public TagsManager TagsManager => this.DependOn(() => ForgeManagers.Instance.TagsManager);
|
||||||
|
[Dependency]
|
||||||
|
public CuesManager CuesManager => this.DependOn(() => ForgeManagers.Instance.CuesManager);
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public ForgeTagContainer? BaseTags { get; set; }
|
||||||
|
[Export]
|
||||||
|
public ForgeSharedVariableSet? SharedVariableDefinitions { get; set; }
|
||||||
|
|
||||||
|
public required EntityAttributes Attributes { get; set; }
|
||||||
|
|
||||||
|
public required EntityTags Tags { get; set; }
|
||||||
|
|
||||||
|
public required EffectsManager EffectsManager { get; set; }
|
||||||
|
|
||||||
|
public required EntityAbilities Abilities { get; set; }
|
||||||
|
|
||||||
|
public required EventManager Events { get; set; }
|
||||||
|
|
||||||
|
public required Variables SharedVariables { get; set; }
|
||||||
|
|
||||||
|
public void OnReady()
|
||||||
|
{
|
||||||
|
BaseTags ??= new ForgeTagContainer();
|
||||||
|
Tags = new EntityTags(BaseTags.GetTagContainer());
|
||||||
|
Attributes = new EntityAttributes([.. ForgeUtils.CollectAttributeList(this)]);
|
||||||
|
Abilities = new EntityAbilities(this);
|
||||||
|
Events = new EventManager();
|
||||||
|
|
||||||
|
SharedVariables = new Variables();
|
||||||
|
SharedVariableDefinitions?.PopulateVariables(SharedVariables);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnResolved()
|
||||||
|
{
|
||||||
|
EffectsManager = new EffectsManager(this, CuesManager);
|
||||||
|
var effectApplier = new EffectApplier(this);
|
||||||
|
effectApplier.ApplyEffects(this, this, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void _Process(double delta)
|
||||||
|
{
|
||||||
|
base._Process(delta);
|
||||||
|
|
||||||
|
EffectsManager.UpdateEffects(delta);
|
||||||
|
Abilities.UpdateAbilities(delta);
|
||||||
|
}
|
||||||
|
}
|
||||||
1
forge/ForgeEntityNode.cs.uid
Normal file
1
forge/ForgeEntityNode.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://rpcbb54q4atx
|
||||||
@@ -13,8 +13,7 @@ public class EffectApplicationBehavior(EffectData effectData) : IAbilityBehavior
|
|||||||
private Effect? _effect;
|
private Effect? _effect;
|
||||||
private ActiveEffectHandle? _effectHandle;
|
private ActiveEffectHandle? _effectHandle;
|
||||||
public void OnStarted(AbilityBehaviorContext context)
|
public void OnStarted(AbilityBehaviorContext context)
|
||||||
{
|
{
|
||||||
GD.Print("This is applying the periodic effect to the flying weapon");
|
|
||||||
_effect = new Effect(effectData, new EffectOwnership(context.Owner, context.Owner));
|
_effect = new Effect(effectData, new EffectOwnership(context.Owner, context.Owner));
|
||||||
_effectHandle = context.Owner.EffectsManager.ApplyEffect(_effect);
|
_effectHandle = context.Owner.EffectsManager.ApplyEffect(_effect);
|
||||||
context.AbilityHandle.CommitAbility();
|
context.AbilityHandle.CommitAbility();
|
||||||
@@ -22,7 +21,6 @@ public class EffectApplicationBehavior(EffectData effectData) : IAbilityBehavior
|
|||||||
|
|
||||||
public void OnEnded(AbilityBehaviorContext context)
|
public void OnEnded(AbilityBehaviorContext context)
|
||||||
{
|
{
|
||||||
GD.Print("This is removing the periodic effect from the flying weapon");
|
|
||||||
if (_effectHandle is not null)
|
if (_effectHandle is not null)
|
||||||
context.Owner.EffectsManager.RemoveEffect(_effectHandle);
|
context.Owner.EffectsManager.RemoveEffect(_effectHandle);
|
||||||
context.InstanceHandle.End();
|
context.InstanceHandle.End();
|
||||||
|
|||||||
@@ -6,12 +6,13 @@ using Godot;
|
|||||||
|
|
||||||
namespace Movementtests.forge.abilities;
|
namespace Movementtests.forge.abilities;
|
||||||
|
|
||||||
public class ExplodingSwordBehavior(PackedScene explosion) : IAbilityBehavior
|
public class ExplodingSwordBehavior(PackedScene explosion, float radius) : IAbilityBehavior
|
||||||
{
|
{
|
||||||
public void OnStarted(AbilityBehaviorContext context)
|
public void OnStarted(AbilityBehaviorContext context)
|
||||||
{
|
{
|
||||||
if (context.Owner is not Node3D owner)
|
if (context.Owner is not Node3D owner)
|
||||||
{
|
{
|
||||||
|
GD.Print("Owner isn't a Node3D");
|
||||||
context.InstanceHandle.End();
|
context.InstanceHandle.End();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -28,12 +29,9 @@ public class ExplodingSwordBehavior(PackedScene explosion) : IAbilityBehavior
|
|||||||
context.InstanceHandle.End();
|
context.InstanceHandle.End();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
explo.Radius = radius;
|
||||||
|
|
||||||
GD.Print("EXPLOSION");
|
owner.GetTree().GetCurrentScene().CallDeferred(Node.MethodName.AddChild, explo);
|
||||||
|
|
||||||
explo.Radius = 6f;
|
|
||||||
|
|
||||||
owner.GetTree().GetRoot().CallDeferred(Node.MethodName.AddChild, explo);
|
|
||||||
explo.CallDeferred(Node3D.MethodName.SetGlobalPosition, owner.GlobalPosition);
|
explo.CallDeferred(Node3D.MethodName.SetGlobalPosition, owner.GlobalPosition);
|
||||||
|
|
||||||
context.AbilityHandle.CommitAbility();
|
context.AbilityHandle.CommitAbility();
|
||||||
@@ -50,8 +48,9 @@ public class ExplodingSwordBehavior(PackedScene explosion) : IAbilityBehavior
|
|||||||
public partial class ForgeExplodingSwordBehavior : ForgeAbilityBehavior
|
public partial class ForgeExplodingSwordBehavior : ForgeAbilityBehavior
|
||||||
{
|
{
|
||||||
[Export] public PackedScene Explosion { get; set; }
|
[Export] public PackedScene Explosion { get; set; }
|
||||||
|
[Export] public float Radius { get; set; } = 5f;
|
||||||
public override IAbilityBehavior GetBehavior()
|
public override IAbilityBehavior GetBehavior()
|
||||||
{
|
{
|
||||||
return new ExplodingSwordBehavior(Explosion);
|
return new ExplodingSwordBehavior(Explosion, Radius);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,13 +1,20 @@
|
|||||||
using Gamesmiths.Forge.Abilities;
|
using Gamesmiths.Forge.Abilities;
|
||||||
|
using Gamesmiths.Forge.Effects;
|
||||||
|
using Gamesmiths.Forge.Godot.Resources;
|
||||||
using Gamesmiths.Forge.Godot.Resources.Abilities;
|
using Gamesmiths.Forge.Godot.Resources.Abilities;
|
||||||
using Godot;
|
using Godot;
|
||||||
|
|
||||||
namespace Movementtests.forge.abilities;
|
namespace Movementtests.forge.abilities;
|
||||||
|
|
||||||
public class InstantEndBehavior : IAbilityBehavior
|
public class InstantEndBehavior(ForgeEffectData? effectData) : IAbilityBehavior
|
||||||
{
|
{
|
||||||
public void OnStarted(AbilityBehaviorContext context)
|
public void OnStarted(AbilityBehaviorContext context)
|
||||||
{
|
{
|
||||||
|
if (effectData != null)
|
||||||
|
{
|
||||||
|
var effect = new Effect(effectData.GetEffectData(), new EffectOwnership(context.Owner, context.Owner));
|
||||||
|
context.Owner.EffectsManager.ApplyEffect(effect);
|
||||||
|
}
|
||||||
context.AbilityHandle.CommitAbility();
|
context.AbilityHandle.CommitAbility();
|
||||||
context.InstanceHandle.End();
|
context.InstanceHandle.End();
|
||||||
}
|
}
|
||||||
@@ -19,5 +26,6 @@ public class InstantEndBehavior : IAbilityBehavior
|
|||||||
[GlobalClass]
|
[GlobalClass]
|
||||||
public partial class ForgeInstantEndBehavior : ForgeAbilityBehavior
|
public partial class ForgeInstantEndBehavior : ForgeAbilityBehavior
|
||||||
{
|
{
|
||||||
public override IAbilityBehavior GetBehavior() => new InstantEndBehavior();
|
[Export] public ForgeEffectData? OptionalEffectData { get; set; }
|
||||||
|
public override IAbilityBehavior GetBehavior() => new InstantEndBehavior(OptionalEffectData);
|
||||||
}
|
}
|
||||||
39
forge/abilities/ForgeSimpleHitBehavior.cs
Normal file
39
forge/abilities/ForgeSimpleHitBehavior.cs
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
using Gamesmiths.Forge.Abilities;
|
||||||
|
using Gamesmiths.Forge.Effects;
|
||||||
|
using Gamesmiths.Forge.Godot.Resources;
|
||||||
|
using Gamesmiths.Forge.Godot.Resources.Abilities;
|
||||||
|
using Godot;
|
||||||
|
|
||||||
|
namespace Movementtests.forge.abilities;
|
||||||
|
|
||||||
|
public record SimpleHitEffectData(Vector3 SourceLocation, Vector3 TargetLocation, float Magnitude = 1);
|
||||||
|
|
||||||
|
public class SimpleHitBehavior(ForgeEffectData? damage) : IAbilityBehavior
|
||||||
|
{
|
||||||
|
public void OnStarted(AbilityBehaviorContext context)
|
||||||
|
{
|
||||||
|
if (context.Target == null || damage == null) return;
|
||||||
|
|
||||||
|
var sourceLocation = (context.Source as Node3D)?.GlobalPosition ?? Vector3.Zero;
|
||||||
|
var targetLocation = (context.Target as Node3D)?.GlobalPosition ?? Vector3.Zero;
|
||||||
|
|
||||||
|
var magnitude = context.Magnitude == 0 ? 1 : context.Magnitude;
|
||||||
|
var effect = new Effect(damage.GetEffectData(), new EffectOwnership(context.Owner, context.Owner));
|
||||||
|
context.Target.EffectsManager.ApplyEffect(effect, new SimpleHitEffectData(sourceLocation, targetLocation, magnitude));
|
||||||
|
|
||||||
|
// context.InstanceHandle.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnEnded(AbilityBehaviorContext context)
|
||||||
|
{
|
||||||
|
context.AbilityHandle.CommitAbility();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Tool]
|
||||||
|
[GlobalClass]
|
||||||
|
public partial class ForgeSimpleHitBehavior : ForgeAbilityBehavior
|
||||||
|
{
|
||||||
|
[Export] public ForgeEffectData? DamageEffect { get; set; }
|
||||||
|
public override IAbilityBehavior GetBehavior() => new SimpleHitBehavior(DamageEffect);
|
||||||
|
}
|
||||||
1
forge/abilities/ForgeSimpleHitBehavior.cs.uid
Normal file
1
forge/abilities/ForgeSimpleHitBehavior.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://n6efm5o4uxvr
|
||||||
13
forge/attribute_sets/CharacterAttributeSet.cs
Normal file
13
forge/attribute_sets/CharacterAttributeSet.cs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
using Gamesmiths.Forge.Attributes;
|
||||||
|
|
||||||
|
namespace Movementtests.forge.attribute_sets;
|
||||||
|
|
||||||
|
public class CharacterAttributeSet : AttributeSet
|
||||||
|
{
|
||||||
|
public EntityAttribute Health { get; }
|
||||||
|
|
||||||
|
public CharacterAttributeSet()
|
||||||
|
{
|
||||||
|
Health = InitializeAttribute(nameof(Health), 100, 0, 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
1
forge/attribute_sets/CharacterAttributeSet.cs.uid
Normal file
1
forge/attribute_sets/CharacterAttributeSet.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://cikbxmilitd1m
|
||||||
@@ -1,15 +1,14 @@
|
|||||||
using Gamesmiths.Forge.Attributes;
|
using Gamesmiths.Forge.Attributes;
|
||||||
|
|
||||||
namespace Movementtests.scenes.enemies;
|
namespace Movementtests.scenes.enemies;
|
||||||
|
|
||||||
public class EnemyAttributeSet : AttributeSet
|
public class EnemyAttributeSet : AttributeSet
|
||||||
{
|
{
|
||||||
public EntityAttribute Health { get; }
|
|
||||||
public EntityAttribute Strength { get; }
|
public EntityAttribute Strength { get; }
|
||||||
public EntityAttribute Speed { get; }
|
public EntityAttribute Speed { get; }
|
||||||
|
|
||||||
public EnemyAttributeSet()
|
public EnemyAttributeSet()
|
||||||
{
|
{
|
||||||
Health = InitializeAttribute(nameof(Health), 100, 0, 150);
|
|
||||||
Strength = InitializeAttribute(nameof(Strength), 10, 0, 99);
|
Strength = InitializeAttribute(nameof(Strength), 10, 0, 99);
|
||||||
Speed = InitializeAttribute(nameof(Speed), 5, 0, 10);
|
Speed = InitializeAttribute(nameof(Speed), 5, 0, 10);
|
||||||
}
|
}
|
||||||
|
|||||||
14
forge/attribute_sets/MetaAttributeSet.cs
Normal file
14
forge/attribute_sets/MetaAttributeSet.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using Gamesmiths.Forge.Attributes;
|
||||||
|
namespace Movementtests.scenes.enemies;
|
||||||
|
|
||||||
|
public class MetaAttributeSet : AttributeSet
|
||||||
|
{
|
||||||
|
public EntityAttribute IncomingDamage { get; private set; }
|
||||||
|
public EntityAttribute Level { get; private set; }
|
||||||
|
|
||||||
|
public MetaAttributeSet()
|
||||||
|
{
|
||||||
|
IncomingDamage = InitializeAttribute(nameof(IncomingDamage), 0, 0, 1000, channels: 4);
|
||||||
|
Level = InitializeAttribute(nameof(Level), 1, 1, 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
1
forge/attribute_sets/MetaAttributeSet.cs.uid
Normal file
1
forge/attribute_sets/MetaAttributeSet.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://d36s5oiy8ls0d
|
||||||
@@ -4,16 +4,10 @@ namespace Movementtests.scenes.player_controller.scripts;
|
|||||||
|
|
||||||
public class PlayerAttributeSet : AttributeSet
|
public class PlayerAttributeSet : AttributeSet
|
||||||
{
|
{
|
||||||
public EntityAttribute Health { get; }
|
|
||||||
public EntityAttribute Mana { get; }
|
public EntityAttribute Mana { get; }
|
||||||
public EntityAttribute Strength { get; }
|
|
||||||
public EntityAttribute Speed { get; }
|
|
||||||
|
|
||||||
public PlayerAttributeSet()
|
public PlayerAttributeSet()
|
||||||
{
|
{
|
||||||
Health = InitializeAttribute(nameof(Health), 100, 0, 150);
|
|
||||||
Mana = InitializeAttribute(nameof(Mana), 100, 0, 100);
|
Mana = InitializeAttribute(nameof(Mana), 100, 0, 100);
|
||||||
Strength = InitializeAttribute(nameof(Strength), 10, 0, 99);
|
|
||||||
Speed = InitializeAttribute(nameof(Speed), 5, 0, 10);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
9
forge/calculators/DamageType.cs
Normal file
9
forge/calculators/DamageType.cs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
namespace Movementtests.tools.calculators;
|
||||||
|
|
||||||
|
public enum DamageType
|
||||||
|
{
|
||||||
|
Physical = 0,
|
||||||
|
Magical = 1,
|
||||||
|
Elemental = 2,
|
||||||
|
Explosive = 3,
|
||||||
|
}
|
||||||
1
forge/calculators/DamageType.cs.uid
Normal file
1
forge/calculators/DamageType.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://bne5gra0fmvsr
|
||||||
135
forge/calculators/ForgeDamageExecution.cs
Normal file
135
forge/calculators/ForgeDamageExecution.cs
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Gamesmiths.Forge.Attributes;
|
||||||
|
using Gamesmiths.Forge.Core;
|
||||||
|
using Gamesmiths.Forge.Effects;
|
||||||
|
using Gamesmiths.Forge.Effects.Calculator;
|
||||||
|
using Gamesmiths.Forge.Effects.Magnitudes;
|
||||||
|
using Gamesmiths.Forge.Effects.Modifiers;
|
||||||
|
using Gamesmiths.Forge.Events;
|
||||||
|
using Gamesmiths.Forge.Godot.Core;
|
||||||
|
using Gamesmiths.Forge.Godot.Resources;
|
||||||
|
using Gamesmiths.Forge.Godot.Resources.Calculators;
|
||||||
|
using Gamesmiths.Forge.Tags;
|
||||||
|
using Godot;
|
||||||
|
using Movementtests.forge.abilities;
|
||||||
|
|
||||||
|
namespace Movementtests.tools.calculators;
|
||||||
|
|
||||||
|
public record DamageDone(DamageType DamageType, float Damage, float OverkillDamage);
|
||||||
|
|
||||||
|
public class DamageExecution : CustomExecution
|
||||||
|
{
|
||||||
|
private readonly DamageType _damageType;
|
||||||
|
private readonly ForgeTagContainer? _damageDealerEventTags;
|
||||||
|
private readonly ForgeTagContainer? _damageReceiverEventTags;
|
||||||
|
|
||||||
|
// Define attributes to capture and modify
|
||||||
|
public AttributeCaptureDefinition TargetHealth { get; }
|
||||||
|
|
||||||
|
public AttributeCaptureDefinition TargetIncomingDamage { get; }
|
||||||
|
|
||||||
|
public DamageExecution(DamageType damageType, ForgeTagContainer? damageDealerEventTags, ForgeTagContainer? damageReceiverEventTags)
|
||||||
|
{
|
||||||
|
// Capture target mana and magic resistance
|
||||||
|
TargetHealth = new AttributeCaptureDefinition(
|
||||||
|
"CharacterAttributeSet.Health",
|
||||||
|
AttributeCaptureSource.Target,
|
||||||
|
false);
|
||||||
|
|
||||||
|
TargetIncomingDamage = new AttributeCaptureDefinition(
|
||||||
|
"MetaAttributeSet.IncomingDamage",
|
||||||
|
AttributeCaptureSource.Target);
|
||||||
|
|
||||||
|
// Register attributes for capture
|
||||||
|
AttributesToCapture.Add(TargetHealth);
|
||||||
|
AttributesToCapture.Add(TargetIncomingDamage);
|
||||||
|
|
||||||
|
_damageType = damageType;
|
||||||
|
_damageDealerEventTags = damageDealerEventTags;
|
||||||
|
_damageReceiverEventTags = damageReceiverEventTags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override ModifierEvaluatedData[] EvaluateExecution(
|
||||||
|
Effect effect, IForgeEntity target, EffectEvaluatedData? effectEvaluatedData)
|
||||||
|
{
|
||||||
|
var results = new List<ModifierEvaluatedData>();
|
||||||
|
|
||||||
|
float targetIncomingDamage = CaptureAttributeMagnitude(
|
||||||
|
TargetIncomingDamage,
|
||||||
|
effect,
|
||||||
|
target,
|
||||||
|
effectEvaluatedData);
|
||||||
|
|
||||||
|
if (targetIncomingDamage <= 0)
|
||||||
|
{
|
||||||
|
return [.. results];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (effectEvaluatedData?.TryGetContextData(out SimpleHitEffectData? hitEffectData) == true)
|
||||||
|
{
|
||||||
|
targetIncomingDamage *= hitEffectData.Magnitude;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply health reduction to target if attribute exists
|
||||||
|
if (TargetHealth.TryGetAttribute(target, out EntityAttribute? targetHealthAttribute))
|
||||||
|
{
|
||||||
|
results.Add(new ModifierEvaluatedData(
|
||||||
|
targetHealthAttribute,
|
||||||
|
ModifierOperation.FlatBonus,
|
||||||
|
-targetIncomingDamage)); // Negative for damage
|
||||||
|
}
|
||||||
|
|
||||||
|
var finalDamage = targetIncomingDamage;
|
||||||
|
var overkillDamage = 0.0f;
|
||||||
|
if (targetHealthAttribute!.CurrentValue - targetIncomingDamage <= targetHealthAttribute.Min)
|
||||||
|
{
|
||||||
|
finalDamage = targetHealthAttribute.CurrentValue - targetHealthAttribute.Min;
|
||||||
|
overkillDamage = targetIncomingDamage - finalDamage;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_damageReceiverEventTags is null) return [.. results];
|
||||||
|
|
||||||
|
target.Events.Raise(new EventData<DamageDone>
|
||||||
|
{
|
||||||
|
EventTags = _damageReceiverEventTags.GetTagContainer(),
|
||||||
|
Source = effect.Ownership.Owner,
|
||||||
|
Target = target,
|
||||||
|
EventMagnitude = finalDamage,
|
||||||
|
Payload = new DamageDone(_damageType, finalDamage, overkillDamage)
|
||||||
|
});
|
||||||
|
|
||||||
|
if (effect.Ownership.Source is null || _damageDealerEventTags is null)
|
||||||
|
{
|
||||||
|
return [.. results];
|
||||||
|
}
|
||||||
|
|
||||||
|
effect.Ownership.Source.Events.Raise(new EventData<DamageDone>
|
||||||
|
{
|
||||||
|
EventTags = _damageDealerEventTags.GetTagContainer(),
|
||||||
|
Source = effect.Ownership.Owner,
|
||||||
|
Target = target,
|
||||||
|
EventMagnitude = finalDamage,
|
||||||
|
Payload = new DamageDone(_damageType, finalDamage, overkillDamage)
|
||||||
|
});
|
||||||
|
|
||||||
|
return [.. results];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Tool]
|
||||||
|
[GlobalClass]
|
||||||
|
public partial class ForgeDamageExecution : ForgeCustomExecution
|
||||||
|
{
|
||||||
|
[Export]
|
||||||
|
public DamageType DamageType { get; set; } = DamageType.Physical;
|
||||||
|
[Export]
|
||||||
|
public ForgeTagContainer? DamageDealerEventTags { get; set; }
|
||||||
|
[Export]
|
||||||
|
public ForgeTagContainer? DamageReceiverEventTags { get; set; }
|
||||||
|
|
||||||
|
public override CustomExecution GetExecutionClass()
|
||||||
|
{
|
||||||
|
return new DamageExecution(DamageType, DamageDealerEventTags, DamageReceiverEventTags);
|
||||||
|
}
|
||||||
|
}
|
||||||
1
forge/calculators/ForgeDamageExecution.cs.uid
Normal file
1
forge/calculators/ForgeDamageExecution.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://cfx62w40nd84v
|
||||||
102
forge/calculators/ForgeKnockbackExecution.cs
Normal file
102
forge/calculators/ForgeKnockbackExecution.cs
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Gamesmiths.Forge.Core;
|
||||||
|
using Gamesmiths.Forge.Effects;
|
||||||
|
using Gamesmiths.Forge.Effects.Calculator;
|
||||||
|
using Gamesmiths.Forge.Effects.Magnitudes;
|
||||||
|
using Gamesmiths.Forge.Events;
|
||||||
|
using Gamesmiths.Forge.Godot.Resources;
|
||||||
|
using Gamesmiths.Forge.Godot.Resources.Calculators;
|
||||||
|
using Godot;
|
||||||
|
using Movementtests.forge.abilities;
|
||||||
|
using Movementtests.scenes.components.knockback;
|
||||||
|
|
||||||
|
namespace Movementtests.tools.calculators;
|
||||||
|
|
||||||
|
|
||||||
|
public record KnockbackDone(float KnockbackValue, Vector3 knockbackDirection);
|
||||||
|
|
||||||
|
public class KnockbackExecution : CustomExecution
|
||||||
|
{
|
||||||
|
private readonly RKnockback _knockback;
|
||||||
|
private readonly ForgeTag _knockbackTag;
|
||||||
|
private readonly ForgeTagContainer? _knockbackReceiverEventTags;
|
||||||
|
private readonly ForgeTagContainer? _knockbackDealerEventTags;
|
||||||
|
|
||||||
|
public AttributeCaptureDefinition TargetIncomingDamage { get; }
|
||||||
|
|
||||||
|
public KnockbackExecution(ForgeTag knockbackTag, RKnockback knockback, ForgeTagContainer? knockbackDealerEventTags, ForgeTagContainer? knockbackReceiverEventTags)
|
||||||
|
{
|
||||||
|
_knockback = knockback;
|
||||||
|
_knockbackTag = knockbackTag;
|
||||||
|
_knockbackDealerEventTags = knockbackDealerEventTags;
|
||||||
|
_knockbackReceiverEventTags = knockbackReceiverEventTags;
|
||||||
|
|
||||||
|
TargetIncomingDamage = new AttributeCaptureDefinition(
|
||||||
|
"MetaAttributeSet.IncomingDamage",
|
||||||
|
AttributeCaptureSource.Target);
|
||||||
|
AttributesToCapture.Add(TargetIncomingDamage);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override ModifierEvaluatedData[] EvaluateExecution(Effect effect, IForgeEntity target, EffectEvaluatedData? effectEvaluatedData)
|
||||||
|
{
|
||||||
|
var results = new List<ModifierEvaluatedData>();
|
||||||
|
if (!target.Tags.CombinedTags.HasTag(_knockbackTag.GetTag()))
|
||||||
|
return [.. results];
|
||||||
|
|
||||||
|
float targetIncomingDamage = CaptureAttributeMagnitude(
|
||||||
|
TargetIncomingDamage,
|
||||||
|
effect,
|
||||||
|
target,
|
||||||
|
effectEvaluatedData);
|
||||||
|
|
||||||
|
if (targetIncomingDamage <= 0)
|
||||||
|
return [.. results];
|
||||||
|
|
||||||
|
var knockbackValue = _knockback.Modifier * targetIncomingDamage / 100.0f;
|
||||||
|
|
||||||
|
if (_knockbackReceiverEventTags is null)
|
||||||
|
return [.. results];
|
||||||
|
|
||||||
|
var knockbackDirection = Vector3.Zero;
|
||||||
|
if (effectEvaluatedData?.TryGetContextData(out SimpleHitEffectData? hitEffectData) == true)
|
||||||
|
{
|
||||||
|
knockbackDirection = hitEffectData.SourceLocation.DirectionTo(hitEffectData.TargetLocation);
|
||||||
|
}
|
||||||
|
target.Events.Raise(new EventData<KnockbackDone>
|
||||||
|
{
|
||||||
|
EventTags = _knockbackReceiverEventTags.GetTagContainer(),
|
||||||
|
Source = effect.Ownership.Owner,
|
||||||
|
Target = target,
|
||||||
|
EventMagnitude = knockbackValue,
|
||||||
|
Payload = new KnockbackDone(knockbackValue, knockbackDirection)
|
||||||
|
});
|
||||||
|
|
||||||
|
if (effect.Ownership.Source is null || _knockbackDealerEventTags is null)
|
||||||
|
return [.. results];
|
||||||
|
|
||||||
|
effect.Ownership.Source.Events.Raise(new EventData<KnockbackDone>
|
||||||
|
{
|
||||||
|
EventTags = _knockbackDealerEventTags.GetTagContainer(),
|
||||||
|
Source = effect.Ownership.Owner,
|
||||||
|
Target = target,
|
||||||
|
EventMagnitude = knockbackValue,
|
||||||
|
Payload = new KnockbackDone(knockbackValue, knockbackDirection)
|
||||||
|
});
|
||||||
|
|
||||||
|
return [.. results];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[GlobalClass]
|
||||||
|
public partial class ForgeKnockbackExecution : ForgeCustomExecution
|
||||||
|
{
|
||||||
|
[Export] public ForgeTag? KnockbackableTag { get; set; }
|
||||||
|
[Export] public RKnockback? Knockback { get; set; }
|
||||||
|
[Export] public ForgeTagContainer? KnockbackDealerEventTags { get; set; }
|
||||||
|
[Export] public ForgeTagContainer? KnockbackReceiverEventTags { get; set; }
|
||||||
|
public override CustomExecution GetExecutionClass()
|
||||||
|
{
|
||||||
|
if (Knockback == null || KnockbackableTag == null) throw new System.ArgumentException("Knockback or KnockbackableTag is null");
|
||||||
|
return new KnockbackExecution(KnockbackableTag, Knockback, KnockbackDealerEventTags, KnockbackReceiverEventTags);
|
||||||
|
}
|
||||||
|
}
|
||||||
1
forge/calculators/ForgeKnockbackExecution.cs.uid
Normal file
1
forge/calculators/ForgeKnockbackExecution.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://diondfg5xp78h
|
||||||
@@ -16,23 +16,33 @@ using Movementtests.systems;
|
|||||||
namespace Movementtests.tools.calculators;
|
namespace Movementtests.tools.calculators;
|
||||||
|
|
||||||
|
|
||||||
public class RaiseEventTagExecution(TagContainer eventTags) : CustomExecution
|
public class RaiseEventTagExecution(TagContainer? ownerEventTags, TagContainer? targetEventTags) : CustomExecution
|
||||||
{
|
{
|
||||||
public override ModifierEvaluatedData[] EvaluateExecution(Effect effect, IForgeEntity target, EffectEvaluatedData? effectEvaluatedData)
|
public override ModifierEvaluatedData[] EvaluateExecution(Effect effect, IForgeEntity target, EffectEvaluatedData? effectEvaluatedData)
|
||||||
{
|
{
|
||||||
var owner = effect.Ownership.Owner;
|
var owner = effect.Ownership.Owner;
|
||||||
if (owner == null) return [];
|
var magnitude = effectEvaluatedData is { ModifiersEvaluatedData.Length: > 0 }
|
||||||
foreach (var tag in eventTags.Tags)
|
? effectEvaluatedData.ModifiersEvaluatedData[0].Magnitude
|
||||||
|
: 0f;
|
||||||
|
if (owner != null && ownerEventTags != null)
|
||||||
{
|
{
|
||||||
GD.Print(tag);
|
owner.Events.Raise(new EventData
|
||||||
|
{
|
||||||
|
EventTags = ownerEventTags,
|
||||||
|
Source = owner,
|
||||||
|
EventMagnitude = magnitude
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
owner.Events.Raise(new EventData
|
if (targetEventTags != null)
|
||||||
{
|
{
|
||||||
EventTags = eventTags,
|
target.Events.Raise(new EventData
|
||||||
Source = owner,
|
{
|
||||||
EventMagnitude = 12f
|
EventTags = targetEventTags,
|
||||||
});
|
Source = owner,
|
||||||
|
EventMagnitude = magnitude
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
@@ -43,10 +53,11 @@ public class RaiseEventTagExecution(TagContainer eventTags) : CustomExecution
|
|||||||
[GlobalClass]
|
[GlobalClass]
|
||||||
public partial class ForgeRaiseEventTagExecution : ForgeCustomExecution
|
public partial class ForgeRaiseEventTagExecution : ForgeCustomExecution
|
||||||
{
|
{
|
||||||
[Export] ForgeTagContainer EventTags { get; set; }
|
[Export] ForgeTagContainer? EventTags { get; set; }
|
||||||
|
[Export] ForgeTagContainer? TargetEventTags { get; set; }
|
||||||
|
|
||||||
public override CustomExecution GetExecutionClass()
|
public override CustomExecution GetExecutionClass()
|
||||||
{
|
{
|
||||||
return new RaiseEventTagExecution(EventTags.GetTagContainer());
|
return new RaiseEventTagExecution(EventTags?.GetTagContainer(), TargetEventTags?.GetTagContainer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("1_l686n")
|
script = ExtResource("1_l686n")
|
||||||
RegisteredTags = Array[String](["character.player", "character.enemy", "weapon", "status.stunned", "status.burning", "status.frozen", "abilities.weapon.land", "abilities.weapon.flying", "abilities.weapon.left", "events.combat.damage", "events.combat.hit", "events.weapon.flyingTick", "events.weapon.startedFlying", "events.weapon.stoppedFlying", "events.weapon.handToFlying", "events.weapon.flyingToHand", "events.weapon.plantedToHand", "events.weapon.plantedToFlying", "events.weapon.planted", "cooldown.empoweredAction", "cooldown.empoweredSwordThrow", "cues.resources.mana", "events.player.empowered_action_used", "cues.resources.mana.inhibited"])
|
RegisteredTags = Array[String](["character.player", "character.enemy", "weapon", "status.stunned", "status.burning", "status.frozen", "abilities.weapon.land", "abilities.weapon.flying", "abilities.weapon.left", "events.combat.damage", "events.combat.hit", "events.weapon.flyingTick", "events.weapon.startedFlying", "events.weapon.stoppedFlying", "events.weapon.handToFlying", "events.weapon.flyingToHand", "events.weapon.plantedToHand", "events.weapon.plantedToFlying", "events.weapon.planted", "cooldown.empoweredAction", "cooldown.empoweredSwordThrow", "cues.resources.mana", "events.player.empowered_action_used", "cues.resources.mana.inhibited", "cues.resources.health", "cooldown.enemy.hit", "events.combat.death", "cooldown.hit", "events.player.hit", "cues.enemy.health", "immunity.damage", "status", "traits.damageable", "traits.knockbackable", "events.combat.knockback_dealt", "events.combat.knockback_received"])
|
||||||
|
|||||||
@@ -1,16 +1,22 @@
|
|||||||
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://dccuj66egxfwh"]
|
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://dccuj66egxfwh"]
|
||||||
|
|
||||||
[ext_resource type="Resource" uid="uid://crgwob8t8yysq" path="res://scenes/player_controller/resources/forge/instant_end_behavior.tres" id="1_x7d0c"]
|
[ext_resource type="Resource" uid="uid://c4ea6ktafqe0r" path="res://forge/resources/effect_datas/temp_invincibility.tres" id="1_ent4t"]
|
||||||
|
[ext_resource type="Script" uid="uid://c7s5v7ii4nujg" path="res://forge/abilities/ForgeInstantEndBehavior.cs" id="2_ent4t"]
|
||||||
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="2_prg0a"]
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="2_prg0a"]
|
||||||
[ext_resource type="Script" uid="uid://dngf30hxy5go4" path="res://addons/forge/resources/components/ModifierTags.cs" id="3_k72m0"]
|
[ext_resource type="Script" uid="uid://dngf30hxy5go4" path="res://addons/forge/resources/components/ModifierTags.cs" id="3_k72m0"]
|
||||||
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="4_5fdax"]
|
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="4_5fdax"]
|
||||||
[ext_resource type="Script" uid="uid://2gm1hdhi8u08" path="res://addons/forge/resources/magnitudes/ForgeModifierMagnitude.cs" id="5_5qmmj"]
|
[ext_resource type="Script" uid="uid://2gm1hdhi8u08" path="res://addons/forge/resources/magnitudes/ForgeModifierMagnitude.cs" id="5_5qmmj"]
|
||||||
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="6_yi0bg"]
|
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="6_yi0bg"]
|
||||||
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="7_0rp6y"]
|
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="7_0rp6y"]
|
||||||
[ext_resource type="Resource" uid="uid://dn7b8frkoxpxr" path="res://scenes/player_controller/resources/forge/player_mana_changed_cue.tres" id="8_0olwd"]
|
[ext_resource type="Resource" uid="uid://dn7b8frkoxpxr" path="res://forge/resources/cues/player_mana_changed_cue.tres" id="8_0olwd"]
|
||||||
[ext_resource type="Script" uid="uid://bdfcavbjyhxxa" path="res://addons/forge/resources/ForgeModifier.cs" id="9_wluo0"]
|
[ext_resource type="Script" uid="uid://bdfcavbjyhxxa" path="res://addons/forge/resources/ForgeModifier.cs" id="9_wluo0"]
|
||||||
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="10_2sq4o"]
|
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="10_2sq4o"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_xltxv"]
|
||||||
|
script = ExtResource("2_ent4t")
|
||||||
|
OptionalEffectData = ExtResource("1_ent4t")
|
||||||
|
metadata/_custom_type_script = "uid://c7s5v7ii4nujg"
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_h116a"]
|
[sub_resource type="Resource" id="Resource_h116a"]
|
||||||
script = ExtResource("2_prg0a")
|
script = ExtResource("2_prg0a")
|
||||||
ContainerTags = Array[String](["cooldown.empoweredaction"])
|
ContainerTags = Array[String](["cooldown.empoweredaction"])
|
||||||
@@ -78,6 +84,42 @@ InitialStack = SubResource("Resource_lmnuh")
|
|||||||
Cues = []
|
Cues = []
|
||||||
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_3usj8"]
|
||||||
|
script = ExtResource("4_5fdax")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_5q60v"]
|
||||||
|
script = ExtResource("4_5fdax")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_eo5h0"]
|
||||||
|
script = ExtResource("4_5fdax")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_c7uae"]
|
||||||
|
script = ExtResource("4_5fdax")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_7d1b0"]
|
||||||
|
script = ExtResource("4_5fdax")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_jiq0x"]
|
||||||
|
script = ExtResource("4_5fdax")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_kpieu"]
|
||||||
|
script = ExtResource("4_5fdax")
|
||||||
|
BaseValue = 0.3
|
||||||
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_rwc4g"]
|
||||||
|
script = ExtResource("5_5qmmj")
|
||||||
|
ScalableFloat = SubResource("Resource_kpieu")
|
||||||
|
Coefficient = SubResource("Resource_c7uae")
|
||||||
|
PreMultiplyAdditiveValue = SubResource("Resource_jiq0x")
|
||||||
|
PostMultiplyAdditiveValue = SubResource("Resource_7d1b0")
|
||||||
|
CalculatorCoefficient = SubResource("Resource_3usj8")
|
||||||
|
CalculatorPreMultiplyAdditiveValue = SubResource("Resource_eo5h0")
|
||||||
|
CalculatorPostMultiplyAdditiveValue = SubResource("Resource_5q60v")
|
||||||
|
metadata/_custom_type_script = "uid://2gm1hdhi8u08"
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_8dsdw"]
|
[sub_resource type="Resource" id="Resource_8dsdw"]
|
||||||
script = ExtResource("6_yi0bg")
|
script = ExtResource("6_yi0bg")
|
||||||
BaseValue = 1
|
BaseValue = 1
|
||||||
@@ -104,7 +146,7 @@ script = ExtResource("4_5fdax")
|
|||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_uv4a1"]
|
[sub_resource type="Resource" id="Resource_uv4a1"]
|
||||||
script = ExtResource("4_5fdax")
|
script = ExtResource("4_5fdax")
|
||||||
BaseValue = -30.0
|
BaseValue = -50.0
|
||||||
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_dhni4"]
|
[sub_resource type="Resource" id="Resource_dhni4"]
|
||||||
@@ -129,6 +171,7 @@ Name = "Empowered Action Cost"
|
|||||||
Modifiers = Array[Object]([SubResource("Resource_dhni4")])
|
Modifiers = Array[Object]([SubResource("Resource_dhni4")])
|
||||||
Components = []
|
Components = []
|
||||||
Executions = []
|
Executions = []
|
||||||
|
Duration = SubResource("Resource_rwc4g")
|
||||||
StackLimit = SubResource("Resource_w5rmc")
|
StackLimit = SubResource("Resource_w5rmc")
|
||||||
InitialStack = SubResource("Resource_8dsdw")
|
InitialStack = SubResource("Resource_8dsdw")
|
||||||
Cues = Array[Object]([ExtResource("8_0olwd")])
|
Cues = Array[Object]([ExtResource("8_0olwd")])
|
||||||
@@ -139,5 +182,5 @@ script = ExtResource("10_2sq4o")
|
|||||||
Name = "Empowered Action"
|
Name = "Empowered Action"
|
||||||
CooldownEffects = [SubResource("Resource_egh2b")]
|
CooldownEffects = [SubResource("Resource_egh2b")]
|
||||||
CostEffect = SubResource("Resource_mtef8")
|
CostEffect = SubResource("Resource_mtef8")
|
||||||
AbilityBehavior = ExtResource("1_x7d0c")
|
AbilityBehavior = SubResource("Resource_xltxv")
|
||||||
metadata/_custom_type_script = "uid://dhxfbxh54pyxp"
|
metadata/_custom_type_script = "uid://dhxfbxh54pyxp"
|
||||||
113
forge/resources/ability_datas/explosion_hit.tres
Normal file
113
forge/resources/ability_datas/explosion_hit.tres
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://nns16d5uhtl8"]
|
||||||
|
|
||||||
|
[ext_resource type="Resource" uid="uid://bpovqvlqv5bs5" path="res://forge/resources/effect_components/damageable.tres" id="1_w36j6"]
|
||||||
|
[ext_resource type="Resource" uid="uid://sn6kndc6ukic" path="res://forge/resources/tag_containers/on_damage_dealt.tres" id="2_3ma4g"]
|
||||||
|
[ext_resource type="Resource" uid="uid://5tr54q0rdpho" path="res://forge/resources/tag_containers/on_damage_taken.tres" id="3_kyfqu"]
|
||||||
|
[ext_resource type="Script" uid="uid://cfx62w40nd84v" path="res://forge/calculators/ForgeDamageExecution.cs" id="4_xfamx"]
|
||||||
|
[ext_resource type="Script" uid="uid://b44cse62qru7j" path="res://scenes/components/knockback/RKnockback.cs" id="5_tw4gc"]
|
||||||
|
[ext_resource type="Resource" uid="uid://bhn27s8ne0uyg" path="res://forge/resources/tag_containers/on_knockback_dealt.tres" id="6_nq3a0"]
|
||||||
|
[ext_resource type="Resource" uid="uid://bkr6uu57wm3o3" path="res://forge/resources/tag_containers/on_knockback_received.tres" id="7_3utx7"]
|
||||||
|
[ext_resource type="Resource" uid="uid://45l7vnfs72b" path="res://forge/resources/tag_containers/knockbackable_tag.tres" id="8_7hfxb"]
|
||||||
|
[ext_resource type="Script" uid="uid://diondfg5xp78h" path="res://forge/calculators/ForgeKnockbackExecution.cs" id="9_lysxe"]
|
||||||
|
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="10_sd7ih"]
|
||||||
|
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="11_bs6rs"]
|
||||||
|
[ext_resource type="Script" uid="uid://bdfcavbjyhxxa" path="res://addons/forge/resources/ForgeModifier.cs" id="12_a6jts"]
|
||||||
|
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="13_c85am"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://c2akxlg7tdb67" path="res://assets/ui/IconGodotNode/node/icon_projectile.png" id="14_ow2i8"]
|
||||||
|
[ext_resource type="Script" uid="uid://n6efm5o4uxvr" path="res://forge/abilities/ForgeSimpleHitBehavior.cs" id="15_ki7ct"]
|
||||||
|
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="16_hhyju"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_vy8wr"]
|
||||||
|
script = ExtResource("4_xfamx")
|
||||||
|
DamageType = 3
|
||||||
|
DamageDealerEventTags = ExtResource("2_3ma4g")
|
||||||
|
DamageReceiverEventTags = ExtResource("3_kyfqu")
|
||||||
|
metadata/_custom_type_script = "uid://cfx62w40nd84v"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_ndb8p"]
|
||||||
|
script = ExtResource("5_tw4gc")
|
||||||
|
Modifier = 100.0
|
||||||
|
metadata/_custom_type_script = "uid://b44cse62qru7j"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_dy671"]
|
||||||
|
script = ExtResource("9_lysxe")
|
||||||
|
KnockbackableTag = ExtResource("8_7hfxb")
|
||||||
|
Knockback = SubResource("Resource_ndb8p")
|
||||||
|
KnockbackDealerEventTags = ExtResource("6_nq3a0")
|
||||||
|
KnockbackReceiverEventTags = ExtResource("7_3utx7")
|
||||||
|
metadata/_custom_type_script = "uid://diondfg5xp78h"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_i0sj3"]
|
||||||
|
script = ExtResource("10_sd7ih")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_1mvp7"]
|
||||||
|
script = ExtResource("11_bs6rs")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_jxdlf"]
|
||||||
|
script = ExtResource("11_bs6rs")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_rslib"]
|
||||||
|
script = ExtResource("11_bs6rs")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_3l3du"]
|
||||||
|
script = ExtResource("11_bs6rs")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_qqpg8"]
|
||||||
|
script = ExtResource("11_bs6rs")
|
||||||
|
BaseValue = 10.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_igmn0"]
|
||||||
|
script = ExtResource("11_bs6rs")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_acqnn"]
|
||||||
|
script = ExtResource("11_bs6rs")
|
||||||
|
BaseValue = 50.0
|
||||||
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_xwtie"]
|
||||||
|
script = ExtResource("12_a6jts")
|
||||||
|
Attribute = "MetaAttributeSet.IncomingDamage"
|
||||||
|
CalculationType = 1
|
||||||
|
ScalableFloat = SubResource("Resource_acqnn")
|
||||||
|
CapturedAttribute = "MetaAttributeSet.Level"
|
||||||
|
Coefficient = SubResource("Resource_3l3du")
|
||||||
|
PreMultiplyAdditiveValue = SubResource("Resource_igmn0")
|
||||||
|
PostMultiplyAdditiveValue = SubResource("Resource_qqpg8")
|
||||||
|
CalculatorCoefficient = SubResource("Resource_1mvp7")
|
||||||
|
CalculatorPreMultiplyAdditiveValue = SubResource("Resource_rslib")
|
||||||
|
CalculatorPostMultiplyAdditiveValue = SubResource("Resource_jxdlf")
|
||||||
|
metadata/_custom_type_script = "uid://bdfcavbjyhxxa"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_ikb7l"]
|
||||||
|
script = ExtResource("10_sd7ih")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_jdvg8"]
|
||||||
|
script = ExtResource("13_c85am")
|
||||||
|
Name = "Explosion hit"
|
||||||
|
Modifiers = Array[Object]([SubResource("Resource_xwtie")])
|
||||||
|
Components = Array[Object]([ExtResource("1_w36j6")])
|
||||||
|
Executions = Array[Object]([SubResource("Resource_vy8wr"), SubResource("Resource_dy671")])
|
||||||
|
StackLimit = SubResource("Resource_ikb7l")
|
||||||
|
InitialStack = SubResource("Resource_i0sj3")
|
||||||
|
Cues = []
|
||||||
|
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_ba5lh"]
|
||||||
|
script = ExtResource("15_ki7ct")
|
||||||
|
DamageEffect = SubResource("Resource_jdvg8")
|
||||||
|
Name = "Explostion hit"
|
||||||
|
Description = "Called by explosion scene"
|
||||||
|
Icon = ExtResource("14_ow2i8")
|
||||||
|
metadata/_custom_type_script = "uid://n6efm5o4uxvr"
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("16_hhyju")
|
||||||
|
Name = "Explosion "
|
||||||
|
InstancingPolicy = 1
|
||||||
|
CooldownEffects = []
|
||||||
|
AbilityBehavior = SubResource("Resource_ba5lh")
|
||||||
|
metadata/_custom_type_script = "uid://dhxfbxh54pyxp"
|
||||||
158
forge/resources/ability_datas/grounded_enemy_hit.tres
Normal file
158
forge/resources/ability_datas/grounded_enemy_hit.tres
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://qpdw62ubaclc"]
|
||||||
|
|
||||||
|
[ext_resource type="Resource" uid="uid://bpovqvlqv5bs5" path="res://forge/resources/effect_components/damageable.tres" id="1_q2jt5"]
|
||||||
|
[ext_resource type="Resource" uid="uid://dlu7l5egpexnn" path="res://forge/resources/custom_executions/raise_damage_dealing_events.tres" id="2_2dxcu"]
|
||||||
|
[ext_resource type="Resource" uid="uid://4rkwr10pc6tp" path="res://forge/resources/custom_executions/physical_damage_calculator.tres" id="2_f6jpb"]
|
||||||
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="4_0mce3"]
|
||||||
|
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="6_41lep"]
|
||||||
|
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="7_jf6ii"]
|
||||||
|
[ext_resource type="Script" uid="uid://bdfcavbjyhxxa" path="res://addons/forge/resources/ForgeModifier.cs" id="8_51ikp"]
|
||||||
|
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="9_bcnlx"]
|
||||||
|
[ext_resource type="Script" uid="uid://n6efm5o4uxvr" path="res://forge/abilities/ForgeSimpleHitBehavior.cs" id="10_m4f1m"]
|
||||||
|
[ext_resource type="Script" uid="uid://dngf30hxy5go4" path="res://addons/forge/resources/components/ModifierTags.cs" id="11_8c5sq"]
|
||||||
|
[ext_resource type="Script" uid="uid://2gm1hdhi8u08" path="res://addons/forge/resources/magnitudes/ForgeModifierMagnitude.cs" id="12_2x5q6"]
|
||||||
|
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="13_4nn3y"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_rjo6h"]
|
||||||
|
script = ExtResource("6_41lep")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_8qlid"]
|
||||||
|
script = ExtResource("7_jf6ii")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_lbthk"]
|
||||||
|
script = ExtResource("7_jf6ii")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_hguc3"]
|
||||||
|
script = ExtResource("7_jf6ii")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_ugrvo"]
|
||||||
|
script = ExtResource("7_jf6ii")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_6406e"]
|
||||||
|
script = ExtResource("7_jf6ii")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_x0rol"]
|
||||||
|
script = ExtResource("7_jf6ii")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_1s1j3"]
|
||||||
|
script = ExtResource("7_jf6ii")
|
||||||
|
BaseValue = 10.0
|
||||||
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_khx4r"]
|
||||||
|
script = ExtResource("8_51ikp")
|
||||||
|
Attribute = "MetaAttributeSet.IncomingDamage"
|
||||||
|
Operation = 2
|
||||||
|
ScalableFloat = SubResource("Resource_1s1j3")
|
||||||
|
Coefficient = SubResource("Resource_ugrvo")
|
||||||
|
PreMultiplyAdditiveValue = SubResource("Resource_x0rol")
|
||||||
|
PostMultiplyAdditiveValue = SubResource("Resource_6406e")
|
||||||
|
CalculatorCoefficient = SubResource("Resource_8qlid")
|
||||||
|
CalculatorPreMultiplyAdditiveValue = SubResource("Resource_hguc3")
|
||||||
|
CalculatorPostMultiplyAdditiveValue = SubResource("Resource_lbthk")
|
||||||
|
metadata/_custom_type_script = "uid://bdfcavbjyhxxa"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_xmw7i"]
|
||||||
|
script = ExtResource("6_41lep")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_lj45k"]
|
||||||
|
script = ExtResource("9_bcnlx")
|
||||||
|
Name = "SimpleHitEffect"
|
||||||
|
Modifiers = Array[Object]([SubResource("Resource_khx4r")])
|
||||||
|
Components = [ExtResource("1_q2jt5")]
|
||||||
|
Executions = [ExtResource("2_f6jpb"), ExtResource("2_2dxcu")]
|
||||||
|
StackLimit = SubResource("Resource_xmw7i")
|
||||||
|
InitialStack = SubResource("Resource_rjo6h")
|
||||||
|
Cues = []
|
||||||
|
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_m0osh"]
|
||||||
|
script = ExtResource("10_m4f1m")
|
||||||
|
DamageEffect = SubResource("Resource_lj45k")
|
||||||
|
Name = "Simple hit"
|
||||||
|
Description = "This is a simple hit from an enemy"
|
||||||
|
metadata/_custom_type_script = "uid://n6efm5o4uxvr"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_msmv1"]
|
||||||
|
script = ExtResource("4_0mce3")
|
||||||
|
ContainerTags = Array[String](["status.stunned"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_xdbds"]
|
||||||
|
script = ExtResource("4_0mce3")
|
||||||
|
ContainerTags = Array[String](["cooldown.enemy.hit"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_gna8g"]
|
||||||
|
script = ExtResource("11_8c5sq")
|
||||||
|
TagsToAdd = SubResource("Resource_xdbds")
|
||||||
|
metadata/_custom_type_script = "uid://dngf30hxy5go4"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_oo2a1"]
|
||||||
|
script = ExtResource("7_jf6ii")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_q86ag"]
|
||||||
|
script = ExtResource("7_jf6ii")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_5eesh"]
|
||||||
|
script = ExtResource("7_jf6ii")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_5lf6m"]
|
||||||
|
script = ExtResource("7_jf6ii")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_bv3hg"]
|
||||||
|
script = ExtResource("7_jf6ii")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_tb7hu"]
|
||||||
|
script = ExtResource("7_jf6ii")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_bw6ul"]
|
||||||
|
script = ExtResource("7_jf6ii")
|
||||||
|
BaseValue = 1.0
|
||||||
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_g5uhf"]
|
||||||
|
script = ExtResource("12_2x5q6")
|
||||||
|
ScalableFloat = SubResource("Resource_bw6ul")
|
||||||
|
Coefficient = SubResource("Resource_5lf6m")
|
||||||
|
PreMultiplyAdditiveValue = SubResource("Resource_tb7hu")
|
||||||
|
PostMultiplyAdditiveValue = SubResource("Resource_bv3hg")
|
||||||
|
CalculatorCoefficient = SubResource("Resource_oo2a1")
|
||||||
|
CalculatorPreMultiplyAdditiveValue = SubResource("Resource_5eesh")
|
||||||
|
CalculatorPostMultiplyAdditiveValue = SubResource("Resource_q86ag")
|
||||||
|
metadata/_custom_type_script = "uid://2gm1hdhi8u08"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_vl5ta"]
|
||||||
|
script = ExtResource("6_41lep")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_82a7m"]
|
||||||
|
script = ExtResource("6_41lep")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_0gdnn"]
|
||||||
|
script = ExtResource("9_bcnlx")
|
||||||
|
Name = "HitCooldown"
|
||||||
|
Modifiers = []
|
||||||
|
Components = [SubResource("Resource_gna8g")]
|
||||||
|
Executions = []
|
||||||
|
DurationType = 2
|
||||||
|
Duration = SubResource("Resource_g5uhf")
|
||||||
|
StackLimit = SubResource("Resource_82a7m")
|
||||||
|
InitialStack = SubResource("Resource_vl5ta")
|
||||||
|
Cues = []
|
||||||
|
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("13_4nn3y")
|
||||||
|
Name = "Hit"
|
||||||
|
CooldownEffects = [SubResource("Resource_0gdnn")]
|
||||||
|
AbilityBehavior = SubResource("Resource_m0osh")
|
||||||
|
ActivationBlockedTags = SubResource("Resource_msmv1")
|
||||||
|
metadata/_custom_type_script = "uid://dhxfbxh54pyxp"
|
||||||
95
forge/resources/ability_datas/on_hit_invinciblity.tres
Normal file
95
forge/resources/ability_datas/on_hit_invinciblity.tres
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://b0ikxp5j8fn3n"]
|
||||||
|
|
||||||
|
[ext_resource type="Resource" uid="uid://cw2ytd34jsxj" path="res://forge/resources/tag_containers/immune_damage.tres" id="1_xjqwu"]
|
||||||
|
[ext_resource type="Script" uid="uid://dngf30hxy5go4" path="res://addons/forge/resources/components/ModifierTags.cs" id="2_a16tf"]
|
||||||
|
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="3_1wliv"]
|
||||||
|
[ext_resource type="Script" uid="uid://2gm1hdhi8u08" path="res://addons/forge/resources/magnitudes/ForgeModifierMagnitude.cs" id="4_7dtdc"]
|
||||||
|
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="5_ewbg3"]
|
||||||
|
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="6_0akms"]
|
||||||
|
[ext_resource type="Script" uid="uid://cl5hudinl1rex" path="res://forge/abilities/ForgeEffectApplicationBehavior.cs" id="7_mhqpo"]
|
||||||
|
[ext_resource type="Script" uid="uid://dpakv7agvir6y" path="res://addons/forge/resources/ForgeTag.cs" id="8_4vjp3"]
|
||||||
|
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="9_go27d"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_5ht6k"]
|
||||||
|
script = ExtResource("2_a16tf")
|
||||||
|
TagsToAdd = ExtResource("1_xjqwu")
|
||||||
|
metadata/_custom_type_script = "uid://dngf30hxy5go4"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_bn2qi"]
|
||||||
|
script = ExtResource("3_1wliv")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_pl2a2"]
|
||||||
|
script = ExtResource("3_1wliv")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_g02pf"]
|
||||||
|
script = ExtResource("3_1wliv")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_7ak88"]
|
||||||
|
script = ExtResource("3_1wliv")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_f12ll"]
|
||||||
|
script = ExtResource("3_1wliv")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_xodo6"]
|
||||||
|
script = ExtResource("3_1wliv")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_mcqfd"]
|
||||||
|
script = ExtResource("3_1wliv")
|
||||||
|
BaseValue = 2.0
|
||||||
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_w3q2i"]
|
||||||
|
script = ExtResource("4_7dtdc")
|
||||||
|
ScalableFloat = SubResource("Resource_mcqfd")
|
||||||
|
Coefficient = SubResource("Resource_7ak88")
|
||||||
|
PreMultiplyAdditiveValue = SubResource("Resource_xodo6")
|
||||||
|
PostMultiplyAdditiveValue = SubResource("Resource_f12ll")
|
||||||
|
CalculatorCoefficient = SubResource("Resource_bn2qi")
|
||||||
|
CalculatorPreMultiplyAdditiveValue = SubResource("Resource_g02pf")
|
||||||
|
CalculatorPostMultiplyAdditiveValue = SubResource("Resource_pl2a2")
|
||||||
|
metadata/_custom_type_script = "uid://2gm1hdhi8u08"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_vgvi5"]
|
||||||
|
script = ExtResource("5_ewbg3")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_0ujop"]
|
||||||
|
script = ExtResource("5_ewbg3")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_s8mqp"]
|
||||||
|
script = ExtResource("6_0akms")
|
||||||
|
Name = "Add Invincible tag effect"
|
||||||
|
Modifiers = Array[Object]([])
|
||||||
|
Components = Array[Object]([SubResource("Resource_5ht6k")])
|
||||||
|
Executions = []
|
||||||
|
DurationType = 2
|
||||||
|
Duration = SubResource("Resource_w3q2i")
|
||||||
|
StackLimit = SubResource("Resource_0ujop")
|
||||||
|
InitialStack = SubResource("Resource_vgvi5")
|
||||||
|
Cues = []
|
||||||
|
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_tcrdt"]
|
||||||
|
script = ExtResource("7_mhqpo")
|
||||||
|
EffectData = SubResource("Resource_s8mqp")
|
||||||
|
Name = "OnHitInvincibility"
|
||||||
|
Description = "Adds the invincible tag for a given period"
|
||||||
|
metadata/_custom_type_script = "uid://cl5hudinl1rex"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_xs7wf"]
|
||||||
|
script = ExtResource("8_4vjp3")
|
||||||
|
Tag = "events.combat.damage"
|
||||||
|
metadata/_custom_type_script = "uid://dpakv7agvir6y"
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("9_go27d")
|
||||||
|
Name = "OnHitInvincibility"
|
||||||
|
InstancingPolicy = 1
|
||||||
|
CooldownEffects = []
|
||||||
|
AbilityBehavior = SubResource("Resource_tcrdt")
|
||||||
|
TriggerSource = 1
|
||||||
|
TriggerTag = SubResource("Resource_xs7wf")
|
||||||
|
metadata/_custom_type_script = "uid://dhxfbxh54pyxp"
|
||||||
159
forge/resources/ability_datas/player_hit.tres
Normal file
159
forge/resources/ability_datas/player_hit.tres
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://dgjsi1my7nlnk"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="1_l0l1a"]
|
||||||
|
[ext_resource type="Script" uid="uid://n6efm5o4uxvr" path="res://forge/abilities/ForgeSimpleHitBehavior.cs" id="1_n2s8d"]
|
||||||
|
[ext_resource type="Resource" uid="uid://bpovqvlqv5bs5" path="res://forge/resources/effect_components/damageable.tres" id="1_r7waw"]
|
||||||
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_w1wo0"]
|
||||||
|
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="2_5vjbv"]
|
||||||
|
[ext_resource type="Script" uid="uid://dngf30hxy5go4" path="res://addons/forge/resources/components/ModifierTags.cs" id="2_jwyed"]
|
||||||
|
[ext_resource type="Resource" uid="uid://4rkwr10pc6tp" path="res://forge/resources/custom_executions/physical_damage_calculator.tres" id="2_l5emy"]
|
||||||
|
[ext_resource type="Script" uid="uid://bdfcavbjyhxxa" path="res://addons/forge/resources/ForgeModifier.cs" id="3_c4wry"]
|
||||||
|
[ext_resource type="Resource" uid="uid://cc1qrmbp12fk8" path="res://forge/resources/custom_executions/player_hit_knoback_calculation.tres" id="3_l5emy"]
|
||||||
|
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="3_w1wo0"]
|
||||||
|
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="4_c4wry"]
|
||||||
|
[ext_resource type="Script" uid="uid://2gm1hdhi8u08" path="res://addons/forge/resources/magnitudes/ForgeModifierMagnitude.cs" id="5_0cyim"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_0cyim"]
|
||||||
|
script = ExtResource("1_l0l1a")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_h8gc3"]
|
||||||
|
script = ExtResource("4_c4wry")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_ewmvj"]
|
||||||
|
script = ExtResource("4_c4wry")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_8wvcn"]
|
||||||
|
script = ExtResource("4_c4wry")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_no8t2"]
|
||||||
|
script = ExtResource("4_c4wry")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_vioyh"]
|
||||||
|
script = ExtResource("4_c4wry")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_m6xnn"]
|
||||||
|
script = ExtResource("4_c4wry")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_uinv8"]
|
||||||
|
script = ExtResource("4_c4wry")
|
||||||
|
BaseValue = 40.0
|
||||||
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_04hqa"]
|
||||||
|
script = ExtResource("3_c4wry")
|
||||||
|
Attribute = "MetaAttributeSet.IncomingDamage"
|
||||||
|
Operation = 2
|
||||||
|
ScalableFloat = SubResource("Resource_uinv8")
|
||||||
|
Coefficient = SubResource("Resource_no8t2")
|
||||||
|
PreMultiplyAdditiveValue = SubResource("Resource_m6xnn")
|
||||||
|
PostMultiplyAdditiveValue = SubResource("Resource_vioyh")
|
||||||
|
CalculatorCoefficient = SubResource("Resource_h8gc3")
|
||||||
|
CalculatorPreMultiplyAdditiveValue = SubResource("Resource_8wvcn")
|
||||||
|
CalculatorPostMultiplyAdditiveValue = SubResource("Resource_ewmvj")
|
||||||
|
metadata/_custom_type_script = "uid://bdfcavbjyhxxa"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_8fbeq"]
|
||||||
|
script = ExtResource("1_l0l1a")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_ees2v"]
|
||||||
|
script = ExtResource("2_5vjbv")
|
||||||
|
Name = "Player Hit Effect"
|
||||||
|
Modifiers = Array[Object]([SubResource("Resource_04hqa")])
|
||||||
|
Components = Array[Object]([ExtResource("1_r7waw")])
|
||||||
|
Executions = Array[Object]([ExtResource("2_l5emy"), ExtResource("3_l5emy")])
|
||||||
|
StackLimit = SubResource("Resource_8fbeq")
|
||||||
|
InitialStack = SubResource("Resource_0cyim")
|
||||||
|
Cues = []
|
||||||
|
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_r7waw"]
|
||||||
|
script = ExtResource("1_n2s8d")
|
||||||
|
DamageEffect = SubResource("Resource_ees2v")
|
||||||
|
Name = "PlayerHitEffect"
|
||||||
|
Description = "Effect applied to target on player hit"
|
||||||
|
metadata/_custom_type_script = "uid://n6efm5o4uxvr"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_qk2av"]
|
||||||
|
script = ExtResource("1_w1wo0")
|
||||||
|
ContainerTags = Array[String](["status.stunned"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_w857g"]
|
||||||
|
script = ExtResource("1_w1wo0")
|
||||||
|
ContainerTags = Array[String](["cooldown.hit"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_n2s8d"]
|
||||||
|
script = ExtResource("2_jwyed")
|
||||||
|
TagsToAdd = SubResource("Resource_w857g")
|
||||||
|
metadata/_custom_type_script = "uid://dngf30hxy5go4"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_l5emy"]
|
||||||
|
script = ExtResource("4_c4wry")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_agfn8"]
|
||||||
|
script = ExtResource("4_c4wry")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_tkxxk"]
|
||||||
|
script = ExtResource("4_c4wry")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_e4qbe"]
|
||||||
|
script = ExtResource("4_c4wry")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_coxn5"]
|
||||||
|
script = ExtResource("4_c4wry")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_wak7n"]
|
||||||
|
script = ExtResource("4_c4wry")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_bvwi7"]
|
||||||
|
script = ExtResource("4_c4wry")
|
||||||
|
BaseValue = 0.3
|
||||||
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_3wf5l"]
|
||||||
|
script = ExtResource("5_0cyim")
|
||||||
|
ScalableFloat = SubResource("Resource_bvwi7")
|
||||||
|
Coefficient = SubResource("Resource_e4qbe")
|
||||||
|
PreMultiplyAdditiveValue = SubResource("Resource_wak7n")
|
||||||
|
PostMultiplyAdditiveValue = SubResource("Resource_coxn5")
|
||||||
|
CalculatorCoefficient = SubResource("Resource_l5emy")
|
||||||
|
CalculatorPreMultiplyAdditiveValue = SubResource("Resource_tkxxk")
|
||||||
|
CalculatorPostMultiplyAdditiveValue = SubResource("Resource_agfn8")
|
||||||
|
metadata/_custom_type_script = "uid://2gm1hdhi8u08"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_xs7wf"]
|
||||||
|
script = ExtResource("1_l0l1a")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_cm4e8"]
|
||||||
|
script = ExtResource("1_l0l1a")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_cmmfb"]
|
||||||
|
script = ExtResource("2_5vjbv")
|
||||||
|
Name = "PlayerHitCooldown"
|
||||||
|
Modifiers = []
|
||||||
|
Components = Array[Object]([SubResource("Resource_n2s8d")])
|
||||||
|
Executions = []
|
||||||
|
DurationType = 2
|
||||||
|
Duration = SubResource("Resource_3wf5l")
|
||||||
|
StackLimit = SubResource("Resource_cm4e8")
|
||||||
|
InitialStack = SubResource("Resource_xs7wf")
|
||||||
|
Cues = []
|
||||||
|
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("3_w1wo0")
|
||||||
|
Name = "PlayerHitAbility"
|
||||||
|
RetriggerInstancedAbility = true
|
||||||
|
CooldownEffects = [SubResource("Resource_cmmfb")]
|
||||||
|
AbilityBehavior = SubResource("Resource_r7waw")
|
||||||
|
ActivationBlockedTags = SubResource("Resource_qk2av")
|
||||||
|
metadata/_custom_type_script = "uid://dhxfbxh54pyxp"
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://btnnpqann3ktp"]
|
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://btnnpqann3ktp"]
|
||||||
|
|
||||||
[ext_resource type="Resource" uid="uid://1tmxayi3nygi" path="res://scenes/player_controller/resources/forge/flying tick application ability behavior.tres" id="1_twa0w"]
|
[ext_resource type="Resource" uid="uid://1tmxayi3nygi" path="res://forge/resources/behaviors/flying tick application ability behavior.tres" id="1_twa0w"]
|
||||||
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="1_vh0wp"]
|
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="1_vh0wp"]
|
||||||
[ext_resource type="Script" uid="uid://dpakv7agvir6y" path="res://addons/forge/resources/ForgeTag.cs" id="6_napws"]
|
[ext_resource type="Script" uid="uid://dpakv7agvir6y" path="res://addons/forge/resources/ForgeTag.cs" id="6_napws"]
|
||||||
|
|
||||||
@@ -2,7 +2,11 @@
|
|||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://duju3atqgltkg" path="res://scenes/explosion/explosion.tscn" id="1_mnals"]
|
[ext_resource type="PackedScene" uid="uid://duju3atqgltkg" path="res://scenes/explosion/explosion.tscn" id="1_mnals"]
|
||||||
[ext_resource type="Script" uid="uid://bnee6amtc2bhj" path="res://forge/abilities/ForgeExplodingSwordBehavior.cs" id="1_ot53g"]
|
[ext_resource type="Script" uid="uid://bnee6amtc2bhj" path="res://forge/abilities/ForgeExplodingSwordBehavior.cs" id="1_ot53g"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://c2akxlg7tdb67" path="res://assets/ui/IconGodotNode/node/icon_projectile.png" id="2_l3coe"]
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("1_ot53g")
|
script = ExtResource("1_ot53g")
|
||||||
Explosion = ExtResource("1_mnals")
|
Explosion = ExtResource("1_mnals")
|
||||||
|
Name = "Exploding Sword"
|
||||||
|
Description = "Make the sword explode"
|
||||||
|
Icon = ExtResource("2_l3coe")
|
||||||
@@ -1,9 +1,10 @@
|
|||||||
[gd_resource type="Resource" script_class="ForgeEffectApplicationBehavior" format=3 uid="uid://1tmxayi3nygi"]
|
[gd_resource type="Resource" script_class="ForgeEffectApplicationBehavior" format=3 uid="uid://1tmxayi3nygi"]
|
||||||
|
|
||||||
[ext_resource type="Resource" uid="uid://bvidrwyuoos4g" path="res://scenes/player_controller/resources/forge/raise_flying_tick_event_periodically.tres" id="1_hlq5f"]
|
[ext_resource type="Resource" uid="uid://bvidrwyuoos4g" path="res://forge/resources/effect_datas/raise_flying_tick_event_periodically.tres" id="1_hlq5f"]
|
||||||
[ext_resource type="Script" uid="uid://cl5hudinl1rex" path="res://forge/abilities/ForgeEffectApplicationBehavior.cs" id="2_f5qgs"]
|
[ext_resource type="Script" uid="uid://cl5hudinl1rex" path="res://forge/abilities/ForgeEffectApplicationBehavior.cs" id="2_f5qgs"]
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("2_f5qgs")
|
script = ExtResource("2_f5qgs")
|
||||||
EffectData = ExtResource("1_hlq5f")
|
EffectData = ExtResource("1_hlq5f")
|
||||||
|
Name = "Flying tick application"
|
||||||
metadata/_custom_type_script = "uid://cl5hudinl1rex"
|
metadata/_custom_type_script = "uid://cl5hudinl1rex"
|
||||||
17
forge/resources/cues/player_health_changed_cue.tres
Normal file
17
forge/resources/cues/player_health_changed_cue.tres
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeCue" format=3 uid="uid://bsqvfefpb7jix"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_tvgrb"]
|
||||||
|
[ext_resource type="Script" uid="uid://cmrsxccn0ei4j" path="res://addons/forge/resources/ForgeCue.cs" id="2_dyb6j"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_f35o6"]
|
||||||
|
script = ExtResource("1_tvgrb")
|
||||||
|
ContainerTags = Array[String](["cues.resources.health", "character.player"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("2_dyb6j")
|
||||||
|
CueKeys = SubResource("Resource_f35o6")
|
||||||
|
MaxValue = 100
|
||||||
|
MagnitudeType = 2
|
||||||
|
MagnitudeAttribute = "PlayerAttributeSet.Health"
|
||||||
|
metadata/_custom_type_script = "uid://cmrsxccn0ei4j"
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
[gd_resource type="Resource" script_class="ForgeCue" format=3 uid="uid://dn7b8frkoxpxr"]
|
[gd_resource type="Resource" script_class="ForgeCue" format=3 uid="uid://dn7b8frkoxpxr"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_lbula"]
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_0pc1u"]
|
||||||
[ext_resource type="Script" uid="uid://cmrsxccn0ei4j" path="res://addons/forge/resources/ForgeCue.cs" id="2_jijlk"]
|
[ext_resource type="Script" uid="uid://cmrsxccn0ei4j" path="res://addons/forge/resources/ForgeCue.cs" id="2_g0vcr"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_4mhqs"]
|
[sub_resource type="Resource" id="Resource_4mhqs"]
|
||||||
script = ExtResource("1_lbula")
|
script = ExtResource("1_0pc1u")
|
||||||
ContainerTags = Array[String](["cues.resources.mana"])
|
ContainerTags = Array[String](["cues.resources.mana"])
|
||||||
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("2_jijlk")
|
script = ExtResource("2_g0vcr")
|
||||||
CueKeys = SubResource("Resource_4mhqs")
|
CueKeys = SubResource("Resource_4mhqs")
|
||||||
MaxValue = 100
|
MaxValue = 100
|
||||||
MagnitudeType = 2
|
MagnitudeType = 2
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeDamageExecution" format=3 uid="uid://4rkwr10pc6tp"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cfx62w40nd84v" path="res://forge/calculators/ForgeDamageExecution.cs" id="1_bo86y"]
|
||||||
|
[ext_resource type="Resource" uid="uid://sn6kndc6ukic" path="res://forge/resources/tag_containers/on_damage_dealt.tres" id="1_hmxxf"]
|
||||||
|
[ext_resource type="Resource" uid="uid://5tr54q0rdpho" path="res://forge/resources/tag_containers/on_damage_taken.tres" id="2_6r7e6"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_bo86y")
|
||||||
|
DamageDealerEventTags = ExtResource("1_hmxxf")
|
||||||
|
DamageReceiverEventTags = ExtResource("2_6r7e6")
|
||||||
|
metadata/_custom_type_script = "uid://cfx62w40nd84v"
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeKnockbackExecution" format=3 uid="uid://cc1qrmbp12fk8"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://b44cse62qru7j" path="res://scenes/components/knockback/RKnockback.cs" id="1_kcl5u"]
|
||||||
|
[ext_resource type="Resource" uid="uid://bhn27s8ne0uyg" path="res://forge/resources/tag_containers/on_knockback_dealt.tres" id="2_oqtq1"]
|
||||||
|
[ext_resource type="Resource" uid="uid://bkr6uu57wm3o3" path="res://forge/resources/tag_containers/on_knockback_received.tres" id="3_1va1b"]
|
||||||
|
[ext_resource type="Resource" uid="uid://45l7vnfs72b" path="res://forge/resources/tag_containers/knockbackable_tag.tres" id="4_0i0oh"]
|
||||||
|
[ext_resource type="Script" uid="uid://diondfg5xp78h" path="res://forge/calculators/ForgeKnockbackExecution.cs" id="5_babc1"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_6x2ov"]
|
||||||
|
script = ExtResource("1_kcl5u")
|
||||||
|
Modifier = 50.0
|
||||||
|
metadata/_custom_type_script = "uid://b44cse62qru7j"
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("5_babc1")
|
||||||
|
KnockbackableTag = ExtResource("4_0i0oh")
|
||||||
|
Knockback = SubResource("Resource_6x2ov")
|
||||||
|
KnockbackDealerEventTags = ExtResource("2_oqtq1")
|
||||||
|
KnockbackReceiverEventTags = ExtResource("3_1va1b")
|
||||||
|
metadata/_custom_type_script = "uid://diondfg5xp78h"
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeRaiseEventTagExecution" format=3 uid="uid://dlu7l5egpexnn"]
|
||||||
|
|
||||||
|
[ext_resource type="Resource" uid="uid://sn6kndc6ukic" path="res://forge/resources/tag_containers/on_damage_dealt.tres" id="1_cum8v"]
|
||||||
|
[ext_resource type="Resource" uid="uid://5tr54q0rdpho" path="res://forge/resources/tag_containers/on_damage_taken.tres" id="2_w48xp"]
|
||||||
|
[ext_resource type="Script" uid="uid://br7ut4lbau66w" path="res://forge/calculators/ForgeRaiseEventTagExecution.cs" id="3_ggrwn"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("3_ggrwn")
|
||||||
|
EventTags = ExtResource("1_cum8v")
|
||||||
|
TargetEventTags = ExtResource("2_w48xp")
|
||||||
|
metadata/_custom_type_script = "uid://br7ut4lbau66w"
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
[gd_resource type="Resource" script_class="ForgeRaiseEventTagExecution" format=3 uid="uid://oe2suroa1klj"]
|
[gd_resource type="Resource" script_class="ForgeRaiseEventTagExecution" format=3 uid="uid://oe2suroa1klj"]
|
||||||
|
|
||||||
[ext_resource type="Resource" uid="uid://x7vtcobi7s4r" path="res://scenes/player_controller/resources/forge/weapon_flyingtick_tagcontainer.tres" id="1_ce5fv"]
|
[ext_resource type="Resource" uid="uid://x7vtcobi7s4r" path="res://forge/resources/tag_containers/on_weapon_flyingtick.tres" id="1_ce5fv"]
|
||||||
[ext_resource type="Script" uid="uid://br7ut4lbau66w" path="res://forge/calculators/ForgeRaiseEventTagExecution.cs" id="2_am2ak"]
|
[ext_resource type="Script" uid="uid://br7ut4lbau66w" path="res://forge/calculators/ForgeRaiseEventTagExecution.cs" id="2_am2ak"]
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
11
forge/resources/effect_components/damageable.tres
Normal file
11
forge/resources/effect_components/damageable.tres
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[gd_resource type="Resource" script_class="TargetTagRequirements" format=3 uid="uid://bpovqvlqv5bs5"]
|
||||||
|
|
||||||
|
[ext_resource type="Resource" uid="uid://cw2ytd34jsxj" path="res://forge/resources/tag_containers/immune_damage.tres" id="1_8qlnl"]
|
||||||
|
[ext_resource type="Resource" uid="uid://bsogx7yhedjry" path="res://forge/resources/tag_containers/trait_damageable.tres" id="2_vxkk1"]
|
||||||
|
[ext_resource type="Script" uid="uid://b0eq12mjqfage" path="res://addons/forge/resources/components/TargetTagRequirements.cs" id="3_1mj5a"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("3_1mj5a")
|
||||||
|
ApplicationRequiredTags = ExtResource("2_vxkk1")
|
||||||
|
ApplicationIgnoredTags = ExtResource("1_8qlnl")
|
||||||
|
metadata/_custom_type_script = "uid://b0eq12mjqfage"
|
||||||
@@ -39,7 +39,7 @@ script = ExtResource("3_fp8ou")
|
|||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_mbpss"]
|
[sub_resource type="Resource" id="Resource_mbpss"]
|
||||||
script = ExtResource("3_fp8ou")
|
script = ExtResource("3_fp8ou")
|
||||||
BaseValue = 1.0
|
BaseValue = 2.0
|
||||||
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_exi3e"]
|
[sub_resource type="Resource" id="Resource_exi3e"]
|
||||||
@@ -1,54 +1,54 @@
|
|||||||
[gd_resource type="Resource" script_class="ForgeEffectData" format=3 uid="uid://dh437cuxgjv6b"]
|
[gd_resource type="Resource" script_class="ForgeEffectData" format=3 uid="uid://dh437cuxgjv6b"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="1_mlifq"]
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_b244r"]
|
||||||
[ext_resource type="Resource" uid="uid://dn7b8frkoxpxr" path="res://scenes/player_controller/resources/forge/player_mana_changed_cue.tres" id="1_nsr3v"]
|
[ext_resource type="Script" uid="uid://b0eq12mjqfage" path="res://addons/forge/resources/components/TargetTagRequirements.cs" id="2_h46co"]
|
||||||
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_q8tml"]
|
[ext_resource type="Resource" uid="uid://dn7b8frkoxpxr" path="res://forge/resources/cues/player_mana_changed_cue.tres" id="3_kw6jm"]
|
||||||
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="2_5tp50"]
|
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="4_fgmkc"]
|
||||||
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="2_pm3n3"]
|
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="5_m4art"]
|
||||||
[ext_resource type="Script" uid="uid://b0eq12mjqfage" path="res://addons/forge/resources/components/TargetTagRequirements.cs" id="2_xbgy2"]
|
[ext_resource type="Script" uid="uid://bdfcavbjyhxxa" path="res://addons/forge/resources/ForgeModifier.cs" id="6_73cww"]
|
||||||
[ext_resource type="Script" uid="uid://bdfcavbjyhxxa" path="res://addons/forge/resources/ForgeModifier.cs" id="3_nsr3v"]
|
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="7_xa46f"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_5yygy"]
|
[sub_resource type="Resource" id="Resource_5yygy"]
|
||||||
script = ExtResource("1_q8tml")
|
script = ExtResource("1_b244r")
|
||||||
ContainerTags = Array[String](["character.player.mana.regen.inhibited", "cues.resources.mana.inhibited"])
|
ContainerTags = Array[String](["character.player.mana.regen.inhibited", "cues.resources.mana.inhibited"])
|
||||||
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_ncjx6"]
|
[sub_resource type="Resource" id="Resource_ncjx6"]
|
||||||
script = ExtResource("2_xbgy2")
|
script = ExtResource("2_h46co")
|
||||||
OngoingIgnoredTags = SubResource("Resource_5yygy")
|
OngoingIgnoredTags = SubResource("Resource_5yygy")
|
||||||
metadata/_custom_type_script = "uid://b0eq12mjqfage"
|
metadata/_custom_type_script = "uid://b0eq12mjqfage"
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_pm3n3"]
|
[sub_resource type="Resource" id="Resource_pm3n3"]
|
||||||
script = ExtResource("1_mlifq")
|
script = ExtResource("4_fgmkc")
|
||||||
BaseValue = 1
|
BaseValue = 1
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_q8tml"]
|
[sub_resource type="Resource" id="Resource_q8tml"]
|
||||||
script = ExtResource("2_pm3n3")
|
script = ExtResource("5_m4art")
|
||||||
BaseValue = 1.0
|
BaseValue = 1.0
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_xbgy2"]
|
[sub_resource type="Resource" id="Resource_xbgy2"]
|
||||||
script = ExtResource("2_pm3n3")
|
script = ExtResource("5_m4art")
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_rhldn"]
|
[sub_resource type="Resource" id="Resource_rhldn"]
|
||||||
script = ExtResource("2_pm3n3")
|
script = ExtResource("5_m4art")
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_p6h8c"]
|
[sub_resource type="Resource" id="Resource_p6h8c"]
|
||||||
script = ExtResource("2_pm3n3")
|
script = ExtResource("5_m4art")
|
||||||
BaseValue = 1.0
|
BaseValue = 1.0
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_yqxv4"]
|
[sub_resource type="Resource" id="Resource_yqxv4"]
|
||||||
script = ExtResource("2_pm3n3")
|
script = ExtResource("5_m4art")
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_b6opn"]
|
[sub_resource type="Resource" id="Resource_b6opn"]
|
||||||
script = ExtResource("2_pm3n3")
|
script = ExtResource("5_m4art")
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_5frso"]
|
[sub_resource type="Resource" id="Resource_5frso"]
|
||||||
script = ExtResource("2_pm3n3")
|
script = ExtResource("5_m4art")
|
||||||
BaseValue = 2.0
|
BaseValue = 2.0
|
||||||
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_okenf"]
|
[sub_resource type="Resource" id="Resource_okenf"]
|
||||||
script = ExtResource("3_nsr3v")
|
script = ExtResource("6_73cww")
|
||||||
Attribute = "PlayerAttributeSet.Mana"
|
Attribute = "PlayerAttributeSet.Mana"
|
||||||
ScalableFloat = SubResource("Resource_5frso")
|
ScalableFloat = SubResource("Resource_5frso")
|
||||||
Coefficient = SubResource("Resource_p6h8c")
|
Coefficient = SubResource("Resource_p6h8c")
|
||||||
@@ -60,16 +60,16 @@ CalculatorPostMultiplyAdditiveValue = SubResource("Resource_xbgy2")
|
|||||||
metadata/_custom_type_script = "uid://bdfcavbjyhxxa"
|
metadata/_custom_type_script = "uid://bdfcavbjyhxxa"
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_w35mq"]
|
[sub_resource type="Resource" id="Resource_w35mq"]
|
||||||
script = ExtResource("2_pm3n3")
|
script = ExtResource("5_m4art")
|
||||||
BaseValue = 0.1
|
BaseValue = 0.1
|
||||||
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_nsr3v"]
|
[sub_resource type="Resource" id="Resource_nsr3v"]
|
||||||
script = ExtResource("1_mlifq")
|
script = ExtResource("4_fgmkc")
|
||||||
BaseValue = 1
|
BaseValue = 1
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("2_5tp50")
|
script = ExtResource("7_xa46f")
|
||||||
Name = "Mana Regeneration"
|
Name = "Mana Regeneration"
|
||||||
Modifiers = Array[Object]([SubResource("Resource_okenf")])
|
Modifiers = Array[Object]([SubResource("Resource_okenf")])
|
||||||
Components = [SubResource("Resource_ncjx6")]
|
Components = [SubResource("Resource_ncjx6")]
|
||||||
@@ -79,5 +79,5 @@ HasPeriodicApplication = true
|
|||||||
Period = SubResource("Resource_w35mq")
|
Period = SubResource("Resource_w35mq")
|
||||||
StackLimit = SubResource("Resource_nsr3v")
|
StackLimit = SubResource("Resource_nsr3v")
|
||||||
InitialStack = SubResource("Resource_pm3n3")
|
InitialStack = SubResource("Resource_pm3n3")
|
||||||
Cues = Array[Object]([ExtResource("1_nsr3v")])
|
Cues = Array[Object]([ExtResource("3_kw6jm")])
|
||||||
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
[gd_resource type="Resource" script_class="ForgeEffectData" format=3 uid="uid://bvidrwyuoos4g"]
|
[gd_resource type="Resource" script_class="ForgeEffectData" format=3 uid="uid://bvidrwyuoos4g"]
|
||||||
|
|
||||||
[ext_resource type="Resource" uid="uid://oe2suroa1klj" path="res://scenes/player_controller/resources/forge/raise_flying_tick_event.tres" id="1_cd13a"]
|
[ext_resource type="Resource" uid="uid://oe2suroa1klj" path="res://forge/resources/custom_executions/raise_flying_tick_event.tres" id="1_cd13a"]
|
||||||
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="2_yyxtw"]
|
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="2_yyxtw"]
|
||||||
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="3_skmyt"]
|
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="3_skmyt"]
|
||||||
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="4_7ma6b"]
|
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="4_7ma6b"]
|
||||||
70
forge/resources/effect_datas/temp_invincibility.tres
Normal file
70
forge/resources/effect_datas/temp_invincibility.tres
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeEffectData" format=3 uid="uid://c4ea6ktafqe0r"]
|
||||||
|
|
||||||
|
[ext_resource type="Resource" uid="uid://cw2ytd34jsxj" path="res://forge/resources/tag_containers/immune_damage.tres" id="1_suvh6"]
|
||||||
|
[ext_resource type="Script" uid="uid://dngf30hxy5go4" path="res://addons/forge/resources/components/ModifierTags.cs" id="2_7y7k0"]
|
||||||
|
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="3_wdmyo"]
|
||||||
|
[ext_resource type="Script" uid="uid://2gm1hdhi8u08" path="res://addons/forge/resources/magnitudes/ForgeModifierMagnitude.cs" id="4_m2dme"]
|
||||||
|
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="5_uck3v"]
|
||||||
|
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="6_gt48y"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_xltxv"]
|
||||||
|
script = ExtResource("2_7y7k0")
|
||||||
|
TagsToAdd = ExtResource("1_suvh6")
|
||||||
|
metadata/_custom_type_script = "uid://dngf30hxy5go4"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_60xl1"]
|
||||||
|
script = ExtResource("3_wdmyo")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_2rev5"]
|
||||||
|
script = ExtResource("3_wdmyo")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_kxytj"]
|
||||||
|
script = ExtResource("3_wdmyo")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_e5nje"]
|
||||||
|
script = ExtResource("3_wdmyo")
|
||||||
|
BaseValue = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_xc8ja"]
|
||||||
|
script = ExtResource("3_wdmyo")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_tan32"]
|
||||||
|
script = ExtResource("3_wdmyo")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_l52b0"]
|
||||||
|
script = ExtResource("3_wdmyo")
|
||||||
|
BaseValue = 0.3
|
||||||
|
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_6jn6y"]
|
||||||
|
script = ExtResource("4_m2dme")
|
||||||
|
ScalableFloat = SubResource("Resource_l52b0")
|
||||||
|
Coefficient = SubResource("Resource_e5nje")
|
||||||
|
PreMultiplyAdditiveValue = SubResource("Resource_tan32")
|
||||||
|
PostMultiplyAdditiveValue = SubResource("Resource_xc8ja")
|
||||||
|
CalculatorCoefficient = SubResource("Resource_60xl1")
|
||||||
|
CalculatorPreMultiplyAdditiveValue = SubResource("Resource_kxytj")
|
||||||
|
CalculatorPostMultiplyAdditiveValue = SubResource("Resource_2rev5")
|
||||||
|
metadata/_custom_type_script = "uid://2gm1hdhi8u08"
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_ev6w4"]
|
||||||
|
script = ExtResource("5_uck3v")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_u8xa8"]
|
||||||
|
script = ExtResource("5_uck3v")
|
||||||
|
BaseValue = 1
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("6_gt48y")
|
||||||
|
Name = "ApplyInvincibility"
|
||||||
|
Modifiers = []
|
||||||
|
Components = Array[Object]([SubResource("Resource_xltxv")])
|
||||||
|
Executions = []
|
||||||
|
DurationType = 2
|
||||||
|
Duration = SubResource("Resource_6jn6y")
|
||||||
|
StackLimit = SubResource("Resource_u8xa8")
|
||||||
|
InitialStack = SubResource("Resource_ev6w4")
|
||||||
|
Cues = []
|
||||||
|
metadata/_custom_type_script = "uid://b83hf13nj37k3"
|
||||||
8
forge/resources/tag_containers/enemy_base_tags.tres
Normal file
8
forge/resources/tag_containers/enemy_base_tags.tres
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeTagContainer" format=3 uid="uid://bocsykxbh8l0g"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_kdy2b"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_kdy2b")
|
||||||
|
ContainerTags = Array[String](["character.enemy", "traits.damageable", "traits.knockbackable"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
8
forge/resources/tag_containers/immune_damage.tres
Normal file
8
forge/resources/tag_containers/immune_damage.tres
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeTagContainer" format=3 uid="uid://cw2ytd34jsxj"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_vmvhu"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_vmvhu")
|
||||||
|
ContainerTags = Array[String](["immunity.damage"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
8
forge/resources/tag_containers/knockbackable_tag.tres
Normal file
8
forge/resources/tag_containers/knockbackable_tag.tres
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeTag" format=3 uid="uid://45l7vnfs72b"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://dpakv7agvir6y" path="res://addons/forge/resources/ForgeTag.cs" id="1_1cy5u"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_1cy5u")
|
||||||
|
Tag = "traits.knockbackable"
|
||||||
|
metadata/_custom_type_script = "uid://dpakv7agvir6y"
|
||||||
8
forge/resources/tag_containers/on_damage_dealt.tres
Normal file
8
forge/resources/tag_containers/on_damage_dealt.tres
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeTagContainer" format=3 uid="uid://sn6kndc6ukic"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_4beov"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_4beov")
|
||||||
|
ContainerTags = Array[String](["events.combat.hit"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
8
forge/resources/tag_containers/on_damage_taken.tres
Normal file
8
forge/resources/tag_containers/on_damage_taken.tres
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeTagContainer" format=3 uid="uid://5tr54q0rdpho"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_nvopg"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_nvopg")
|
||||||
|
ContainerTags = Array[String](["events.combat.damage"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
8
forge/resources/tag_containers/on_knockback_dealt.tres
Normal file
8
forge/resources/tag_containers/on_knockback_dealt.tres
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeTagContainer" format=3 uid="uid://bhn27s8ne0uyg"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_kgxiq"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_kgxiq")
|
||||||
|
ContainerTags = Array[String](["events.combat.knockback_dealt"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeTagContainer" format=3 uid="uid://bkr6uu57wm3o3"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_ro1gp"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_ro1gp")
|
||||||
|
ContainerTags = Array[String](["events.combat.knockback_received"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
8
forge/resources/tag_containers/trait_damageable.tres
Normal file
8
forge/resources/tag_containers/trait_damageable.tres
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ForgeTagContainer" format=3 uid="uid://bsogx7yhedjry"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_wyb42"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_wyb42")
|
||||||
|
ContainerTags = Array[String](["traits.damageable"])
|
||||||
|
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
|
||||||
@@ -39,6 +39,7 @@
|
|||||||
[ext_resource type="Resource" uid="uid://brswsknpgwal2" path="res://inputs/base_mode/move_front.tres" id="34_rvpjj"]
|
[ext_resource type="Resource" uid="uid://brswsknpgwal2" path="res://inputs/base_mode/move_front.tres" id="34_rvpjj"]
|
||||||
[ext_resource type="Resource" uid="uid://ca68r7n3bwba3" path="res://inputs/base_mode/toolbox.tres" id="34_s8kjn"]
|
[ext_resource type="Resource" uid="uid://ca68r7n3bwba3" path="res://inputs/base_mode/toolbox.tres" id="34_s8kjn"]
|
||||||
[ext_resource type="Resource" uid="uid://f3vs6l4m623s" path="res://inputs/base_mode/move_left.tres" id="35_s8kjn"]
|
[ext_resource type="Resource" uid="uid://f3vs6l4m623s" path="res://inputs/base_mode/move_left.tres" id="35_s8kjn"]
|
||||||
|
[ext_resource type="Resource" uid="uid://7ne5mdytlidm" path="res://inputs/base_mode/inventory.tres" id="36_4uwbh"]
|
||||||
[ext_resource type="Resource" uid="uid://t612lts1wi1s" path="res://inputs/base_mode/move_right.tres" id="36_vibkn"]
|
[ext_resource type="Resource" uid="uid://t612lts1wi1s" path="res://inputs/base_mode/move_right.tres" id="36_vibkn"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_vkvga"]
|
[sub_resource type="Resource" id="Resource_vkvga"]
|
||||||
@@ -487,16 +488,16 @@ action = ExtResource("29_q86qg")
|
|||||||
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ai85f"), SubResource("Resource_1ycft")])
|
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ai85f"), SubResource("Resource_1ycft")])
|
||||||
metadata/_guide_input_mappings_collapsed = false
|
metadata/_guide_input_mappings_collapsed = false
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_8e1uk"]
|
[sub_resource type="Resource" id="Resource_qd4lk"]
|
||||||
script = ExtResource("19_qkgmj")
|
script = ExtResource("19_qkgmj")
|
||||||
button = 4
|
button = 11
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_k8i2y"]
|
[sub_resource type="Resource" id="Resource_k8i2y"]
|
||||||
script = ExtResource("15_fykw6")
|
script = ExtResource("15_fykw6")
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_ilhhf"]
|
[sub_resource type="Resource" id="Resource_ilhhf"]
|
||||||
script = ExtResource("3_yp12v")
|
script = ExtResource("3_yp12v")
|
||||||
input = SubResource("Resource_8e1uk")
|
input = SubResource("Resource_qd4lk")
|
||||||
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_k8i2y")])
|
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_k8i2y")])
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_qrtf1"]
|
[sub_resource type="Resource" id="Resource_qrtf1"]
|
||||||
@@ -516,6 +517,35 @@ script = ExtResource("1_qmhk6")
|
|||||||
action = ExtResource("34_s8kjn")
|
action = ExtResource("34_s8kjn")
|
||||||
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ilhhf"), SubResource("Resource_4uwbh")])
|
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ilhhf"), SubResource("Resource_4uwbh")])
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_g1qol"]
|
||||||
|
script = ExtResource("19_qkgmj")
|
||||||
|
button = 4
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_xmmrk"]
|
||||||
|
script = ExtResource("15_fykw6")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_oq22i"]
|
||||||
|
script = ExtResource("3_yp12v")
|
||||||
|
input = SubResource("Resource_g1qol")
|
||||||
|
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_xmmrk")])
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_krlhw"]
|
||||||
|
script = ExtResource("30_cvxqo")
|
||||||
|
key = 4194306
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_gpvxe"]
|
||||||
|
script = ExtResource("15_fykw6")
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_0nktr"]
|
||||||
|
script = ExtResource("3_yp12v")
|
||||||
|
input = SubResource("Resource_krlhw")
|
||||||
|
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_gpvxe")])
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_u35df"]
|
||||||
|
script = ExtResource("1_qmhk6")
|
||||||
|
action = ExtResource("36_4uwbh")
|
||||||
|
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_oq22i"), SubResource("Resource_0nktr")])
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_kcylj"]
|
[sub_resource type="Resource" id="Resource_kcylj"]
|
||||||
script = ExtResource("30_cvxqo")
|
script = ExtResource("30_cvxqo")
|
||||||
key = 83
|
key = 83
|
||||||
@@ -570,5 +600,5 @@ input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_7io5e")])
|
|||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("23_llfhp")
|
script = ExtResource("23_llfhp")
|
||||||
mappings = Array[ExtResource("1_qmhk6")]([SubResource("Resource_88x08"), SubResource("Resource_tgr2g"), SubResource("Resource_iarn8"), SubResource("Resource_cvxqo"), SubResource("Resource_tb8ii"), SubResource("Resource_iihs4"), SubResource("Resource_vibkn"), SubResource("Resource_2hs2y"), SubResource("Resource_d2r0d"), SubResource("Resource_xt1x5"), SubResource("Resource_ew1hw"), SubResource("Resource_3frwi"), SubResource("Resource_0qat1"), SubResource("Resource_vtk18"), SubResource("Resource_weyro"), SubResource("Resource_o5fur"), SubResource("Resource_fjku4"), SubResource("Resource_odnhd"), SubResource("Resource_0eff7"), SubResource("Resource_gt77e")])
|
mappings = Array[ExtResource("1_qmhk6")]([SubResource("Resource_88x08"), SubResource("Resource_tgr2g"), SubResource("Resource_iarn8"), SubResource("Resource_cvxqo"), SubResource("Resource_tb8ii"), SubResource("Resource_iihs4"), SubResource("Resource_vibkn"), SubResource("Resource_2hs2y"), SubResource("Resource_d2r0d"), SubResource("Resource_xt1x5"), SubResource("Resource_ew1hw"), SubResource("Resource_3frwi"), SubResource("Resource_0qat1"), SubResource("Resource_vtk18"), SubResource("Resource_weyro"), SubResource("Resource_o5fur"), SubResource("Resource_u35df"), SubResource("Resource_fjku4"), SubResource("Resource_odnhd"), SubResource("Resource_0eff7"), SubResource("Resource_gt77e")])
|
||||||
metadata/_custom_type_script = "uid://dsa1dnifd6w32"
|
metadata/_custom_type_script = "uid://dsa1dnifd6w32"
|
||||||
|
|||||||
7
inputs/base_mode/inventory.tres
Normal file
7
inputs/base_mode/inventory.tres
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[gd_resource type="Resource" script_class="GUIDEAction" format=3 uid="uid://7ne5mdytlidm"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cluhc11vixkf1" path="res://addons/guide/guide_action.gd" id="1_48ulw"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_48ulw")
|
||||||
|
metadata/_custom_type_script = "uid://cluhc11vixkf1"
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
using Gamesmiths.Forge.Abilities;
|
|
||||||
using Gamesmiths.Forge.Effects;
|
|
||||||
using Gamesmiths.Forge.Tags;
|
|
||||||
using Godot;
|
|
||||||
|
|
||||||
namespace Movementtests.interfaces;
|
|
||||||
|
|
||||||
public interface IAbilityBase<TCreation, TPayload>
|
|
||||||
{
|
|
||||||
AbilityData Ability(TCreation creationData, TagContainer? tags);
|
|
||||||
IAbilityBehavior<TPayload> Behavior(TCreation creationData);
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://de881c2xsbutk
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
using Godot;
|
|
||||||
|
|
||||||
namespace Movementtests.interfaces;
|
|
||||||
|
|
||||||
public interface IDamageDealer
|
|
||||||
{
|
|
||||||
[Export]
|
|
||||||
RDamage RDamage { get; set; }
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://wdqo51131g5
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Godot;
|
|
||||||
|
|
||||||
namespace Movementtests.interfaces;
|
|
||||||
|
|
||||||
public record DamageRecord(Vector3 SourceLocation, RDamage Damage);
|
|
||||||
|
|
||||||
public interface IDamageable
|
|
||||||
{
|
|
||||||
event Action<IDamageable, DamageRecord> DamageTaken;
|
|
||||||
|
|
||||||
DamageRecord TakeDamage(DamageRecord damageRecord);
|
|
||||||
DamageRecord ComputeDamage(DamageRecord damageRecord);
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://cf56b2ep3bu3j
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Godot;
|
|
||||||
|
|
||||||
namespace Movementtests.interfaces;
|
|
||||||
|
|
||||||
public record HealthChangedRecord(float CurrentHealth, float PreviousHealth, float MaxHealth);
|
|
||||||
|
|
||||||
public interface IHealthable
|
|
||||||
{
|
|
||||||
event Action<IHealthable, HealthChangedRecord> HealthChanged;
|
|
||||||
event Action<IHealthable> HealthDepleted;
|
|
||||||
|
|
||||||
[Export] RHealth? RHealth { get; set; }
|
|
||||||
|
|
||||||
float CurrentHealth { get; set; }
|
|
||||||
|
|
||||||
HealthChangedRecord ReduceHealth(IDamageable source, DamageRecord damageRecord);
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://bea2kvnu3kuhu
|
|
||||||
@@ -2,5 +2,5 @@ namespace Movementtests.interfaces;
|
|||||||
|
|
||||||
public interface IKillable
|
public interface IKillable
|
||||||
{
|
{
|
||||||
void Kill(IHealthable source);
|
void Kill();
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
using Godot;
|
using Godot;
|
||||||
|
using Movementtests.scenes.components.knockback;
|
||||||
|
|
||||||
namespace Movementtests.interfaces;
|
namespace Movementtests.interfaces;
|
||||||
|
|
||||||
public record KnockbackRecord(DamageRecord DamageRecord, float ForceMultiplier = 1.0f);
|
public record KnockbackRecord(Vector3 Direction, float ForceMultiplier = 1.0f);
|
||||||
|
|
||||||
public interface IKnockbackable
|
public interface IKnockbackable
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,5 +3,5 @@ using Godot;
|
|||||||
|
|
||||||
interface ISpawnable
|
interface ISpawnable
|
||||||
{
|
{
|
||||||
void Initialize();
|
void Init();
|
||||||
}
|
}
|
||||||
@@ -5,10 +5,6 @@ namespace Movementtests.interfaces;
|
|||||||
|
|
||||||
public static class NodeExtensions
|
public static class NodeExtensions
|
||||||
{
|
{
|
||||||
public static IDamageable[] ToIDamageables(this GodotObject[] nodes)
|
|
||||||
{
|
|
||||||
return nodes == null ? System.Array.Empty<IDamageable>() : nodes.OfType<IDamageable>().ToArray();
|
|
||||||
}
|
|
||||||
public static IKillable[] ToIKillables(this GodotObject[] nodes)
|
public static IKillable[] ToIKillables(this GodotObject[] nodes)
|
||||||
{
|
{
|
||||||
return nodes == null ? System.Array.Empty<IKillable>() : nodes.OfType<IKillable>().ToArray();
|
return nodes == null ? System.Array.Empty<IKillable>() : nodes.OfType<IKillable>().ToArray();
|
||||||
|
|||||||
81
managers/InventoryManager.cs
Normal file
81
managers/InventoryManager.cs
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Chickensoft.AutoInject;
|
||||||
|
using Chickensoft.Introspection;
|
||||||
|
using Chickensoft.Sync.Primitives;
|
||||||
|
using Gamesmiths.Forge.Godot.Resources.Abilities;
|
||||||
|
using Godot;
|
||||||
|
using Movementtests.systems;
|
||||||
|
|
||||||
|
namespace Movementtests.managers;
|
||||||
|
|
||||||
|
public partial class WeaponEventAbilityData(WeaponSystem.WeaponEvent forEvent, ForgeAbilityBehavior ability)
|
||||||
|
: RefCounted
|
||||||
|
{
|
||||||
|
public WeaponSystem.WeaponEvent ForEvent { get; private set; } = forEvent;
|
||||||
|
public ForgeAbilityBehavior Ability { get; private set; } = ability;
|
||||||
|
}
|
||||||
|
|
||||||
|
[GlobalClass, Meta(typeof(IAutoNode))]
|
||||||
|
public partial class InventoryManager : Node, IDisposable
|
||||||
|
{
|
||||||
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
|
#region Signals
|
||||||
|
|
||||||
|
[Signal]
|
||||||
|
public delegate void WeaponEventAbilityAddedEventHandler(WeaponEventAbilityData data);
|
||||||
|
[Signal]
|
||||||
|
public delegate void WeaponEventAbilityRemovedEventHandler(WeaponEventAbilityData data);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private AutoSet<ForgeAbilityBehavior> _startedFlyingAbilities = new();
|
||||||
|
private AutoSet<ForgeAbilityBehavior> _flyingTickAbilities = new();
|
||||||
|
private AutoSet<ForgeAbilityBehavior> _stoppedFlyingAbilities = new();
|
||||||
|
|
||||||
|
public IAutoSet<ForgeAbilityBehavior> StartedFlyingAbilities => _startedFlyingAbilities;
|
||||||
|
public IAutoSet<ForgeAbilityBehavior> FlyingTickAbilities => _flyingTickAbilities;
|
||||||
|
public IAutoSet<ForgeAbilityBehavior> StoppedFlyingAbilities => _stoppedFlyingAbilities;
|
||||||
|
|
||||||
|
private readonly AutoMap<WeaponSystem.WeaponEvent, AutoSet<ForgeAbilityBehavior>> _weaponEventsInventory = new();
|
||||||
|
public IAutoMap<WeaponSystem.WeaponEvent, AutoSet<ForgeAbilityBehavior>> WeaponEventsInventory => _weaponEventsInventory;
|
||||||
|
|
||||||
|
public void OnReady()
|
||||||
|
{
|
||||||
|
_weaponEventsInventory[WeaponSystem.WeaponEvent.StartedFlying] = _startedFlyingAbilities;
|
||||||
|
_weaponEventsInventory[WeaponSystem.WeaponEvent.FlyingTick] = _flyingTickAbilities;
|
||||||
|
_weaponEventsInventory[WeaponSystem.WeaponEvent.StoppedFlying] = _stoppedFlyingAbilities;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void InitializeFromResource(WeaponInventory inventory)
|
||||||
|
{
|
||||||
|
_startedFlyingAbilities = new AutoSet<ForgeAbilityBehavior>(inventory.OnWeaponStartedFlyingAbilities);
|
||||||
|
_flyingTickAbilities = new AutoSet<ForgeAbilityBehavior>(inventory.OnWeaponFlyingTickAbilities);
|
||||||
|
_stoppedFlyingAbilities = new AutoSet<ForgeAbilityBehavior>(inventory.OnWeaponStoppedFlyingAbilities);
|
||||||
|
}
|
||||||
|
|
||||||
|
public new void Dispose()
|
||||||
|
{
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
|
||||||
|
_startedFlyingAbilities.Dispose();
|
||||||
|
_flyingTickAbilities.Dispose();
|
||||||
|
_stoppedFlyingAbilities.Dispose();
|
||||||
|
_weaponEventsInventory.Dispose();
|
||||||
|
|
||||||
|
base.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddAbilityForWeaponEvent(WeaponSystem.WeaponEvent forEvent, ForgeAbilityBehavior abilityBehavior)
|
||||||
|
{
|
||||||
|
var inventoryForEvent = _weaponEventsInventory[forEvent];
|
||||||
|
inventoryForEvent.Add(abilityBehavior);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveAbilityForWeaponEvent(WeaponSystem.WeaponEvent forEvent, ForgeAbilityBehavior abilityBehavior)
|
||||||
|
{
|
||||||
|
var inventoryForEvent = _weaponEventsInventory[forEvent];
|
||||||
|
inventoryForEvent.Remove(abilityBehavior);
|
||||||
|
}
|
||||||
|
}
|
||||||
1
managers/InventoryManager.cs.uid
Normal file
1
managers/InventoryManager.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://cgwhrwfqsiing
|
||||||
22
managers/WeaponInventory.cs
Normal file
22
managers/WeaponInventory.cs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Gamesmiths.Forge.Godot.Resources.Abilities;
|
||||||
|
using Godot;
|
||||||
|
|
||||||
|
namespace Movementtests.managers;
|
||||||
|
|
||||||
|
[GlobalClass]
|
||||||
|
public partial class WeaponInventory(
|
||||||
|
ForgeAbilityBehavior[] onWeaponStartedFlyingAbilities,
|
||||||
|
ForgeAbilityBehavior[] onWeaponFlyingTickAbilities,
|
||||||
|
ForgeAbilityBehavior[] onWeaponStoppedFlyingAbilities
|
||||||
|
) : Resource
|
||||||
|
{
|
||||||
|
[Export]
|
||||||
|
public ForgeAbilityBehavior[] OnWeaponStartedFlyingAbilities { get; set; } = onWeaponStartedFlyingAbilities;
|
||||||
|
[Export]
|
||||||
|
public ForgeAbilityBehavior[] OnWeaponFlyingTickAbilities { get; set; } = onWeaponFlyingTickAbilities;
|
||||||
|
[Export]
|
||||||
|
public ForgeAbilityBehavior[] OnWeaponStoppedFlyingAbilities { get; set; } = onWeaponStoppedFlyingAbilities;
|
||||||
|
|
||||||
|
public WeaponInventory() : this([], [], []) {}
|
||||||
|
}
|
||||||
1
managers/WeaponInventory.cs.uid
Normal file
1
managers/WeaponInventory.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://cgaahnfgxcrr6
|
||||||
92
maps/_templates/MainSceneTemplate.cs
Normal file
92
maps/_templates/MainSceneTemplate.cs
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
using Godot;
|
||||||
|
using System;
|
||||||
|
using Chickensoft.AutoInject;
|
||||||
|
using Chickensoft.Introspection;
|
||||||
|
using Gamesmiths.Forge.Cues;
|
||||||
|
using Gamesmiths.Forge.Godot.Core;
|
||||||
|
using Gamesmiths.Forge.Tags;
|
||||||
|
using Movementtests.interfaces;using Movementtests.managers;
|
||||||
|
using Movementtests.systems;
|
||||||
|
|
||||||
|
[Meta(
|
||||||
|
typeof(IAutoOn),
|
||||||
|
typeof(IAutoConnect),
|
||||||
|
typeof(IProvider)
|
||||||
|
)]
|
||||||
|
public partial class MainSceneTemplate : Node3D, IProvide<InventoryManager>, IProvide<TagsManager>, IProvide<CuesManager>
|
||||||
|
{
|
||||||
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
|
#region Nodes
|
||||||
|
|
||||||
|
[Node("PlayerFellRespawn")] public required Marker3D PlayerRespawnMarker { get; set; }
|
||||||
|
[Node("AnimationPlayer")] public required AnimationPlayer AnimationPlayer { get; set; }
|
||||||
|
[Node("PlayerFellTP")] public required Area3D PlayerFellPlane { get; set; }
|
||||||
|
[Node("DeathPlane")] public required Area3D DeathPlane { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private Node3D? Respawnabble { get; set; }
|
||||||
|
|
||||||
|
#region Exports
|
||||||
|
|
||||||
|
[Export] public WeaponInventory? InitialWeaponInventory { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public required InventoryManager InventoryManager { get; set; }
|
||||||
|
InventoryManager IProvide<InventoryManager>.Value() => InventoryManager;
|
||||||
|
|
||||||
|
TagsManager IProvide<TagsManager>.Value() => ForgeManagers.Instance.TagsManager;
|
||||||
|
CuesManager IProvide<CuesManager>.Value() => ForgeManagers.Instance.CuesManager;
|
||||||
|
|
||||||
|
public void OnReady()
|
||||||
|
{
|
||||||
|
PlayerFellPlane.BodyEntered += StartResetPlayerAnimation;
|
||||||
|
DeathPlane.BodyEntered += KillEnemy;
|
||||||
|
|
||||||
|
InventoryManager = new InventoryManager();
|
||||||
|
if (InitialWeaponInventory != null)
|
||||||
|
InventoryManager.InitializeFromResource(InitialWeaponInventory);
|
||||||
|
AddChild(InventoryManager);
|
||||||
|
|
||||||
|
this.Provide();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnProvided()
|
||||||
|
{
|
||||||
|
// You can optionally implement this method. It gets called once you call
|
||||||
|
// this.Provide() to inform AutoInject that the provided values are now
|
||||||
|
// available.
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ResetPlayerPosition()
|
||||||
|
{
|
||||||
|
if (Respawnabble == null || PlayerRespawnMarker == null) throw new Exception("Player or respawn marker is null");
|
||||||
|
Respawnabble.GlobalPosition = PlayerRespawnMarker.GlobalPosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StartResetPlayerAnimation(Node3D body)
|
||||||
|
{
|
||||||
|
if (body is WeaponSystem weapon)
|
||||||
|
{
|
||||||
|
if (PlayerRespawnMarker == null) throw new Exception("Respawn marker is null");
|
||||||
|
weapon.GlobalPosition = PlayerRespawnMarker.GlobalPosition;
|
||||||
|
weapon.SetLinearVelocity(Vector3.Down);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Respawnabble = body as PlayerController;
|
||||||
|
if (Respawnabble == null || AnimationPlayer == null) throw new Exception("Player or anim player is null");
|
||||||
|
AnimationPlayer.Play("player_fell");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void KillEnemy(Node3D body)
|
||||||
|
{
|
||||||
|
if (body is not IKillable killable)
|
||||||
|
{
|
||||||
|
// body.QueueFree();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
killable.Kill();
|
||||||
|
}
|
||||||
|
}
|
||||||
1
maps/_templates/MainSceneTemplate.cs.uid
Normal file
1
maps/_templates/MainSceneTemplate.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://br0f18u1iou2d
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
extends Node3D
|
|
||||||
|
|
||||||
|
|
||||||
@onready var player_fell_respawn: Marker3D = $PlayerFellRespawn
|
|
||||||
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
|
||||||
|
|
||||||
var _player: Node3D
|
|
||||||
|
|
||||||
func _on_player_fell_tp_body_entered(body: Node3D) -> void:
|
|
||||||
_player = body
|
|
||||||
animation_player.play("player_fell")
|
|
||||||
|
|
||||||
|
|
||||||
func reset_player_position() -> void:
|
|
||||||
if _player == null:
|
|
||||||
return
|
|
||||||
_player.position = player_fell_respawn.position
|
|
||||||
|
|
||||||
|
|
||||||
func _on_death_plane_body_entered(body: Node3D) -> void:
|
|
||||||
body.queue_free()
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://beof168aw2acj
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
[gd_scene format=3 uid="uid://55wehh6xombr"]
|
[gd_scene format=3 uid="uid://55wehh6xombr"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://beof168aw2acj" path="res://maps/_templates/main_scene_template.gd" id="1_5g5a0"]
|
[ext_resource type="Script" uid="uid://br0f18u1iou2d" path="res://maps/_templates/MainSceneTemplate.cs" id="1_5g5a0"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bkcsjsk2ciff" path="res://addons/maaacks_game_template/base/scenes/music_players/background_music_player.tscn" id="2_roiv2"]
|
[ext_resource type="PackedScene" uid="uid://bkcsjsk2ciff" path="res://addons/maaacks_game_template/base/scenes/music_players/background_music_player.tscn" id="2_roiv2"]
|
||||||
[ext_resource type="AudioStream" uid="uid://f8cvr5s041ej" path="res://assets/audio/ambiance/637083__nox_sound__ambiance_nature_night_cricket_calm_loop_stereo.wav" id="3_boadi"]
|
[ext_resource type="AudioStream" uid="uid://f8cvr5s041ej" path="res://assets/audio/ambiance/637083__nox_sound__ambiance_nature_night_cricket_calm_loop_stereo.wav" id="3_boadi"]
|
||||||
[ext_resource type="Script" uid="uid://cupqhe3qv7ero" path="res://tools/general_manager.gd" id="3_k6got"]
|
[ext_resource type="Script" uid="uid://cupqhe3qv7ero" path="res://tools/general_manager.gd" id="3_k6got"]
|
||||||
@@ -237,7 +237,7 @@ tracks/6/keys = {
|
|||||||
"transitions": PackedFloat32Array(1),
|
"transitions": PackedFloat32Array(1),
|
||||||
"values": [{
|
"values": [{
|
||||||
"args": [],
|
"args": [],
|
||||||
"method": &"reset_player_position"
|
"method": &"ResetPlayerPosition"
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -257,6 +257,9 @@ script = ExtResource("1_5g5a0")
|
|||||||
[node name="GuideDebugger" parent="DebugLayer" unique_id=636020765 instance=ExtResource("10_gm8ij")]
|
[node name="GuideDebugger" parent="DebugLayer" unique_id=636020765 instance=ExtResource("10_gm8ij")]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
|
[node name="InventoryLayer" type="CanvasLayer" parent="." unique_id=406590925]
|
||||||
|
layer = 10
|
||||||
|
|
||||||
[node name="BackgroundMusicPlayer" parent="." unique_id=879496303 instance=ExtResource("2_roiv2")]
|
[node name="BackgroundMusicPlayer" parent="." unique_id=879496303 instance=ExtResource("2_roiv2")]
|
||||||
stream = ExtResource("3_boadi")
|
stream = ExtResource("3_boadi")
|
||||||
|
|
||||||
@@ -285,7 +288,6 @@ libraries/ = SubResource("AnimationLibrary_nyvgt")
|
|||||||
|
|
||||||
[node name="Player" parent="." unique_id=1309399929 instance=ExtResource("17_clkha")]
|
[node name="Player" parent="." unique_id=1309399929 instance=ExtResource("17_clkha")]
|
||||||
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, 0, 0, 0)
|
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, 0, 0, 0)
|
||||||
TutorialDone = true
|
|
||||||
AccelerationAir = 1.5
|
AccelerationAir = 1.5
|
||||||
|
|
||||||
[node name="ShaderComp-Explosion" parent="Player" unique_id=1876014452 instance=ExtResource("9_r1bdn")]
|
[node name="ShaderComp-Explosion" parent="Player" unique_id=1876014452 instance=ExtResource("9_r1bdn")]
|
||||||
@@ -298,6 +300,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 300, 0)
|
|||||||
[node name="PlayerFellTP" type="Area3D" parent="." unique_id=1277888169]
|
[node name="PlayerFellTP" type="Area3D" parent="." unique_id=1277888169]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -200, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -200, 0)
|
||||||
collision_layer = 0
|
collision_layer = 0
|
||||||
|
collision_mask = 65537
|
||||||
monitorable = false
|
monitorable = false
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerFellTP" unique_id=1866249040]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerFellTP" unique_id=1866249040]
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ size = Vector3(6.75, 8.25, 7.25)
|
|||||||
|
|
||||||
[node name="Main" unique_id=955321579 instance=ExtResource("1_jyq54")]
|
[node name="Main" unique_id=955321579 instance=ExtResource("1_jyq54")]
|
||||||
|
|
||||||
[node name="DirectionalLight3D" parent="." index="5" unique_id=1357990191]
|
[node name="DirectionalLight3D" parent="." index="6" unique_id=1357990191]
|
||||||
transform = Transform3D(-0.1772511, 0.44628847, 0.87715954, 0.49540228, -0.72966087, 0.4713508, 0.85038733, 0.51809436, -0.09175911, 0, 0, 0)
|
transform = Transform3D(-0.1772511, 0.44628847, 0.87715954, 0.49540228, -0.72966087, 0.4713508, 0.85038733, 0.51809436, -0.09175911, 0, 0, 0)
|
||||||
|
|
||||||
[node name="Greybox" type="CSGCombiner3D" parent="." index="7" unique_id=2082385716]
|
[node name="Greybox" type="CSGCombiner3D" parent="." index="7" unique_id=2082385716]
|
||||||
@@ -907,9 +907,9 @@ light_energy = 8.571
|
|||||||
omni_range = 7.0
|
omni_range = 7.0
|
||||||
|
|
||||||
[node name="OmniLight3D29" type="OmniLight3D" parent="Lights" index="24" unique_id=2143811783]
|
[node name="OmniLight3D29" type="OmniLight3D" parent="Lights" index="24" unique_id=2143811783]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -37, 25.5, -16.5)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -37, 16.75, -18.75)
|
||||||
light_energy = 4.004
|
light_energy = 4.004
|
||||||
omni_range = 7.0
|
omni_range = 9.25
|
||||||
|
|
||||||
[node name="OmniLight3D20" type="OmniLight3D" parent="Lights" index="25" unique_id=1665621589]
|
[node name="OmniLight3D20" type="OmniLight3D" parent="Lights" index="25" unique_id=1665621589]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -37, 24.5, -35.25)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -37, 24.5, -35.25)
|
||||||
@@ -934,14 +934,19 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -33.5, 24.5, -47)
|
|||||||
light_energy = 2.725
|
light_energy = 2.725
|
||||||
omni_range = 10.0
|
omni_range = 10.0
|
||||||
|
|
||||||
[node name="OmniLight3D25" type="OmniLight3D" parent="Lights" index="30" unique_id=727558952]
|
[node name="OmniLight3D34" type="OmniLight3D" parent="Lights" index="30" unique_id=2065211844]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -36.25, 13.75, -45.5)
|
||||||
|
light_energy = 2.725
|
||||||
|
omni_range = 10.0
|
||||||
|
|
||||||
|
[node name="OmniLight3D25" type="OmniLight3D" parent="Lights" index="31" unique_id=727558952]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -28, 24.5, -51)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -28, 24.5, -51)
|
||||||
|
|
||||||
[node name="OmniLight3D26" type="OmniLight3D" parent="Lights" index="31" unique_id=1646376304]
|
[node name="OmniLight3D26" type="OmniLight3D" parent="Lights" index="32" unique_id=1646376304]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 24.5, -51.5)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 24.5, -51.5)
|
||||||
omni_range = 7.0
|
omni_range = 7.0
|
||||||
|
|
||||||
[node name="OmniLight3D27" type="OmniLight3D" parent="Lights" index="32" unique_id=1849438050]
|
[node name="OmniLight3D27" type="OmniLight3D" parent="Lights" index="33" unique_id=1849438050]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 24.5, -51.5)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 24.5, -51.5)
|
||||||
omni_range = 4.5
|
omni_range = 4.5
|
||||||
|
|
||||||
@@ -1047,10 +1052,10 @@ tuto_text = "Select next level when ready"
|
|||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.875, 1.125, -4.625)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.875, 1.125, -4.625)
|
||||||
shape = SubResource("BoxShape3D_7hd1j")
|
shape = SubResource("BoxShape3D_7hd1j")
|
||||||
|
|
||||||
[node name="Player" parent="." index="11" unique_id=1309399929]
|
[node name="Player" parent="." index="12" unique_id=1309399929]
|
||||||
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, -0.5, 0.4102497, 0.5415039)
|
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, -0.5, 0.4102497, 0.5415039)
|
||||||
HasSword = false
|
HasSword = false
|
||||||
HasParry = false
|
HasParry = false
|
||||||
|
|
||||||
[node name="PlayerFellRespawn" parent="." index="12" unique_id=479136076]
|
[node name="PlayerFellRespawn" parent="." index="13" unique_id=479136076]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.25, -1.25)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.25, -1.25)
|
||||||
|
|||||||
@@ -7,8 +7,6 @@
|
|||||||
[ext_resource type="PackedScene" uid="uid://cmlud1hwkd6sv" path="res://scenes/enemies/flying_enemy/flying_enemy.tscn" id="5_dl1un"]
|
[ext_resource type="PackedScene" uid="uid://cmlud1hwkd6sv" path="res://scenes/enemies/flying_enemy/flying_enemy.tscn" id="5_dl1un"]
|
||||||
[ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://scenes/components/movement/RMovement.cs" id="6_465vr"]
|
[ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://scenes/components/movement/RMovement.cs" id="6_465vr"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/grounded_enemy/grounded_enemy.tscn" id="7_egib5"]
|
[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/grounded_enemy/grounded_enemy.tscn" id="7_egib5"]
|
||||||
[ext_resource type="Script" uid="uid://baiapod3csndf" path="res://scenes/components/health/RHealth.cs" id="8_a01g8"]
|
|
||||||
[ext_resource type="Script" uid="uid://jitubgv6judn" path="res://scenes/components/damage/RDamage.cs" id="9_doqxp"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://b8aet6m4m2i83" path="res://scenes/tuto_trigger/TutoTrigger.tscn" id="10_vqwwk"]
|
[ext_resource type="PackedScene" uid="uid://b8aet6m4m2i83" path="res://scenes/tuto_trigger/TutoTrigger.tscn" id="10_vqwwk"]
|
||||||
[ext_resource type="Texture2D" uid="uid://nrhxjdpuje3f" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_lt_outline.svg" id="11_bdsxx"]
|
[ext_resource type="Texture2D" uid="uid://nrhxjdpuje3f" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_lt_outline.svg" id="11_bdsxx"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dx2mk8qd6g8uh" path="res://assets/ui/input-prompts/Keyboard & Mouse/Vector/mouse_right_outline.svg" id="12_2usyc"]
|
[ext_resource type="Texture2D" uid="uid://dx2mk8qd6g8uh" path="res://assets/ui/input-prompts/Keyboard & Mouse/Vector/mouse_right_outline.svg" id="12_2usyc"]
|
||||||
@@ -26,31 +24,6 @@ script = ExtResource("6_465vr")
|
|||||||
GravityModifier = 5.0
|
GravityModifier = 5.0
|
||||||
metadata/_custom_type_script = "uid://dtpxijlnb2c5"
|
metadata/_custom_type_script = "uid://dtpxijlnb2c5"
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_xy0m1"]
|
|
||||||
script = ExtResource("8_a01g8")
|
|
||||||
StartingHealth = 100.0
|
|
||||||
metadata/_custom_type_script = "uid://baiapod3csndf"
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_invhv"]
|
|
||||||
script = ExtResource("8_a01g8")
|
|
||||||
StartingHealth = 1.0
|
|
||||||
metadata/_custom_type_script = "uid://baiapod3csndf"
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_cgfmf"]
|
|
||||||
script = ExtResource("9_doqxp")
|
|
||||||
DamageType = 2
|
|
||||||
metadata/_custom_type_script = "uid://jitubgv6judn"
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_05lnh"]
|
|
||||||
script = ExtResource("8_a01g8")
|
|
||||||
StartingHealth = 100.0
|
|
||||||
metadata/_custom_type_script = "uid://baiapod3csndf"
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_t5o40"]
|
|
||||||
script = ExtResource("8_a01g8")
|
|
||||||
StartingHealth = 100.0
|
|
||||||
metadata/_custom_type_script = "uid://baiapod3csndf"
|
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_xy0m1"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_xy0m1"]
|
||||||
size = Vector3(3, 3.75, 3)
|
size = Vector3(3, 3.75, 3)
|
||||||
|
|
||||||
@@ -64,7 +37,7 @@ size = Vector3(5, 2.25, 3.75)
|
|||||||
size = Vector3(5.5, 4.5, 2)
|
size = Vector3(5.5, 4.5, 2)
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_prjj8"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_prjj8"]
|
||||||
size = Vector3(2, 3.25, 5.25)
|
size = Vector3(2, 3.25, 4)
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_trte5"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_trte5"]
|
||||||
size = Vector3(6.75, 8.25, 7.25)
|
size = Vector3(6.75, 8.25, 7.25)
|
||||||
@@ -184,151 +157,126 @@ RMovement = SubResource("Resource_nwk5u")
|
|||||||
[node name="Enemy3" parent="Playground/GroundedEnemies" index="0" unique_id=1159989424 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy3" parent="Playground/GroundedEnemies" index="0" unique_id=1159989424 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 25, 0, -8.336809)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 25, 0, -8.336809)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy11" parent="Playground/GroundedEnemies" index="1" unique_id=1747444936 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy11" parent="Playground/GroundedEnemies" index="1" unique_id=1747444936 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 17, 8, 3.6631908)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 17, 8, 3.6631908)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy12" parent="Playground/GroundedEnemies" index="2" unique_id=283117081 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy12" parent="Playground/GroundedEnemies" index="2" unique_id=283117081 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 36.5, 11, -4.836809)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 36.5, 11, -4.836809)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy13" parent="Playground/GroundedEnemies" index="3" unique_id=970022638 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy13" parent="Playground/GroundedEnemies" index="3" unique_id=970022638 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 36.5, 12, -19.33681)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 36.5, 12, -19.33681)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy18" parent="Playground/GroundedEnemies" index="4" unique_id=2077088475 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy18" parent="Playground/GroundedEnemies" index="4" unique_id=2077088475 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 30.5, 12, -19.33681)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 30.5, 12, -19.33681)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy19" parent="Playground/GroundedEnemies" index="5" unique_id=2023773341 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy19" parent="Playground/GroundedEnemies" index="5" unique_id=2023773341 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 36.5, 7.5, -19.33681)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 36.5, 7.5, -19.33681)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy25" parent="Playground/GroundedEnemies" index="6" unique_id=1101329723 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy25" parent="Playground/GroundedEnemies" index="6" unique_id=1101329723 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 46, 7.5, -19.33681)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 46, 7.5, -19.33681)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy26" parent="Playground/GroundedEnemies" index="7" unique_id=855220553 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy26" parent="Playground/GroundedEnemies" index="7" unique_id=855220553 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 46, 12, -35.336807)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 46, 12, -35.336807)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy20" parent="Playground/GroundedEnemies" index="8" unique_id=1255215986 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy20" parent="Playground/GroundedEnemies" index="8" unique_id=1255215986 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 30.5, 7.5, -19.33681)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 30.5, 7.5, -19.33681)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy21" parent="Playground/GroundedEnemies" index="9" unique_id=2098915426 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy21" parent="Playground/GroundedEnemies" index="9" unique_id=2098915426 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 36.5, 0.5, -19.33681)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 36.5, 0.5, -19.33681)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy22" parent="Playground/GroundedEnemies" index="10" unique_id=246912749 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy22" parent="Playground/GroundedEnemies" index="10" unique_id=246912749 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 30.5, 0.5, -19.33681)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 30.5, 0.5, -19.33681)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy14" parent="Playground/GroundedEnemies" index="11" unique_id=211015190 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy14" parent="Playground/GroundedEnemies" index="11" unique_id=211015190 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 41, 17.5, -33.336807)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 41, 17.5, -33.336807)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy15" parent="Playground/GroundedEnemies" index="12" unique_id=1164179421 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy15" parent="Playground/GroundedEnemies" index="12" unique_id=1164179421 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 31, 17.5, -33.336807)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 31, 17.5, -33.336807)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy16" parent="Playground/GroundedEnemies" index="13" unique_id=1169725422 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy16" parent="Playground/GroundedEnemies" index="13" unique_id=1169725422 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 24.5, 17.5, -33.336807)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 24.5, 17.5, -33.336807)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy17" parent="Playground/GroundedEnemies" index="14" unique_id=1951666189 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy17" parent="Playground/GroundedEnemies" index="14" unique_id=1951666189 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 17.5, 17.5, -22.836807)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 17.5, 17.5, -22.836807)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy23" parent="Playground/GroundedEnemies" index="15" unique_id=1348057502 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy23" parent="Playground/GroundedEnemies" index="15" unique_id=1348057502 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 17.5, 24.5, -43.336807)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 17.5, 24.5, -43.336807)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy24" parent="Playground/GroundedEnemies" index="16" unique_id=2068813971 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy24" parent="Playground/GroundedEnemies" index="16" unique_id=2068813971 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 45, 24.5, -43.336807)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 45, 24.5, -43.336807)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy4" parent="Playground/GroundedEnemies" index="17" unique_id=366059658 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy4" parent="Playground/GroundedEnemies" index="17" unique_id=366059658 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 10.5, 0, -18.33681)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 10.5, 0, -18.33681)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy7" parent="Playground/GroundedEnemies" index="18" unique_id=1389063523 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy7" parent="Playground/GroundedEnemies" index="18" unique_id=1389063523 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 25.5, 4, -27.33681)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 25.5, 4, -27.33681)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy27" parent="Playground/GroundedEnemies" index="19" unique_id=854456486 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy27" parent="Playground/GroundedEnemies" index="19" unique_id=854456486 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 20, 0, -44.836807)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 20, 0, -44.836807)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy10" parent="Playground/GroundedEnemies" index="20" unique_id=836898496 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy10" parent="Playground/GroundedEnemies" index="20" unique_id=836898496 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 30.5, 11, -33.336807)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 30.5, 11, -33.336807)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy8" parent="Playground/GroundedEnemies" index="21" unique_id=1015624071 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy8" parent="Playground/GroundedEnemies" index="21" unique_id=1015624071 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 34.5, 1.5, -27.33681)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 34.5, 1.5, -27.33681)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy9" parent="Playground/GroundedEnemies" index="22" unique_id=827865590 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy9" parent="Playground/GroundedEnemies" index="22" unique_id=827865590 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 46.5, 0, -27.33681)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 46.5, 0, -27.33681)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy5" parent="Playground/GroundedEnemies" index="23" unique_id=1267116862 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy5" parent="Playground/GroundedEnemies" index="23" unique_id=1267116862 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4, 0, -18.33681)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4, 0, -18.33681)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy6" parent="Playground/GroundedEnemies" index="24" unique_id=1147823180 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy6" parent="Playground/GroundedEnemies" index="24" unique_id=1147823180 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 16.5, 7, -17.33681)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 16.5, 7, -17.33681)
|
||||||
Target = NodePath("../../../Player")
|
Target = NodePath("../../../Player")
|
||||||
RHealth = SubResource("Resource_xy0m1")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Tutorial" type="CSGCombiner3D" parent="." index="8" unique_id=1168290062]
|
[node name="Tutorial" type="CSGCombiner3D" parent="." index="8" unique_id=1168290062]
|
||||||
@@ -343,24 +291,18 @@ transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, -7.25, 20.5, -27.5)
|
|||||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 1.3647223, 23.75, -13.75)
|
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 1.3647223, 23.75, -13.75)
|
||||||
|
|
||||||
[node name="Enemy28" parent="Tutorial" index="2" unique_id=1765389924 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy28" parent="Tutorial" index="2" unique_id=1765389924 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -5, 22, 16.5)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -5, 22, 15.5)
|
||||||
Target = NodePath("../../Player")
|
Target = NodePath("../../Player")
|
||||||
RHealth = SubResource("Resource_invhv")
|
|
||||||
RDamage = SubResource("Resource_cgfmf")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy29" parent="Tutorial" index="3" unique_id=1071267369 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy29" parent="Tutorial" index="3" unique_id=1071267369 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -10, 22, 28.75)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -10, 22, 28.75)
|
||||||
Target = NodePath("../../Player")
|
Target = NodePath("../../Player")
|
||||||
RHealth = SubResource("Resource_05lnh")
|
|
||||||
RDamage = SubResource("Resource_cgfmf")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Enemy30" parent="Tutorial" index="4" unique_id=1982933011 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
[node name="Enemy30" parent="Tutorial" index="4" unique_id=1982933011 node_paths=PackedStringArray("Target") instance=ExtResource("7_egib5")]
|
||||||
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0.25, 22, 28.75)
|
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0.25, 22, 28.75)
|
||||||
Target = NodePath("../../Player")
|
Target = NodePath("../../Player")
|
||||||
RHealth = SubResource("Resource_t5o40")
|
|
||||||
RDamage = SubResource("Resource_cgfmf")
|
|
||||||
RMovement = SubResource("Resource_nwk5u")
|
RMovement = SubResource("Resource_nwk5u")
|
||||||
|
|
||||||
[node name="Triggers" type="Node3D" parent="Tutorial" index="5" unique_id=1531131828]
|
[node name="Triggers" type="Node3D" parent="Tutorial" index="5" unique_id=1531131828]
|
||||||
@@ -420,7 +362,7 @@ input_related_text = "at enemy"
|
|||||||
tuto_text = "dash through"
|
tuto_text = "dash through"
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Tutorial/Triggers/TutoTrigger6" index="1" unique_id=1214410006]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Tutorial/Triggers/TutoTrigger6" index="1" unique_id=1214410006]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.625, 1.75, -0.75)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.625, 1.75, -0.125)
|
||||||
shape = SubResource("BoxShape3D_prjj8")
|
shape = SubResource("BoxShape3D_prjj8")
|
||||||
|
|
||||||
[node name="TutoTrigger7" parent="Tutorial/Triggers" index="5" unique_id=271532103 instance=ExtResource("10_vqwwk")]
|
[node name="TutoTrigger7" parent="Tutorial/Triggers" index="5" unique_id=271532103 instance=ExtResource("10_vqwwk")]
|
||||||
@@ -520,15 +462,15 @@ size = Vector3(1, 1, 4.75)
|
|||||||
material = ExtResource("3_4m8g1")
|
material = ExtResource("3_4m8g1")
|
||||||
|
|
||||||
[node name="CSGBox3D137" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="10" unique_id=1930091014]
|
[node name="CSGBox3D137" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="10" unique_id=1930091014]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 22.5, 58)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 22.5, 57.5)
|
||||||
use_collision = true
|
use_collision = true
|
||||||
size = Vector3(1, 1, 11)
|
size = Vector3(1, 1, 12)
|
||||||
material = ExtResource("3_4m8g1")
|
material = ExtResource("3_4m8g1")
|
||||||
|
|
||||||
[node name="CSGBox3D138" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="11" unique_id=1299444131]
|
[node name="CSGBox3D138" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="11" unique_id=1299444131]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 22.5, 58)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 22.5, 57.5)
|
||||||
use_collision = true
|
use_collision = true
|
||||||
size = Vector3(1, 1, 11)
|
size = Vector3(1, 1, 12)
|
||||||
material = ExtResource("3_4m8g1")
|
material = ExtResource("3_4m8g1")
|
||||||
|
|
||||||
[node name="CSGBox3D139" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="12" unique_id=1708119368]
|
[node name="CSGBox3D139" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="12" unique_id=1708119368]
|
||||||
@@ -616,21 +558,21 @@ size = Vector3(7.25, 7.75, 2)
|
|||||||
material = ExtResource("3_4m8g1")
|
material = ExtResource("3_4m8g1")
|
||||||
|
|
||||||
[node name="CSGBox3D124" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="26" unique_id=1068505352]
|
[node name="CSGBox3D124" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="26" unique_id=1068505352]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.5, 19.487345, 11.25)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.5, 19.237345, 11.25)
|
||||||
use_collision = true
|
use_collision = true
|
||||||
size = Vector3(3, 5, 8.5)
|
size = Vector3(3, 4.5, 8.5)
|
||||||
material = ExtResource("3_4m8g1")
|
material = ExtResource("3_4m8g1")
|
||||||
|
|
||||||
[node name="CSGBox3D129" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="27" unique_id=302301078]
|
[node name="CSGBox3D129" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="27" unique_id=302301078]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.25, 19.487345, 38.625)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.25, 19.487345, 38)
|
||||||
use_collision = true
|
use_collision = true
|
||||||
size = Vector3(9.5, 5, 11.75)
|
size = Vector3(9.5, 5, 13)
|
||||||
material = ExtResource("3_4m8g1")
|
material = ExtResource("3_4m8g1")
|
||||||
|
|
||||||
[node name="CSGBox3D133" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="28" unique_id=672467040]
|
[node name="CSGBox3D133" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="28" unique_id=672467040]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 21.487345, 58)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 21.487345, 57.5)
|
||||||
use_collision = true
|
use_collision = true
|
||||||
size = Vector3(5, 1, 11)
|
size = Vector3(5, 1, 12)
|
||||||
material = ExtResource("3_4m8g1")
|
material = ExtResource("3_4m8g1")
|
||||||
|
|
||||||
[node name="CSGBox3D141" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="29" unique_id=1207463075]
|
[node name="CSGBox3D141" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="29" unique_id=1207463075]
|
||||||
@@ -765,15 +707,19 @@ use_collision = true
|
|||||||
size = Vector3(2, 3.25, 1)
|
size = Vector3(2, 3.25, 1)
|
||||||
material = ExtResource("3_4m8g1")
|
material = ExtResource("3_4m8g1")
|
||||||
|
|
||||||
[node name="Player" parent="." index="9" unique_id=1309399929]
|
[node name="Player" parent="." index="10" unique_id=1309399929]
|
||||||
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, -0.5, 0, 0)
|
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, -0.5, 0, 0)
|
||||||
|
|
||||||
[node name="PlayerFellRespawn" parent="." index="10" unique_id=479136076]
|
[node name="PlayerFellRespawn" parent="." index="11" unique_id=479136076]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 1.5, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 1.5, 0)
|
||||||
|
|
||||||
[node name="OmniLight3D" type="OmniLight3D" parent="." index="13" unique_id=702421172]
|
[node name="OmniLight3D" type="OmniLight3D" parent="." index="13" unique_id=702421172]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 25, 4)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 25, 4)
|
||||||
|
|
||||||
[node name="OmniLight3D2" type="OmniLight3D" parent="." index="14" unique_id=2016820716]
|
[node name="OmniLight3D2" type="OmniLight3D" parent="." index="14" unique_id=2016820716]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 25, -9.5)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 25, -10)
|
||||||
|
omni_range = 12.0
|
||||||
|
|
||||||
|
[node name="OmniLight3D3" type="OmniLight3D" parent="." index="15" unique_id=845858088]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 25, -25.5)
|
||||||
omni_range = 12.0
|
omni_range = 12.0
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
[gd_scene format=3 uid="uid://ndnor8g7kq07"]
|
[gd_scene format=3 uid="uid://ndnor8g7kq07"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://55wehh6xombr" path="res://maps/_templates/main_scene_template.tscn" id="1_k7f42"]
|
[ext_resource type="PackedScene" uid="uid://55wehh6xombr" path="res://maps/_templates/main_scene_template.tscn" id="1_k7f42"]
|
||||||
|
[ext_resource type="Resource" uid="uid://ifeavnlps7hy" path="res://forge/resources/behaviors/exploding_sword.tres" id="2_ctafv"]
|
||||||
[ext_resource type="PackedScene" uid="uid://y77cdg7gg3y7" path="res://maps/levels/_arenas/playtest_1.tscn" id="2_kutfq"]
|
[ext_resource type="PackedScene" uid="uid://y77cdg7gg3y7" path="res://maps/levels/_arenas/playtest_1.tscn" id="2_kutfq"]
|
||||||
[ext_resource type="Material" uid="uid://31aulub2nqov" path="res://assets/materials/greybox/m_greybox.tres" id="3_1qo78"]
|
[ext_resource type="Material" uid="uid://31aulub2nqov" path="res://assets/materials/greybox/m_greybox.tres" id="3_1qo78"]
|
||||||
|
[ext_resource type="Script" uid="uid://cgaahnfgxcrr6" path="res://managers/WeaponInventory.cs" id="3_nix1q"]
|
||||||
[ext_resource type="PackedScene" uid="uid://c305mfrtumcyq" path="res://scenes/spawners/spawner.tscn" id="4_jaqjx"]
|
[ext_resource type="PackedScene" uid="uid://c305mfrtumcyq" path="res://scenes/spawners/spawner.tscn" id="4_jaqjx"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/grounded_enemy/grounded_enemy.tscn" id="5_iq67o"]
|
[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/grounded_enemy/grounded_enemy.tscn" id="5_iq67o"]
|
||||||
[ext_resource type="Resource" uid="uid://bqq6uukbdfysr" path="res://scenes/enemies/grounded_enemy/grounded_enemy_movement.tres" id="6_l44fp"]
|
[ext_resource type="Resource" uid="uid://bqq6uukbdfysr" path="res://scenes/enemies/grounded_enemy/grounded_enemy_movement.tres" id="6_l44fp"]
|
||||||
@@ -15,10 +17,18 @@
|
|||||||
[ext_resource type="PackedScene" uid="uid://qup00a7x2sji" path="res://scenes/fixed_dash_target/fixed_dashthrough_target.tscn" id="13_iq67o"]
|
[ext_resource type="PackedScene" uid="uid://qup00a7x2sji" path="res://scenes/fixed_dash_target/fixed_dashthrough_target.tscn" id="13_iq67o"]
|
||||||
[ext_resource type="PackedScene" uid="uid://b8aet6m4m2i83" path="res://scenes/tuto_trigger/TutoTrigger.tscn" id="14_lthgu"]
|
[ext_resource type="PackedScene" uid="uid://b8aet6m4m2i83" path="res://scenes/tuto_trigger/TutoTrigger.tscn" id="14_lthgu"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_udq24"]
|
||||||
|
script = ExtResource("3_nix1q")
|
||||||
|
OnWeaponStartedFlyingAbilities = Array[Object]([ExtResource("2_ctafv")])
|
||||||
|
OnWeaponFlyingTickAbilities = Array[Object]([ExtResource("2_ctafv")])
|
||||||
|
OnWeaponStoppedFlyingAbilities = Array[Object]([ExtResource("2_ctafv")])
|
||||||
|
metadata/_custom_type_script = "uid://cgaahnfgxcrr6"
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_lthgu"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_lthgu"]
|
||||||
size = Vector3(7.5, 3.75, 10.25)
|
size = Vector3(7.5, 3.75, 10.25)
|
||||||
|
|
||||||
[node name="Main" unique_id=955321579 instance=ExtResource("1_k7f42")]
|
[node name="Main" unique_id=955321579 instance=ExtResource("1_k7f42")]
|
||||||
|
InitialWeaponInventory = SubResource("Resource_udq24")
|
||||||
|
|
||||||
[node name="PlaytestArena" parent="." index="6" unique_id=664535670 instance=ExtResource("2_kutfq")]
|
[node name="PlaytestArena" parent="." index="6" unique_id=664535670 instance=ExtResource("2_kutfq")]
|
||||||
|
|
||||||
@@ -35,7 +45,7 @@ MovementInputs = ExtResource("6_l44fp")
|
|||||||
HealthInputs = ExtResource("7_ucbss")
|
HealthInputs = ExtResource("7_ucbss")
|
||||||
DamageInputs = ExtResource("8_2brdd")
|
DamageInputs = ExtResource("8_2brdd")
|
||||||
Target = NodePath("../Player")
|
Target = NodePath("../Player")
|
||||||
SpawnInterval = 5.0
|
SpawnInterval = 1.808
|
||||||
|
|
||||||
[node name="GroundedSpawner2" parent="." index="9" unique_id=1026317919 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")]
|
[node name="GroundedSpawner2" parent="." index="9" unique_id=1026317919 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 46.5, 11.5, -34.5)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 46.5, 11.5, -34.5)
|
||||||
@@ -45,6 +55,7 @@ HealthInputs = ExtResource("7_ucbss")
|
|||||||
DamageInputs = ExtResource("8_2brdd")
|
DamageInputs = ExtResource("8_2brdd")
|
||||||
Target = NodePath("../Player")
|
Target = NodePath("../Player")
|
||||||
SpawnInterval = 5.0
|
SpawnInterval = 5.0
|
||||||
|
IsActiveOnStart = false
|
||||||
|
|
||||||
[node name="GroundedSpawner3" parent="." index="10" unique_id=241829575 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")]
|
[node name="GroundedSpawner3" parent="." index="10" unique_id=241829575 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 44.5, 0, -3)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 44.5, 0, -3)
|
||||||
@@ -112,5 +123,5 @@ tuto_text = "Try to survive!"
|
|||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 0.625, -1.875)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 0.625, -1.875)
|
||||||
shape = SubResource("BoxShape3D_lthgu")
|
shape = SubResource("BoxShape3D_lthgu")
|
||||||
|
|
||||||
[node name="Player" parent="." index="15" unique_id=1309399929]
|
[node name="Player" parent="." index="16" unique_id=1309399929]
|
||||||
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, 3, 0, 0)
|
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, 3, 0, 0)
|
||||||
|
|||||||
101
menus/scenes/components/AbilitySelection.cs
Normal file
101
menus/scenes/components/AbilitySelection.cs
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Chickensoft.AutoInject;
|
||||||
|
using Chickensoft.Introspection;
|
||||||
|
using Gamesmiths.Forge.Godot.Resources.Abilities;
|
||||||
|
using Godot;
|
||||||
|
using Movementtests.systems;
|
||||||
|
|
||||||
|
[Tool, GlobalClass, Meta(typeof(IAutoConnect), typeof(IAutoOn))]
|
||||||
|
public partial class AbilitySelection : Control
|
||||||
|
{
|
||||||
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
|
#region Signals
|
||||||
|
|
||||||
|
[Signal] public delegate void AbilityAddedEventHandler(WeaponSystem.WeaponEvent forEvent, ForgeAbilityBehavior behavior);
|
||||||
|
[Signal] public delegate void AbilityRemovedEventHandler(WeaponSystem.WeaponEvent forEvent, ForgeAbilityBehavior behavior);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Exports
|
||||||
|
|
||||||
|
[Export] public WeaponSystem.WeaponEvent ForEvent { get; set; } = WeaponSystem.WeaponEvent.StartedFlying;
|
||||||
|
[Export] public string Title { get; set; } = string.Empty;
|
||||||
|
[Export] public PackedScene? AbilitySelectedItem { get; set; }
|
||||||
|
[Export] public ForgeAbilityBehavior[] AbilityBehaviors { get; set; } = [];
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Nodes
|
||||||
|
|
||||||
|
[Node("%SelectedAbilities")] public required VBoxContainer SelectedAbilities { get; set; }
|
||||||
|
[Node("%AddAbility")] public required MenuButton AddAbility { get; set; }
|
||||||
|
public required PopupMenu AddAbilityMenu { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public void OnReady()
|
||||||
|
{
|
||||||
|
// Initialize title (also in Editor as Tool)
|
||||||
|
var titleLabel = GetNode<Label>("%TitleLabel");
|
||||||
|
titleLabel.Text = Title;
|
||||||
|
|
||||||
|
AddAbilityMenu = AddAbility.GetPopup();
|
||||||
|
|
||||||
|
if (Engine.IsEditorHint()) return; // Editor flow stops here
|
||||||
|
|
||||||
|
var i = 0;
|
||||||
|
foreach (var behavior in AbilityBehaviors)
|
||||||
|
{
|
||||||
|
AddAbilityMenu.AddIconItem(behavior.Icon, behavior.Name);
|
||||||
|
AddAbilityMenu.SetItemMetadata(i, behavior);
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
AddAbilityMenu.IndexPressed += AddAbilityMenuOnIndexPressed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Initialize(IEnumerable<ForgeAbilityBehavior> equippedAbilities)
|
||||||
|
{
|
||||||
|
foreach (var equippedAbility in equippedAbilities)
|
||||||
|
{
|
||||||
|
AddSelectedAbility(equippedAbility);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddAbilityMenuOnIndexPressed(long index)
|
||||||
|
{
|
||||||
|
var indexInt = Convert.ToInt32(index);
|
||||||
|
var metadata = (ForgeAbilityBehavior) AddAbilityMenu.GetItemMetadata(indexInt);
|
||||||
|
EmitSignalAbilityAdded(ForEvent, metadata);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddSelectedAbility(ForgeAbilityBehavior behavior)
|
||||||
|
{
|
||||||
|
if (AbilitySelectedItem?.Instantiate() is not SelectedAbility newSelectedAbilityItem) return;
|
||||||
|
|
||||||
|
newSelectedAbilityItem.SetAbility(behavior);
|
||||||
|
newSelectedAbilityItem.AbilityRemoved += ability => EmitSignalAbilityRemoved(ForEvent, ability);
|
||||||
|
SelectedAbilities.AddChild(newSelectedAbilityItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveSelectedAbility(ForgeAbilityBehavior behavior)
|
||||||
|
{
|
||||||
|
foreach (var child in SelectedAbilities.GetChildren())
|
||||||
|
{
|
||||||
|
if (child is not SelectedAbility selectedAbility || selectedAbility.Ability != behavior) continue;
|
||||||
|
SelectedAbilities.RemoveChild(selectedAbility);
|
||||||
|
AddAbility.GrabFocus();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ClearAbilities()
|
||||||
|
{
|
||||||
|
foreach (var child in SelectedAbilities.GetChildren())
|
||||||
|
{
|
||||||
|
SelectedAbilities.RemoveChild(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
1
menus/scenes/components/AbilitySelection.cs.uid
Normal file
1
menus/scenes/components/AbilitySelection.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://5emed8iegtui
|
||||||
56
menus/scenes/components/SelectedAbility.cs
Normal file
56
menus/scenes/components/SelectedAbility.cs
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
using Godot;
|
||||||
|
using System;
|
||||||
|
using Gamesmiths.Forge.Godot.Resources.Abilities;
|
||||||
|
|
||||||
|
[Tool, GlobalClass]
|
||||||
|
public partial class SelectedAbility : Control
|
||||||
|
{
|
||||||
|
[Signal] public delegate void AbilityRemovedEventHandler(ForgeAbilityBehavior ability);
|
||||||
|
|
||||||
|
private ForgeAbilityBehavior? _ability;
|
||||||
|
[Export]
|
||||||
|
public ForgeAbilityBehavior? Ability
|
||||||
|
{
|
||||||
|
get => _ability;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_ability = value;
|
||||||
|
if (_ability == null || !Engine.IsEditorHint()) return;
|
||||||
|
AbilityUpdated();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private TextureRect? _icon;
|
||||||
|
private Label? _title;
|
||||||
|
private Button? _remove;
|
||||||
|
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
_icon = GetNode<TextureRect>("%Icon");
|
||||||
|
_title = GetNode<Label>("%Title");
|
||||||
|
_remove = GetNode<Button>("%Remove");
|
||||||
|
|
||||||
|
_remove.Pressed += () => EmitSignalAbilityRemoved(Ability);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetAbility(ForgeAbilityBehavior ability)
|
||||||
|
{
|
||||||
|
_ability = ability;
|
||||||
|
AbilityUpdated();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AbilityUpdated()
|
||||||
|
{
|
||||||
|
var icon = _icon ?? GetNode<TextureRect>("%Icon");
|
||||||
|
var title = _title ?? GetNode<Label>("%Title");
|
||||||
|
if (icon == null || title == null) return;
|
||||||
|
if (_ability == null)
|
||||||
|
{
|
||||||
|
icon.Texture = null;
|
||||||
|
title.Text = "";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
icon.Texture = _ability.Icon;
|
||||||
|
title.Text = _ability.Name;
|
||||||
|
}
|
||||||
|
}
|
||||||
1
menus/scenes/components/SelectedAbility.cs.uid
Normal file
1
menus/scenes/components/SelectedAbility.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://duest06l5answ
|
||||||
46
menus/scenes/components/ability_selection.tscn
Normal file
46
menus/scenes/components/ability_selection.tscn
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
[gd_scene format=3 uid="uid://dmv685sskgh3l"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://5emed8iegtui" path="res://menus/scenes/components/AbilitySelection.cs" id="1_fcxyu"]
|
||||||
|
[ext_resource type="Resource" uid="uid://ifeavnlps7hy" path="res://forge/resources/behaviors/exploding_sword.tres" id="2_j1yif"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://by5v33lu8v1fm" path="res://assets/ui/input-prompts/Flairs/Vector/flair_plus.svg" id="2_uf3m5"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cjnimmo2jyvx7" path="res://menus/scenes/components/selected_ability.tscn" id="3_cndde"]
|
||||||
|
|
||||||
|
[node name="AbilitySelection" type="MarginContainer" unique_id=1373426933]
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
theme_override_constants/margin_left = 4
|
||||||
|
theme_override_constants/margin_top = 4
|
||||||
|
theme_override_constants/margin_right = 4
|
||||||
|
theme_override_constants/margin_bottom = 4
|
||||||
|
script = ExtResource("1_fcxyu")
|
||||||
|
Title = "Test"
|
||||||
|
AbilitySelectedItem = ExtResource("3_cndde")
|
||||||
|
AbilityBehaviors = [ExtResource("2_j1yif")]
|
||||||
|
|
||||||
|
[node name="HBoxContainer" type="VBoxContainer" parent="." unique_id=364343452]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="TitleLabel" type="Label" parent="HBoxContainer" unique_id=8350369]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Test"
|
||||||
|
|
||||||
|
[node name="SelectedAbilities" type="VBoxContainer" parent="HBoxContainer" unique_id=1173689490]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="MarginContainer" type="MarginContainer" parent="HBoxContainer" unique_id=51872459]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_constants/margin_left = 4
|
||||||
|
theme_override_constants/margin_top = 4
|
||||||
|
theme_override_constants/margin_right = 4
|
||||||
|
theme_override_constants/margin_bottom = 4
|
||||||
|
|
||||||
|
[node name="PanelContainer" type="PanelContainer" parent="HBoxContainer/MarginContainer" unique_id=886085404]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="AddAbility" type="MenuButton" parent="HBoxContainer/MarginContainer/PanelContainer" unique_id=1898027483]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
focus_mode = 2
|
||||||
|
text = "Add ability"
|
||||||
|
icon = ExtResource("2_uf3m5")
|
||||||
30
menus/scenes/components/selected_ability.tscn
Normal file
30
menus/scenes/components/selected_ability.tscn
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
[gd_scene format=3 uid="uid://cjnimmo2jyvx7"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://duest06l5answ" path="res://menus/scenes/components/SelectedAbility.cs" id="1_dc51o"]
|
||||||
|
[ext_resource type="Resource" uid="uid://ifeavnlps7hy" path="res://forge/resources/behaviors/exploding_sword.tres" id="2_um64s"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://b3403ry3yxw1t" path="res://assets/ui/input-prompts/Flairs/Vector/flair_cross.svg" id="4_x7nho"]
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_2nvj1"]
|
||||||
|
atlas = ExtResource("4_x7nho")
|
||||||
|
region = Rect2(20, 20, 24, 24)
|
||||||
|
|
||||||
|
[node name="SelectedAbility" type="PanelContainer" unique_id=931414010]
|
||||||
|
script = ExtResource("1_dc51o")
|
||||||
|
Ability = ExtResource("2_um64s")
|
||||||
|
|
||||||
|
[node name="HBoxContainer" type="HBoxContainer" parent="." unique_id=489712453]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="Icon" type="TextureRect" parent="HBoxContainer" unique_id=1615158957]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
stretch_mode = 3
|
||||||
|
|
||||||
|
[node name="Title" type="Label" parent="HBoxContainer" unique_id=809638027]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="Remove" type="Button" parent="HBoxContainer" unique_id=1761723956]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
icon = SubResource("AtlasTexture_2nvj1")
|
||||||
@@ -37,6 +37,7 @@ option_name = "Joystick Sensitivity"
|
|||||||
option_section = 1
|
option_section = 1
|
||||||
key = "LookSensitivity"
|
key = "LookSensitivity"
|
||||||
section = "InputSettings"
|
section = "InputSettings"
|
||||||
|
default_value = 1.1
|
||||||
|
|
||||||
[node name="OptionLabel" parent="VBoxContainer/MarginContainer/VBoxContainer/LookSensitivityControl" index="0" unique_id=1789907427]
|
[node name="OptionLabel" parent="VBoxContainer/MarginContainer/VBoxContainer/LookSensitivityControl" index="0" unique_id=1789907427]
|
||||||
text = "Joystick Sensitivity :"
|
text = "Joystick Sensitivity :"
|
||||||
@@ -44,8 +45,8 @@ text = "Joystick Sensitivity :"
|
|||||||
[node name="HSlider" parent="VBoxContainer/MarginContainer/VBoxContainer/LookSensitivityControl" index="1" unique_id=494926010]
|
[node name="HSlider" parent="VBoxContainer/MarginContainer/VBoxContainer/LookSensitivityControl" index="1" unique_id=494926010]
|
||||||
min_value = 0.2
|
min_value = 0.2
|
||||||
max_value = 2.0
|
max_value = 2.0
|
||||||
step = 0.2
|
step = 0.1
|
||||||
value = 0.6000000000000001
|
value = 1.1
|
||||||
tick_count = 10
|
tick_count = 10
|
||||||
|
|
||||||
[node name="MouseSensitivityControl" parent="VBoxContainer/MarginContainer/VBoxContainer" unique_id=1444662884 instance=ExtResource("2_iyvrj")]
|
[node name="MouseSensitivityControl" parent="VBoxContainer/MarginContainer/VBoxContainer" unique_id=1444662884 instance=ExtResource("2_iyvrj")]
|
||||||
@@ -54,16 +55,17 @@ option_name = "Mouse Sensitivity"
|
|||||||
option_section = 1
|
option_section = 1
|
||||||
key = "MouseSensitivity"
|
key = "MouseSensitivity"
|
||||||
section = "InputSettings"
|
section = "InputSettings"
|
||||||
|
default_value = 25.0
|
||||||
|
|
||||||
[node name="OptionLabel" parent="VBoxContainer/MarginContainer/VBoxContainer/MouseSensitivityControl" index="0" unique_id=1789907427]
|
[node name="OptionLabel" parent="VBoxContainer/MarginContainer/VBoxContainer/MouseSensitivityControl" index="0" unique_id=1789907427]
|
||||||
text = "Mouse Sensitivity :"
|
text = "Mouse Sensitivity :"
|
||||||
|
|
||||||
[node name="HSlider" parent="VBoxContainer/MarginContainer/VBoxContainer/MouseSensitivityControl" index="1" unique_id=494926010]
|
[node name="HSlider" parent="VBoxContainer/MarginContainer/VBoxContainer/MouseSensitivityControl" index="1" unique_id=494926010]
|
||||||
min_value = 1.0
|
min_value = 1.0
|
||||||
max_value = 20.0
|
max_value = 50.0
|
||||||
step = 1.0
|
step = 1.0
|
||||||
value = 8.0
|
value = 25.0
|
||||||
tick_count = 20
|
tick_count = 10
|
||||||
|
|
||||||
[node name="HeadBobbingControl" parent="VBoxContainer/MarginContainer/VBoxContainer" unique_id=1905029466 instance=ExtResource("2_iyvrj")]
|
[node name="HeadBobbingControl" parent="VBoxContainer/MarginContainer/VBoxContainer" unique_id=1905029466 instance=ExtResource("2_iyvrj")]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
|||||||
120
menus/scenes/overlaid_menus/InventoryUi.cs
Normal file
120
menus/scenes/overlaid_menus/InventoryUi.cs
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Chickensoft.AutoInject;
|
||||||
|
using Chickensoft.Introspection;
|
||||||
|
using Chickensoft.Sync.Primitives;
|
||||||
|
using Gamesmiths.Forge.Effects;
|
||||||
|
using Gamesmiths.Forge.Godot.Resources.Abilities;
|
||||||
|
using Godot;
|
||||||
|
using Movementtests.managers;
|
||||||
|
using Movementtests.systems;
|
||||||
|
|
||||||
|
|
||||||
|
[Tool, GlobalClass, Icon("res://assets/ui/IconGodotNode/control/icon_crate.png"), Meta(typeof(IAutoNode))]
|
||||||
|
public partial class InventoryUi : Control, IDisposable
|
||||||
|
{
|
||||||
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
|
#region Dependencies
|
||||||
|
[Dependency]
|
||||||
|
public InventoryManager InventoryManager => this.DependOn<InventoryManager>();
|
||||||
|
#endregion Dependencies
|
||||||
|
|
||||||
|
#region Nodes
|
||||||
|
[Node]
|
||||||
|
public required AbilitySelection StartedFlying { get; set; }
|
||||||
|
[Node]
|
||||||
|
public required AbilitySelection WhileFlying { get; set; }
|
||||||
|
[Node]
|
||||||
|
public required AbilitySelection StoppedFlying { get; set; }
|
||||||
|
#endregion Nodes
|
||||||
|
|
||||||
|
public AutoSet<ForgeAbilityBehavior>.Binding StartedFlyingBinding { get; set; }
|
||||||
|
public AutoSet<ForgeAbilityBehavior>.Binding FlyingTickBinding { get; set; }
|
||||||
|
public AutoSet<ForgeAbilityBehavior>.Binding StoppedFlyingBinding { get; set; }
|
||||||
|
|
||||||
|
public void OnReady()
|
||||||
|
{
|
||||||
|
StartedFlying.AbilityAdded += AddAbilityForEvent;
|
||||||
|
WhileFlying.AbilityAdded += AddAbilityForEvent;
|
||||||
|
StoppedFlying.AbilityAdded += AddAbilityForEvent;
|
||||||
|
|
||||||
|
StartedFlying.AbilityRemoved += RemoveAbilityForEvent;
|
||||||
|
WhileFlying.AbilityRemoved += RemoveAbilityForEvent;
|
||||||
|
StoppedFlying.AbilityRemoved += RemoveAbilityForEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnResolved()
|
||||||
|
{
|
||||||
|
StartedFlying.Initialize(InventoryManager.WeaponEventsInventory[WeaponSystem.WeaponEvent.StartedFlying]);
|
||||||
|
WhileFlying.Initialize(InventoryManager.WeaponEventsInventory[WeaponSystem.WeaponEvent.FlyingTick]);
|
||||||
|
StoppedFlying.Initialize(InventoryManager.WeaponEventsInventory[WeaponSystem.WeaponEvent.StoppedFlying]);
|
||||||
|
|
||||||
|
StartedFlyingBinding = InventoryManager.StartedFlyingAbilities.Bind();
|
||||||
|
StartedFlyingBinding
|
||||||
|
.OnAdd(behavior => OnWeaponEventInventoryAdded(WeaponSystem.WeaponEvent.StartedFlying, behavior))
|
||||||
|
.OnRemove(behavior => OnWeaponEventInventoryRemoved(WeaponSystem.WeaponEvent.StartedFlying, behavior))
|
||||||
|
.OnClear(() => OnWeaponEventInventoryCleared(WeaponSystem.WeaponEvent.StartedFlying));
|
||||||
|
FlyingTickBinding = InventoryManager.FlyingTickAbilities.Bind();
|
||||||
|
FlyingTickBinding
|
||||||
|
.OnAdd(behavior => OnWeaponEventInventoryAdded(WeaponSystem.WeaponEvent.FlyingTick, behavior))
|
||||||
|
.OnRemove(behavior => OnWeaponEventInventoryRemoved(WeaponSystem.WeaponEvent.FlyingTick, behavior))
|
||||||
|
.OnClear(() => OnWeaponEventInventoryCleared(WeaponSystem.WeaponEvent.FlyingTick));
|
||||||
|
StoppedFlyingBinding = InventoryManager.StoppedFlyingAbilities.Bind();
|
||||||
|
StoppedFlyingBinding
|
||||||
|
.OnAdd(behavior => OnWeaponEventInventoryAdded(WeaponSystem.WeaponEvent.StoppedFlying, behavior))
|
||||||
|
.OnRemove(behavior => OnWeaponEventInventoryRemoved(WeaponSystem.WeaponEvent.StoppedFlying, behavior))
|
||||||
|
.OnClear(() => OnWeaponEventInventoryCleared(WeaponSystem.WeaponEvent.StoppedFlying));
|
||||||
|
}
|
||||||
|
|
||||||
|
public new void Dispose()
|
||||||
|
{
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
|
||||||
|
StartedFlying.Dispose();
|
||||||
|
WhileFlying.Dispose();
|
||||||
|
StoppedFlying.Dispose();
|
||||||
|
|
||||||
|
base.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddAbilityForEvent(WeaponSystem.WeaponEvent forEvent, ForgeAbilityBehavior abilityBehavior)
|
||||||
|
{
|
||||||
|
InventoryManager.AddAbilityForWeaponEvent(forEvent, abilityBehavior);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveAbilityForEvent(WeaponSystem.WeaponEvent forEvent, ForgeAbilityBehavior abilityBehavior)
|
||||||
|
{
|
||||||
|
InventoryManager.RemoveAbilityForWeaponEvent(forEvent, abilityBehavior);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnWeaponEventInventoryAdded(WeaponSystem.WeaponEvent forEvent, ForgeAbilityBehavior abilityBehavior)
|
||||||
|
{
|
||||||
|
var selection = GetAbilitySelection(forEvent);
|
||||||
|
selection.AddSelectedAbility(abilityBehavior);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnWeaponEventInventoryRemoved(WeaponSystem.WeaponEvent forEvent, ForgeAbilityBehavior abilityBehavior)
|
||||||
|
{
|
||||||
|
var selection = GetAbilitySelection(forEvent);
|
||||||
|
selection.RemoveSelectedAbility(abilityBehavior);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnWeaponEventInventoryCleared(WeaponSystem.WeaponEvent forEvent)
|
||||||
|
{
|
||||||
|
var selection = GetAbilitySelection(forEvent);
|
||||||
|
selection.ClearAbilities();
|
||||||
|
}
|
||||||
|
|
||||||
|
public AbilitySelection GetAbilitySelection(WeaponSystem.WeaponEvent forEvent)
|
||||||
|
{
|
||||||
|
var abilitiesSelectionsMap = new Dictionary<WeaponSystem.WeaponEvent, AbilitySelection>
|
||||||
|
{
|
||||||
|
{ WeaponSystem.WeaponEvent.StartedFlying, StartedFlying },
|
||||||
|
{ WeaponSystem.WeaponEvent.StoppedFlying, StoppedFlying },
|
||||||
|
{ WeaponSystem.WeaponEvent.FlyingTick, WhileFlying },
|
||||||
|
};
|
||||||
|
|
||||||
|
return abilitiesSelectionsMap[forEvent];
|
||||||
|
}
|
||||||
|
}
|
||||||
1
menus/scenes/overlaid_menus/InventoryUi.cs.uid
Normal file
1
menus/scenes/overlaid_menus/InventoryUi.cs.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://cvwiftuay8jep
|
||||||
95
menus/scenes/overlaid_menus/inventory.tscn
Normal file
95
menus/scenes/overlaid_menus/inventory.tscn
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
[gd_scene format=3 uid="uid://oq1jjvjs4qga"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://vu5kh5amnta" path="res://menus/scenes/overlaid_menus/inventory_wrapper.gd" id="1_yst23"]
|
||||||
|
[ext_resource type="Script" uid="uid://1nf36h0gms3q" path="res://addons/maaacks_game_template/base/scripts/capture_focus.gd" id="2_ijoei"]
|
||||||
|
[ext_resource type="Script" uid="uid://cvwiftuay8jep" path="res://menus/scenes/overlaid_menus/InventoryUi.cs" id="2_sb1gh"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dmv685sskgh3l" path="res://menus/scenes/components/ability_selection.tscn" id="3_ijoei"]
|
||||||
|
|
||||||
|
[node name="InventoryWrapper" type="Control" unique_id=1853168495]
|
||||||
|
process_mode = 3
|
||||||
|
top_level = true
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("1_yst23")
|
||||||
|
pauses_game = true
|
||||||
|
|
||||||
|
[node name="Inventory" type="MarginContainer" parent="." unique_id=1581374847]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 9
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_right = 1920.0
|
||||||
|
grow_vertical = 2
|
||||||
|
theme_override_constants/margin_left = 256
|
||||||
|
theme_override_constants/margin_top = 32
|
||||||
|
theme_override_constants/margin_right = 256
|
||||||
|
theme_override_constants/margin_bottom = 32
|
||||||
|
script = ExtResource("2_sb1gh")
|
||||||
|
|
||||||
|
[node name="MenuPanelContainer" type="PanelContainer" parent="Inventory" unique_id=494302799]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
process_mode = 3
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="MarginContainer" type="MarginContainer" parent="Inventory/MenuPanelContainer" unique_id=890844332]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_constants/margin_left = 128
|
||||||
|
theme_override_constants/margin_top = 16
|
||||||
|
theme_override_constants/margin_right = 128
|
||||||
|
theme_override_constants/margin_bottom = 16
|
||||||
|
|
||||||
|
[node name="BoxContainer" type="BoxContainer" parent="Inventory/MenuPanelContainer/MarginContainer" unique_id=1551508149]
|
||||||
|
layout_mode = 2
|
||||||
|
vertical = true
|
||||||
|
|
||||||
|
[node name="TitleMargin" type="MarginContainer" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer" unique_id=1278279788]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="TitleLabel" type="Label" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/TitleMargin" unique_id=1966063657]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_font_sizes/font_size = 24
|
||||||
|
text = "Inventory"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="PlayerSectionMargin" type="MarginContainer" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer" unique_id=461792371]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_constants/margin_top = 16
|
||||||
|
theme_override_constants/margin_bottom = 16
|
||||||
|
|
||||||
|
[node name="PlayerSection" type="BoxContainer" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin" unique_id=469432036]
|
||||||
|
custom_minimum_size = Vector2(128, 0)
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_vertical = 3
|
||||||
|
theme_override_constants/separation = 16
|
||||||
|
vertical = true
|
||||||
|
|
||||||
|
[node name="PlayerSectionLabel" type="Label" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection" unique_id=1100827847]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Weapon abilities"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="HBoxContainer" type="HBoxContainer" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection" unique_id=75337901]
|
||||||
|
layout_mode = 2
|
||||||
|
script = ExtResource("2_ijoei")
|
||||||
|
search_depth = 10
|
||||||
|
|
||||||
|
[node name="StartedFlying" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection/HBoxContainer" unique_id=1373426933 instance=ExtResource("3_ijoei")]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
Title = "Started flying"
|
||||||
|
|
||||||
|
[node name="WhileFlying" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection/HBoxContainer" unique_id=1771285257 instance=ExtResource("3_ijoei")]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
ForEvent = 2
|
||||||
|
Title = "While flying"
|
||||||
|
|
||||||
|
[node name="StoppedFlying" parent="Inventory/MenuPanelContainer/MarginContainer/BoxContainer/PlayerSectionMargin/PlayerSection/HBoxContainer" unique_id=324047638 instance=ExtResource("3_ijoei")]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
ForEvent = 1
|
||||||
|
Title = "Stopped flying"
|
||||||
15
menus/scenes/overlaid_menus/inventory_wrapper.gd
Normal file
15
menus/scenes/overlaid_menus/inventory_wrapper.gd
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
@tool
|
||||||
|
@icon("res://assets/ui/IconGodotNode/control/icon_crate_02.png")
|
||||||
|
class_name InventoryWrapper
|
||||||
|
extends OverlaidMenu
|
||||||
|
|
||||||
|
@onready var inventory: Control = %Inventory
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
if Engine.is_editor_hint(): return
|
||||||
|
|
||||||
|
func _handle_cancel_input() -> void:
|
||||||
|
hide_menu()
|
||||||
|
|
||||||
|
func _on_close_button_pressed() -> void:
|
||||||
|
hide_menu()
|
||||||
1
menus/scenes/overlaid_menus/inventory_wrapper.gd.uid
Normal file
1
menus/scenes/overlaid_menus/inventory_wrapper.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://vu5kh5amnta
|
||||||
@@ -11,9 +11,7 @@ extends OverlaidMenu
|
|||||||
@onready var player_damage_spin_box: SpinBox = %PlayerDamageSpinBox
|
@onready var player_damage_spin_box: SpinBox = %PlayerDamageSpinBox
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
player_invicible_toggle.button_pressed = player.IsInvincibleOverride
|
player_invicible_toggle.button_pressed = player.IsInvincible
|
||||||
player_health_spin_box.value = player.RHealth.StartingHealth
|
|
||||||
player_damage_spin_box.value = player.RDamage.DamageDealt
|
|
||||||
|
|
||||||
|
|
||||||
func _on_kill_player_button_pressed() -> void:
|
func _on_kill_player_button_pressed() -> void:
|
||||||
@@ -21,7 +19,7 @@ func _on_kill_player_button_pressed() -> void:
|
|||||||
close()
|
close()
|
||||||
|
|
||||||
func _on_player_invicible_toggled(toggled_on: bool) -> void:
|
func _on_player_invicible_toggled(toggled_on: bool) -> void:
|
||||||
player.IsInvincibleOverride = toggled_on
|
player.IsInvincible = toggled_on
|
||||||
|
|
||||||
|
|
||||||
func _on_restart_current_level_pressed() -> void:
|
func _on_restart_current_level_pressed() -> void:
|
||||||
@@ -38,8 +36,8 @@ func _on_level_selected() -> void:
|
|||||||
close()
|
close()
|
||||||
|
|
||||||
func _on_player_health_changed(value: float) -> void:
|
func _on_player_health_changed(value: float) -> void:
|
||||||
player.SetPlayerHealthOverride(value)
|
pass
|
||||||
|
|
||||||
|
|
||||||
func _on_player_damage_changed(value: float) -> void:
|
func _on_player_damage_changed(value: float) -> void:
|
||||||
player.SetPlayerDamageOverride(value)
|
pass
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ warnings/check_invalid_track_paths=false
|
|||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="Movement tests"
|
config/name="Movement tests"
|
||||||
run/main_scene="uid://dwo50456dv6va"
|
run/main_scene="uid://vm22i5sv3p3s"
|
||||||
config/features=PackedStringArray("4.6", "C#", "Forward Plus")
|
config/features=PackedStringArray("4.6", "C#", "Forward Plus")
|
||||||
config/icon="res://icon.svg"
|
config/icon="res://icon.svg"
|
||||||
|
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
using Godot;
|
|
||||||
using System;
|
|
||||||
using Movementtests.interfaces;
|
|
||||||
|
|
||||||
[GlobalClass, Icon("res://assets/ui/IconGodotNode/white/icon_skull.png")]
|
|
||||||
public partial class CDamageable : Node, IDamageable
|
|
||||||
{
|
|
||||||
public event Action<IDamageable, DamageRecord> DamageTaken;
|
|
||||||
|
|
||||||
[Export]
|
|
||||||
public RDamageModifier[] DamageModifiers { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
public DamageRecord TakeDamage(DamageRecord damageRecord)
|
|
||||||
{
|
|
||||||
var finalDamage = 0f;
|
|
||||||
foreach (var damageable in DamageModifiers.ToIDamageables())
|
|
||||||
finalDamage += damageable.TakeDamage(damageRecord).Damage.DamageDealt;
|
|
||||||
var finalDamageRecord = damageRecord with { Damage = new RDamage(finalDamage, damageRecord.Damage.DamageType) };
|
|
||||||
DamageTaken?.Invoke(this, finalDamageRecord);
|
|
||||||
return finalDamageRecord;
|
|
||||||
}
|
|
||||||
|
|
||||||
public DamageRecord ComputeDamage(DamageRecord damageRecord)
|
|
||||||
{
|
|
||||||
var finalDamage = 0f;
|
|
||||||
foreach (var damageable in DamageModifiers.ToIDamageables())
|
|
||||||
finalDamage += damageable.ComputeDamage(damageRecord).Damage.DamageDealt;
|
|
||||||
return damageRecord with { Damage = new RDamage(finalDamage, damageRecord.Damage.DamageType) };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user