spawners
							parent
							
								
									bcd84e8f39
								
							
						
					
					
						commit
						39d4069aa1
					
				|  | @ -189,6 +189,8 @@ namespace SupaLidlGame.Characters | |||
| 
 | ||||
|             ApplyImpulse(knockbackDir.Normalized() * knockback); | ||||
| 
 | ||||
|             GD.Print("lol"); | ||||
| 
 | ||||
|             // play damage animation | ||||
|             var anim = GetNode<AnimationPlayer>("FlashAnimation"); | ||||
|             if (anim != null) | ||||
|  |  | |||
|  | @ -167,7 +167,7 @@ namespace SupaLidlGame.Characters | |||
|                     CollideWithBodies = true, | ||||
|                     From = GlobalPosition, | ||||
|                     To = GlobalPosition + (_weightDirs[i] * 24), | ||||
|                     CollisionMask = 1 + 8 | ||||
|                     CollisionMask = 1 + 2 + 16 | ||||
|                 }; | ||||
| 
 | ||||
|                 var result = spaceState.IntersectRay(rayParams); | ||||
|  |  | |||
|  | @ -130,6 +130,7 @@ namespace SupaLidlGame.Items | |||
|             { | ||||
|                 if (child is Item item) | ||||
|                 { | ||||
|                     GD.Print("Adding item " + item.Name); | ||||
|                     AddItem(item); | ||||
|                 } | ||||
|             } | ||||
|  |  | |||
|  | @ -35,6 +35,9 @@ namespace SupaLidlGame.Items | |||
|         [Export] | ||||
|         public float InitialVelocity { get; set; } = 0; | ||||
| 
 | ||||
|         [Export] | ||||
|         public bool ShouldHideIdle { get; set; } = false; | ||||
| 
 | ||||
|         public virtual bool IsParryable { get; protected set; } = false; | ||||
| 
 | ||||
|         public bool IsParried { get; set; } | ||||
|  | @ -51,7 +54,10 @@ namespace SupaLidlGame.Items | |||
| 
 | ||||
|         public override void Equip(Character character) | ||||
|         { | ||||
|             Visible = true; | ||||
|             if (!ShouldHideIdle || IsUsing) | ||||
|             { | ||||
|                 Visible = true; | ||||
|             } | ||||
|             Character = character; | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
|  | @ -332,7 +332,7 @@ graph_offset = Vector2(0, -104.073) | |||
| radius = 20.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 | ||||
| texture_filter = 3 | ||||
| script = ExtResource("1_mlo73") | ||||
|  | @ -348,6 +348,7 @@ Anchor = NodePath("Anchor") | |||
| Damage = 20.0 | ||||
| UseTime = 0.8 | ||||
| Knockback = 64.0 | ||||
| ShouldHideIdle = true | ||||
| 
 | ||||
| [node name="State" type="Node" parent="." node_paths=PackedStringArray("InitialState")] | ||||
| 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"); | ||||
|             Vector2 mousePos = Character.GetGlobalMousePosition(); | ||||
|             Vector2 dirToMouse = Character.GlobalPosition.DirectionTo(mousePos); | ||||
| 
 | ||||
|             bool faceToDir = !Character.Direction.IsZeroApprox(); | ||||
| 
 | ||||
|             if (Character.Inventory.SelectedItem is Items.Weapon weapon) | ||||
|             { | ||||
|                 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; | ||||
|             } | ||||
|  | @ -53,7 +68,6 @@ namespace SupaLidlGame.State.Character | |||
|                     { | ||||
|                         Character.Target = dirToMouse; | ||||
|                     } | ||||
|                     Character.Target = dirToMouse; | ||||
|                     Character.UseCurrentItem(); | ||||
|                 } | ||||
|             } | ||||
|  |  | |||
|  | @ -7,7 +7,14 @@ namespace SupaLidlGame.State.Weapon | |||
|         [Export] | ||||
|         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() | ||||
|         { | ||||
|  | @ -16,7 +23,7 @@ namespace SupaLidlGame.State.Weapon | |||
| 
 | ||||
|         public override void Exit(IState<WeaponState> nextState) | ||||
|         { | ||||
| 
 | ||||
|             Weapon.Visible = true; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -39,9 +39,7 @@ namespace SupaLidlGame.State.Weapon | |||
|             _useDuration = Sword.UseTime; | ||||
|             _attackAnimDuration = Sword.AttackAnimationDuration; | ||||
| 
 | ||||
|             GD.Print(_attackDuration); | ||||
|             GD.Print(_useDuration); | ||||
|             GD.Print(_attackAnimDuration); | ||||
|             Sword.Visible = true; | ||||
| 
 | ||||
|             return null; | ||||
|         } | ||||
|  | @ -60,7 +58,7 @@ namespace SupaLidlGame.State.Weapon | |||
|                 { | ||||
|                     _isAlternate = !_isAlternate; | ||||
|                 } | ||||
|                 return AnticipateState; | ||||
|                 return IdleState; | ||||
|             } | ||||
| 
 | ||||
|             return null; | ||||
|  |  | |||
|  | @ -18,9 +18,17 @@ namespace SupaLidlGame.State.Weapon | |||
|             { | ||||
|                 _attackCooldown = Sword.UseTime - Sword.AttackTime; | ||||
|             } | ||||
| 
 | ||||
|             Sword.Visible = !Sword.ShouldHideIdle; | ||||
| 
 | ||||
|             return null; | ||||
|         } | ||||
| 
 | ||||
|         public override void Exit(IState<WeaponState> nextState) | ||||
|         { | ||||
|             Sword.Visible = true; | ||||
|         } | ||||
| 
 | ||||
|         public override WeaponState Use() | ||||
|         { | ||||
|             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