Sync weapon equip to hitbox damage

This commit is contained in:
2024-09-01 16:34:33 -07:00
parent 5b110845e9
commit dc3639ad6e
8 changed files with 49 additions and 27 deletions

View File

@@ -1,9 +1,11 @@
using Chickensoft.AutoInject;
using Chickensoft.Collections;
using Chickensoft.GodotNodeInterfaces;
using Chickensoft.Introspection;
using Chickensoft.SaveFileBuilder;
using GameJamDungeon;
using Godot;
using System;
namespace GameJamDungeon
{
@@ -52,16 +54,17 @@ namespace GameJamDungeon
public PlayerLogic.IBinding PlayerBinding { get; set; } = default!;
[Node]
public IAnimationPlayer AnimationPlayer { get; set; } = default!;
[Node] public IAnimationPlayer AnimationPlayer { get; set; } = default!;
[Node]
public IAnimatedSprite2D SwordSlashAnimation { get; set; } = default!;
[Node] public AnimatedSprite2D SwordSlashAnimation { get; set; } = default!;
[Node] public IHitbox Hitbox { get; set; } = default!;
private IAutoProp<WeaponInfo> EquippedWeapon { get; set; } = default!;
public void Initialize()
{
AnimationPlayer.AnimationFinished += OnAnimationFinished;
SwordSlashAnimation.Position = GetViewport().GetVisibleRect().Size / 2;
}
public void Setup()
@@ -77,20 +80,15 @@ namespace GameJamDungeon
PlayerLogic.Set(GameRepo);
PlayerLogic.Set(PlayerData);
GameRepo.SetPlayerGlobalPosition(GlobalPosition);
EquippedWeapon = new AutoProp<WeaponInfo>(WeaponInfo.Default);
GameRepo.PlayerGlobalPosition.Sync += OnPlayerPositionUpdated;
}
private void OnPlayerPositionUpdated(Vector3 globalPosition)
{
GlobalPosition = globalPosition;
}
public void OnResolved()
{
PlayerBinding = PlayerLogic.Bind();
GameRepo.SetPlayerGlobalPosition(GlobalPosition);
PlayerBinding
.Handle((in PlayerLogic.Output.MovementComputed output) =>
{
@@ -104,9 +102,15 @@ namespace GameJamDungeon
this.Provide();
PlayerLogic.Start();
EquippedWeapon.Sync += OnEquippedWeaponChanged;
SwordSlashAnimation.Position = GetViewport().GetVisibleRect().Size / 2;
}
public void OnReady() => SetPhysicsProcess(true);
public void OnReady()
{
SetPhysicsProcess(true);
}
public void OnPhysicsProcess(double delta)
{
@@ -145,5 +149,9 @@ namespace GameJamDungeon
PlayerBinding.Dispose();
AnimationPlayer.AnimationFinished -= OnAnimationFinished;
}
private void OnEquippedWeaponChanged(WeaponInfo info) => Hitbox.Damage = info.Damage;
private void OnPlayerPositionUpdated(Vector3 globalPosition) => GlobalPosition = globalPosition;
}
}

View File

@@ -1,7 +1,8 @@
[gd_scene load_steps=15 format=3 uid="uid://cfecvvav8kkp6"]
[gd_scene load_steps=16 format=3 uid="uid://cfecvvav8kkp6"]
[ext_resource type="Script" path="res://src/player/Player.cs" id="1_xcol5"]
[ext_resource type="Texture2D" uid="uid://bokx3h8kfdo5i" path="res://src/player/slash_0000_Classic_30.png" id="2_la11l"]
[ext_resource type="Script" path="res://src/hitbox/Hitbox.cs" id="2_lb3qc"]
[ext_resource type="Texture2D" uid="uid://byosr5gk51237" path="res://src/player/slash_0001_Classic_29.png" id="3_ux3f1"]
[ext_resource type="Texture2D" uid="uid://nh071o6ii03j" path="res://src/player/slash_0002_Classic_28.png" id="4_gqnq0"]
[ext_resource type="Texture2D" uid="uid://bodfblud4kea3" path="res://src/player/slash_0003_Classic_27.png" id="5_eebal"]
@@ -29,7 +30,7 @@ tracks/0/keys = {
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Area3D/Hitbox:disabled")
tracks/1/path = NodePath("Hitbox/HitboxCollision:disabled")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
@@ -57,7 +58,7 @@ tracks/0/keys = {
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Area3D/Hitbox:disabled")
tracks/1/path = NodePath("Hitbox/HitboxCollision:disabled")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
@@ -137,13 +138,14 @@ libraries = {
"": SubResource("AnimationLibrary_w8l8m")
}
[node name="Area3D" type="Area3D" parent="."]
[node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, -1)
collision_layer = 16
collision_mask = 16
script = ExtResource("2_lb3qc")
[node name="Hitbox" type="CollisionShape3D" parent="Area3D"]
unique_name_in_owner = true
[node name="HitboxCollision" type="CollisionShape3D" parent="Hitbox"]
shape = SubResource("BoxShape3D_wedu3")
disabled = true

View File

@@ -1,4 +1,5 @@
using Chickensoft.Serialization;
using Chickensoft.Collections;
using Chickensoft.Serialization;
using Godot;
using System.Collections.Generic;
@@ -13,7 +14,7 @@ namespace GameJamDungeon
public required PlayerLogic StateMachine { get; init; }
[Save("PlayerEquippedSword")]
public required InventoryItemInfo EquippedWeapon { get; set; }
public required IAutoProp<WeaponInfo> EquippedWeapon { get; set; }
[Save("PlayerInventory")]
public required IEnumerable<InventoryItemInfo> Inventory { get; set; }