batching damage text
parent
673bebcabf
commit
b18b011133
|
@ -104,6 +104,8 @@ public partial class Character : CharacterBody2D, IFaction
|
|||
|
||||
public AnimationPlayer AttackAnimation { get; set; }
|
||||
|
||||
private UI.DamageText _curDamageText;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
// TODO: 80+ char line
|
||||
|
@ -268,6 +270,20 @@ public partial class Character : CharacterBody2D, IFaction
|
|||
float knockback,
|
||||
Vector2 knockbackDir = default) => damage;
|
||||
|
||||
protected void CreateDamageText(float damage)
|
||||
{
|
||||
// create damage text
|
||||
var textScene = GD.Load<PackedScene>("res://UI/DamageText.tscn");
|
||||
if (_curDamageText is null || !IsInstanceValid(_curDamageText))
|
||||
{
|
||||
_curDamageText = textScene.Instantiate<UI.DamageText>();
|
||||
this.GetWorld().CurrentMap.AddChild(_curDamageText);
|
||||
}
|
||||
_curDamageText.Damage += damage;
|
||||
_curDamageText.Timer.Start();
|
||||
_curDamageText.GlobalPosition = GlobalPosition;
|
||||
_curDamageText.ShowText();
|
||||
}
|
||||
|
||||
protected virtual void OnReceivedDamage(
|
||||
float damage,
|
||||
|
@ -281,7 +297,8 @@ public partial class Character : CharacterBody2D, IFaction
|
|||
}
|
||||
|
||||
float oldHealth = Health;
|
||||
Health -= ReceiveDamage(damage, inflictor, knockback, knockbackDir);
|
||||
damage = ReceiveDamage(damage, inflictor, knockback, knockbackDir);
|
||||
Health -= damage;
|
||||
|
||||
var hurtParticles = GetNode<GpuParticles2D>("Effects/HurtParticles");
|
||||
if (hurtParticles is not null)
|
||||
|
@ -289,15 +306,9 @@ public partial class Character : CharacterBody2D, IFaction
|
|||
hurtParticles.SetDirection(knockbackDir);
|
||||
}
|
||||
|
||||
// create damage text
|
||||
var textScene = GD.Load<PackedScene>("res://UI/FloatingText.tscn");
|
||||
var instance = textScene.Instantiate<UI.FloatingText>();
|
||||
instance.Text = Mathf.Round(damage).ToString();
|
||||
instance.GlobalPosition = GlobalPosition;
|
||||
this.GetAncestor<TileMap>().AddChild(instance);
|
||||
CreateDamageText(damage);
|
||||
|
||||
// apply knockback
|
||||
|
||||
ApplyImpulse(knockbackDir.Normalized() * knockback);
|
||||
|
||||
// play damage animation
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
using Godot;
|
||||
|
||||
namespace SupaLidlGame.UI;
|
||||
|
||||
public partial class DamageText : FloatingText
|
||||
{
|
||||
private float _damage = 0;
|
||||
|
||||
public float Damage
|
||||
{
|
||||
get => _damage;
|
||||
set
|
||||
{
|
||||
_damage = value;
|
||||
Text = Mathf.Round(value).ToString();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://b05ormmtofbw1"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://be80n7mxp62jd" path="res://UI/FloatingText.tscn" id="1_dggpv"]
|
||||
[ext_resource type="Script" path="res://UI/DamageText.cs" id="2_psgc1"]
|
||||
|
||||
[node name="FloatingText" instance=ExtResource("1_dggpv")]
|
||||
z_index = 16
|
||||
script = ExtResource("2_psgc1")
|
|
@ -5,17 +5,55 @@ namespace SupaLidlGame.UI;
|
|||
|
||||
public partial class FloatingText : Node2D
|
||||
{
|
||||
private Label _label;
|
||||
private string _text;
|
||||
|
||||
[Export]
|
||||
public string Text { get; set; }
|
||||
public string Text
|
||||
{
|
||||
get => _text;
|
||||
set
|
||||
{
|
||||
_text = value;
|
||||
if (_label is not null)
|
||||
{
|
||||
_label.Text = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Timer Timer { get; set; }
|
||||
|
||||
protected Label _label;
|
||||
|
||||
protected Tween _tween;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
_label = GetNode<Label>("Label");
|
||||
_label.Text = Text;
|
||||
_label.Text = _text;
|
||||
|
||||
Tween tween = GetTree().CreateTween()
|
||||
Timer = GetNode<Timer>("Timer");
|
||||
Timer.Timeout += Die;
|
||||
|
||||
ShowText();
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
Modulate = Colors.White;
|
||||
Scale = Vector2.One * 0.5f;
|
||||
}
|
||||
|
||||
public void ShowText()
|
||||
{
|
||||
Reset();
|
||||
|
||||
if (_tween is not null && _tween.IsRunning())
|
||||
{
|
||||
_tween.Kill();
|
||||
}
|
||||
|
||||
_tween = GetTree().CreateTween()
|
||||
.SetEase(Tween.EaseType.Out)
|
||||
.SetTrans(Tween.TransitionType.Quint)
|
||||
.SetParallel();
|
||||
|
@ -27,23 +65,19 @@ public partial class FloatingText : Node2D
|
|||
return (float)rng.NextDouble() * (max - min) + min;
|
||||
}
|
||||
|
||||
GD.Print(GlobalPosition);
|
||||
Position += new Vector2(randomFloat(-8, 8), 0);
|
||||
var endPos = Position + new Vector2(0, randomFloat(-16, -8));
|
||||
var endMod = new Color(1, 1, 1, 0);
|
||||
var endScale = Scale * 0.5f;
|
||||
|
||||
tween.TweenProperty(this, "position", endPos, 0.5f);
|
||||
tween.SetTrans(Tween.TransitionType.Linear);
|
||||
tween.TweenProperty(this, "modulate", endMod, 0.5f).SetDelay(1.0f);
|
||||
tween.TweenProperty(this, "scale", endScale, 0.5f).SetDelay(1.0f);
|
||||
tween.TweenCallback(new Callable(this, nameof(OnTweenFinished)))
|
||||
.SetDelay(2.5f);
|
||||
|
||||
base._Ready();
|
||||
_tween.TweenProperty(this, "position", endPos, 0.5f);
|
||||
_tween.SetTrans(Tween.TransitionType.Linear);
|
||||
_tween.TweenProperty(this, "modulate", endMod, 0.5f).SetDelay(1.0f);
|
||||
_tween.TweenProperty(this, "scale", endScale, 0.5f).SetDelay(1.0f);
|
||||
_tween.Play();
|
||||
}
|
||||
|
||||
public void OnTweenFinished()
|
||||
public void Die()
|
||||
{
|
||||
QueueFree();
|
||||
}
|
||||
|
|
|
@ -5,10 +5,11 @@
|
|||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_gs6ch"]
|
||||
font = ExtResource("1_yns15")
|
||||
font_color = Color(1, 0.792157, 0, 1)
|
||||
font_color = Color(0.941176, 0.843137, 0.470588, 1)
|
||||
outline_size = 2
|
||||
outline_color = Color(0.635294, 0.415686, 0, 1)
|
||||
shadow_color = Color(0, 0, 0, 1)
|
||||
outline_color = Color(0.713726, 0.372549, 0.105882, 1)
|
||||
shadow_size = 2
|
||||
shadow_color = Color(0.176471, 0.0901961, 0.172549, 1)
|
||||
|
||||
[node name="FloatingText" type="Node2D"]
|
||||
scale = Vector2(0.5, 0.5)
|
||||
|
@ -24,3 +25,7 @@ text = "gruppa krovi"
|
|||
label_settings = SubResource("LabelSettings_gs6ch")
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="Timer" type="Timer" parent="."]
|
||||
wait_time = 2.5
|
||||
autostart = true
|
||||
|
|
Loading…
Reference in New Issue