shungite spike state
parent
54c2bef86b
commit
ecfeb2f764
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://debqunpkdemj2"
|
||||||
|
path="res://.godot/imported/mini-shungite.png-01bdbec41fe54ed8fc826d4314ec257e.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sprites/Misc/mini-shungite.png"
|
||||||
|
dest_files=["res://.godot/imported/mini-shungite.png-01bdbec41fe54ed8fc826d4314ec257e.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 458 B |
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dvx2b0y6dup53"
|
||||||
|
path="res://.godot/imported/shungite-spike.png-3c88db04670aa56f0aed81fe7332990b.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sprites/Misc/shungite-spike.png"
|
||||||
|
dest_files=["res://.godot/imported/shungite-spike.png-3c88db04670aa56f0aed81fe7332990b.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
|
@ -1,5 +1,6 @@
|
||||||
using Godot;
|
using Godot;
|
||||||
using GodotUtilities;
|
using GodotUtilities;
|
||||||
|
using SupaLidlGame.Entities;
|
||||||
|
|
||||||
namespace SupaLidlGame.State.NPC.Doc;
|
namespace SupaLidlGame.State.NPC.Doc;
|
||||||
|
|
||||||
|
@ -39,9 +40,11 @@ public partial class DocAttackState : NPCState
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void SpawnProjectile(Vector2 position, Vector2 direction)
|
protected virtual Projectile SpawnProjectile(
|
||||||
|
Vector2 position,
|
||||||
|
Vector2 direction)
|
||||||
{
|
{
|
||||||
var projectile = _map.SpawnEntity<Entities.Projectile>(Projectile);
|
var projectile = _map.SpawnEntity<Projectile>(Projectile);
|
||||||
projectile.Hitbox.Faction = NPC.Faction;
|
projectile.Hitbox.Faction = NPC.Faction;
|
||||||
// global position is (from npc to player) * 2 = (2 * npc) - player
|
// global position is (from npc to player) * 2 = (2 * npc) - player
|
||||||
//projectile.GlobalPosition = 2 * NPC.GlobalPosition - playerPos;
|
//projectile.GlobalPosition = 2 * NPC.GlobalPosition - playerPos;
|
||||||
|
@ -49,6 +52,20 @@ public partial class DocAttackState : NPCState
|
||||||
projectile.Direction = direction;
|
projectile.Direction = direction;
|
||||||
projectile.GlobalRotation = direction.Angle();
|
projectile.GlobalRotation = direction.Angle();
|
||||||
projectile.Delay = 1 / _intensity;
|
projectile.Delay = 1 / _intensity;
|
||||||
|
return projectile;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void Attack()
|
||||||
|
{
|
||||||
|
var player = _world.CurrentPlayer;
|
||||||
|
var playerPos = player.GlobalPosition;
|
||||||
|
Vector2 position1 = 2 * NPC.GlobalPosition - playerPos;
|
||||||
|
Vector2 position2 = 2 * playerPos - NPC.GlobalPosition;
|
||||||
|
Vector2 direction1 = position1.DirectionTo(playerPos);
|
||||||
|
Vector2 direction2 = -direction1;
|
||||||
|
SpawnProjectile(position1, direction1);
|
||||||
|
SpawnProjectile(position2, direction2);
|
||||||
|
_currentAttackDuration = AttackDuration / _intensity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override NPCState Process(double delta)
|
public override NPCState Process(double delta)
|
||||||
|
@ -70,15 +87,7 @@ public partial class DocAttackState : NPCState
|
||||||
|
|
||||||
if ((_currentAttackDuration -= delta) <= 0)
|
if ((_currentAttackDuration -= delta) <= 0)
|
||||||
{
|
{
|
||||||
var player = _world.CurrentPlayer;
|
Attack();
|
||||||
var playerPos = player.GlobalPosition;
|
|
||||||
Vector2 position1 = 2 * NPC.GlobalPosition - playerPos;
|
|
||||||
Vector2 position2 = 2 * playerPos - NPC.GlobalPosition;
|
|
||||||
Vector2 direction1 = position1.DirectionTo(playerPos);
|
|
||||||
Vector2 direction2 = -direction1;
|
|
||||||
SpawnProjectile(position1, direction1);
|
|
||||||
SpawnProjectile(position2, direction2);
|
|
||||||
_currentAttackDuration = AttackDuration / _intensity;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
using Godot;
|
||||||
|
using GodotUtilities;
|
||||||
|
using SupaLidlGame.Entities;
|
||||||
|
|
||||||
|
namespace SupaLidlGame.State.NPC.Doc;
|
||||||
|
|
||||||
|
public partial class DocShungiteSpikeState : DocAttackState
|
||||||
|
{
|
||||||
|
private float _intensity = 1;
|
||||||
|
|
||||||
|
protected override Projectile SpawnProjectile(
|
||||||
|
Vector2 position,
|
||||||
|
Vector2 direction)
|
||||||
|
{
|
||||||
|
var projectile = base.SpawnProjectile(position, direction);
|
||||||
|
projectile.Delay = 4;
|
||||||
|
return projectile;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Attack()
|
||||||
|
{
|
||||||
|
var player = _world.CurrentPlayer;
|
||||||
|
var playerPos = player.GlobalPosition;
|
||||||
|
Vector2 left = playerPos + Vector2.Left * 64;
|
||||||
|
Vector2 right = playerPos + Vector2.Right * 64;
|
||||||
|
Vector2 up = playerPos + Vector2.Up * 64;
|
||||||
|
Vector2 down = playerPos + Vector2.Down * 64;
|
||||||
|
SpawnProjectile(left, Vector2.Zero);
|
||||||
|
SpawnProjectile(right, Vector2.Zero);
|
||||||
|
SpawnProjectile(up, Vector2.Zero);
|
||||||
|
SpawnProjectile(down, Vector2.Zero);
|
||||||
|
|
||||||
|
// only attack once and stop (but keep in this state for 8 seconds)
|
||||||
|
_currentAttackDuration = float.PositiveInfinity;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue