spawners
parent
bcd84e8f39
commit
39d4069aa1
|
@ -189,6 +189,8 @@ namespace SupaLidlGame.Characters
|
||||||
|
|
||||||
ApplyImpulse(knockbackDir.Normalized() * knockback);
|
ApplyImpulse(knockbackDir.Normalized() * knockback);
|
||||||
|
|
||||||
|
GD.Print("lol");
|
||||||
|
|
||||||
// play damage animation
|
// play damage animation
|
||||||
var anim = GetNode<AnimationPlayer>("FlashAnimation");
|
var anim = GetNode<AnimationPlayer>("FlashAnimation");
|
||||||
if (anim != null)
|
if (anim != null)
|
||||||
|
|
|
@ -167,7 +167,7 @@ namespace SupaLidlGame.Characters
|
||||||
CollideWithBodies = true,
|
CollideWithBodies = true,
|
||||||
From = GlobalPosition,
|
From = GlobalPosition,
|
||||||
To = GlobalPosition + (_weightDirs[i] * 24),
|
To = GlobalPosition + (_weightDirs[i] * 24),
|
||||||
CollisionMask = 1 + 8
|
CollisionMask = 1 + 2 + 16
|
||||||
};
|
};
|
||||||
|
|
||||||
var result = spaceState.IntersectRay(rayParams);
|
var result = spaceState.IntersectRay(rayParams);
|
||||||
|
|
|
@ -130,6 +130,7 @@ namespace SupaLidlGame.Items
|
||||||
{
|
{
|
||||||
if (child is Item item)
|
if (child is Item item)
|
||||||
{
|
{
|
||||||
|
GD.Print("Adding item " + item.Name);
|
||||||
AddItem(item);
|
AddItem(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,9 @@ namespace SupaLidlGame.Items
|
||||||
[Export]
|
[Export]
|
||||||
public float InitialVelocity { get; set; } = 0;
|
public float InitialVelocity { get; set; } = 0;
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public bool ShouldHideIdle { get; set; } = false;
|
||||||
|
|
||||||
public virtual bool IsParryable { get; protected set; } = false;
|
public virtual bool IsParryable { get; protected set; } = false;
|
||||||
|
|
||||||
public bool IsParried { get; set; }
|
public bool IsParried { get; set; }
|
||||||
|
@ -51,7 +54,10 @@ namespace SupaLidlGame.Items
|
||||||
|
|
||||||
public override void Equip(Character character)
|
public override void Equip(Character character)
|
||||||
{
|
{
|
||||||
Visible = true;
|
if (!ShouldHideIdle || IsUsing)
|
||||||
|
{
|
||||||
|
Visible = true;
|
||||||
|
}
|
||||||
Character = character;
|
Character = character;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -332,7 +332,7 @@ graph_offset = Vector2(0, -104.073)
|
||||||
radius = 20.0
|
radius = 20.0
|
||||||
height = 48.0
|
height = 48.0
|
||||||
|
|
||||||
[node name="Node2D" type="Node2D" node_paths=PackedStringArray("Hitbox", "AnimationPlayer", "AnimationTree", "ParryParticles", "StateMachine", "Anchor")]
|
[node name="Sword" type="Node2D" node_paths=PackedStringArray("Hitbox", "AnimationPlayer", "AnimationTree", "ParryParticles", "StateMachine", "Anchor")]
|
||||||
y_sort_enabled = true
|
y_sort_enabled = true
|
||||||
texture_filter = 3
|
texture_filter = 3
|
||||||
script = ExtResource("1_mlo73")
|
script = ExtResource("1_mlo73")
|
||||||
|
@ -348,6 +348,7 @@ Anchor = NodePath("Anchor")
|
||||||
Damage = 20.0
|
Damage = 20.0
|
||||||
UseTime = 0.8
|
UseTime = 0.8
|
||||||
Knockback = 64.0
|
Knockback = 64.0
|
||||||
|
ShouldHideIdle = true
|
||||||
|
|
||||||
[node name="State" type="Node" parent="." node_paths=PackedStringArray("InitialState")]
|
[node name="State" type="Node" parent="." node_paths=PackedStringArray("InitialState")]
|
||||||
script = ExtResource("2_vwirq")
|
script = ExtResource("2_vwirq")
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -32,14 +32,29 @@ namespace SupaLidlGame.State.Character
|
||||||
"ui_up", "ui_down");
|
"ui_up", "ui_down");
|
||||||
Vector2 mousePos = Character.GetGlobalMousePosition();
|
Vector2 mousePos = Character.GetGlobalMousePosition();
|
||||||
Vector2 dirToMouse = Character.GlobalPosition.DirectionTo(mousePos);
|
Vector2 dirToMouse = Character.GlobalPosition.DirectionTo(mousePos);
|
||||||
|
|
||||||
|
bool faceToDir = !Character.Direction.IsZeroApprox();
|
||||||
|
|
||||||
if (Character.Inventory.SelectedItem is Items.Weapon weapon)
|
if (Character.Inventory.SelectedItem is Items.Weapon weapon)
|
||||||
{
|
{
|
||||||
if (!weapon.IsUsing)
|
if (!weapon.IsUsing)
|
||||||
{
|
{
|
||||||
Character.Target = dirToMouse;
|
if (weapon.ShouldHideIdle)
|
||||||
|
{
|
||||||
|
faceToDir = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Character.Target = dirToMouse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
faceToDir = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!Character.Direction.IsZeroApprox())
|
|
||||||
|
if (faceToDir)
|
||||||
{
|
{
|
||||||
Character.Target = Character.Direction;
|
Character.Target = Character.Direction;
|
||||||
}
|
}
|
||||||
|
@ -53,7 +68,6 @@ namespace SupaLidlGame.State.Character
|
||||||
{
|
{
|
||||||
Character.Target = dirToMouse;
|
Character.Target = dirToMouse;
|
||||||
}
|
}
|
||||||
Character.Target = dirToMouse;
|
|
||||||
Character.UseCurrentItem();
|
Character.UseCurrentItem();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,14 @@ namespace SupaLidlGame.State.Weapon
|
||||||
[Export]
|
[Export]
|
||||||
public RangedFireState FireState { get; set; }
|
public RangedFireState FireState { get; set; }
|
||||||
|
|
||||||
public override IState<WeaponState> Enter(IState<WeaponState> prev) => null;
|
[Export]
|
||||||
|
public Items.Weapons.Ranged Weapon { get; set; }
|
||||||
|
|
||||||
|
public override IState<WeaponState> Enter(IState<WeaponState> prev)
|
||||||
|
{
|
||||||
|
Weapon.Visible = !Weapon.ShouldHideIdle;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public override WeaponState Use()
|
public override WeaponState Use()
|
||||||
{
|
{
|
||||||
|
@ -16,7 +23,7 @@ namespace SupaLidlGame.State.Weapon
|
||||||
|
|
||||||
public override void Exit(IState<WeaponState> nextState)
|
public override void Exit(IState<WeaponState> nextState)
|
||||||
{
|
{
|
||||||
|
Weapon.Visible = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,9 +39,7 @@ namespace SupaLidlGame.State.Weapon
|
||||||
_useDuration = Sword.UseTime;
|
_useDuration = Sword.UseTime;
|
||||||
_attackAnimDuration = Sword.AttackAnimationDuration;
|
_attackAnimDuration = Sword.AttackAnimationDuration;
|
||||||
|
|
||||||
GD.Print(_attackDuration);
|
Sword.Visible = true;
|
||||||
GD.Print(_useDuration);
|
|
||||||
GD.Print(_attackAnimDuration);
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -60,7 +58,7 @@ namespace SupaLidlGame.State.Weapon
|
||||||
{
|
{
|
||||||
_isAlternate = !_isAlternate;
|
_isAlternate = !_isAlternate;
|
||||||
}
|
}
|
||||||
return AnticipateState;
|
return IdleState;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -18,9 +18,17 @@ namespace SupaLidlGame.State.Weapon
|
||||||
{
|
{
|
||||||
_attackCooldown = Sword.UseTime - Sword.AttackTime;
|
_attackCooldown = Sword.UseTime - Sword.AttackTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Sword.Visible = !Sword.ShouldHideIdle;
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void Exit(IState<WeaponState> nextState)
|
||||||
|
{
|
||||||
|
Sword.Visible = true;
|
||||||
|
}
|
||||||
|
|
||||||
public override WeaponState Use()
|
public override WeaponState Use()
|
||||||
{
|
{
|
||||||
if (_attackCooldown <= 0)
|
if (_attackCooldown <= 0)
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
using Godot;
|
||||||
|
using Godot.Collections;
|
||||||
|
using SupaLidlGame.Extensions;
|
||||||
|
|
||||||
|
namespace SupaLidlGame.Utils
|
||||||
|
{
|
||||||
|
public partial class Spawner : Node2D
|
||||||
|
{
|
||||||
|
[Export]
|
||||||
|
public Area2D SpawnArea { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public PackedScene Character { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public double SpawnTime { get; set; }
|
||||||
|
|
||||||
|
protected double _timeLeftToSpawn = 0;
|
||||||
|
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void _Process(double delta)
|
||||||
|
{
|
||||||
|
if ((_timeLeftToSpawn -= delta) <= 0)
|
||||||
|
{
|
||||||
|
_timeLeftToSpawn = SpawnTime;
|
||||||
|
Spawn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Spawn()
|
||||||
|
{
|
||||||
|
var coll = GetNode<CollisionShape2D>("Area2D/CollisionShape2D");
|
||||||
|
var rect = coll.Shape as RectangleShape2D;
|
||||||
|
if (rect is not null)
|
||||||
|
{
|
||||||
|
Vector2 size = rect.Size / 2;
|
||||||
|
Vector2 pos = GlobalPosition;
|
||||||
|
|
||||||
|
double x1, x2, y1, y2;
|
||||||
|
x1 = pos.X - size.X;
|
||||||
|
x2 = pos.X + size.X;
|
||||||
|
y1 = pos.Y - size.Y;
|
||||||
|
y2 = pos.Y + size.Y;
|
||||||
|
|
||||||
|
float randX = (float)GD.RandRange(x1, x2);
|
||||||
|
float randY = (float)GD.RandRange(y1, y2);
|
||||||
|
|
||||||
|
Vector2 randPos = new Vector2(randX, randY);
|
||||||
|
|
||||||
|
var chr = Character.Instantiate<Characters.Character>();
|
||||||
|
chr.GlobalPosition = randPos;
|
||||||
|
this.GetAncestor<Scenes.Map>().Entities.AddChild(chr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
[gd_scene load_steps=3 format=3 uid="uid://5nvn1tw56m8e"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://Utils/Spawner.cs" id="1_6sr3u"]
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_smmx0"]
|
||||||
|
|
||||||
|
[node name="Spawner" type="Node2D" node_paths=PackedStringArray("SpawnArea")]
|
||||||
|
script = ExtResource("1_6sr3u")
|
||||||
|
SpawnArea = NodePath("Area2D")
|
||||||
|
|
||||||
|
[node name="Area2D" type="Area2D" parent="."]
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
|
||||||
|
shape = SubResource("RectangleShape2D_smmx0")
|
Loading…
Reference in New Issue