forsenMaxLevel (wip)
parent
31c66d33ed
commit
8e78b26b35
Binary file not shown.
|
@ -0,0 +1,24 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="wav"
|
||||||
|
type="AudioStreamWAV"
|
||||||
|
uid="uid://st8qgqiygy5a"
|
||||||
|
path="res://.godot/imported/electricity.wav-4f5dd5035ad6bc81baa17eb1f0e1cf12.sample"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sounds/electricity.wav"
|
||||||
|
dest_files=["res://.godot/imported/electricity.wav-4f5dd5035ad6bc81baa17eb1f0e1cf12.sample"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
force/8_bit=false
|
||||||
|
force/mono=false
|
||||||
|
force/max_rate=false
|
||||||
|
force/max_rate_hz=44100
|
||||||
|
edit/trim=false
|
||||||
|
edit/normalize=false
|
||||||
|
edit/loop_mode=0
|
||||||
|
edit/loop_begin=0
|
||||||
|
edit/loop_end=-1
|
||||||
|
compress/mode=0
|
Binary file not shown.
|
@ -0,0 +1,24 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="wav"
|
||||||
|
type="AudioStreamWAV"
|
||||||
|
uid="uid://b1jmusgltouak"
|
||||||
|
path="res://.godot/imported/lightning.wav-0c79746e61bfbd3e703c768ad9b1f4a8.sample"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sounds/lightning.wav"
|
||||||
|
dest_files=["res://.godot/imported/lightning.wav-0c79746e61bfbd3e703c768ad9b1f4a8.sample"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
force/8_bit=false
|
||||||
|
force/mono=false
|
||||||
|
force/max_rate=false
|
||||||
|
force/max_rate_hz=44100
|
||||||
|
edit/trim=false
|
||||||
|
edit/normalize=false
|
||||||
|
edit/loop_mode=0
|
||||||
|
edit/loop_begin=0
|
||||||
|
edit/loop_end=-1
|
||||||
|
compress/mode=0
|
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 419 B |
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bcgm3r168qjn3"
|
||||||
|
path="res://.godot/imported/cast-effect.png-a55c94ba5f88606435ca8cf19d5d4d2c.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sprites/Particles/cast-effect.png"
|
||||||
|
dest_files=["res://.godot/imported/cast-effect.png-a55c94ba5f88606435ca8cf19d5d4d2c.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: 1.1 KiB |
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cf1a0uk34o343"
|
||||||
|
path="res://.godot/imported/lightning.png-63b6bcc35fd63e8582f4de50211aa0f6.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Assets/Sprites/Particles/lightning.png"
|
||||||
|
dest_files=["res://.godot/imported/lightning.png-63b6bcc35fd63e8582f4de50211aa0f6.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
|
|
@ -15,6 +15,8 @@ public sealed partial class Player : Character
|
||||||
|
|
||||||
private Node2D _effects;
|
private Node2D _effects;
|
||||||
|
|
||||||
|
private Node2D _characterEffects;
|
||||||
|
|
||||||
[Node]
|
[Node]
|
||||||
private TargetTracer _targetTracer;
|
private TargetTracer _targetTracer;
|
||||||
|
|
||||||
|
@ -51,6 +53,8 @@ public sealed partial class Player : Character
|
||||||
|
|
||||||
_effects = GetNode<Node2D>("%Effects");
|
_effects = GetNode<Node2D>("%Effects");
|
||||||
|
|
||||||
|
_characterEffects = GetNode<Node2D>("%CharacterEffects");
|
||||||
|
|
||||||
_targetTracer = GetNode<TargetTracer>("%TargetTracer");
|
_targetTracer = GetNode<TargetTracer>("%TargetTracer");
|
||||||
|
|
||||||
Stats = GetNode<PlayerStats>("Stats");
|
Stats = GetNode<PlayerStats>("Stats");
|
||||||
|
@ -174,6 +178,14 @@ public sealed partial class Player : Character
|
||||||
{
|
{
|
||||||
base.DrawTarget();
|
base.DrawTarget();
|
||||||
DirectionMarker.GlobalRotation = DesiredTarget.Angle();
|
DirectionMarker.GlobalRotation = DesiredTarget.Angle();
|
||||||
|
if (Target.X < 0)
|
||||||
|
{
|
||||||
|
_characterEffects.Scale = new Vector2(-1, 1);
|
||||||
|
}
|
||||||
|
else if (Target.X > 0)
|
||||||
|
{
|
||||||
|
_characterEffects.Scale = new Vector2(1, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Footstep()
|
public override void Footstep()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=70 format=3 uid="uid://b2254pup8k161"]
|
[gd_scene load_steps=77 format=3 uid="uid://b2254pup8k161"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://Characters/Player.cs" id="1_flygr"]
|
[ext_resource type="Script" path="res://Characters/Player.cs" id="1_flygr"]
|
||||||
[ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="2_ngsgt"]
|
[ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="2_ngsgt"]
|
||||||
|
@ -28,15 +28,16 @@
|
||||||
[ext_resource type="AudioStream" uid="uid://cruylv4pu2fo1" path="res://Assets/Sounds/footstep-tile.wav" id="13_bxguv"]
|
[ext_resource type="AudioStream" uid="uid://cruylv4pu2fo1" path="res://Assets/Sounds/footstep-tile.wav" id="13_bxguv"]
|
||||||
[ext_resource type="Script" path="res://BoundingBoxes/InteractionRay.cs" id="13_hs3u1"]
|
[ext_resource type="Script" path="res://BoundingBoxes/InteractionRay.cs" id="13_hs3u1"]
|
||||||
[ext_resource type="Script" path="res://State/Character/PlayerHealState.cs" id="13_t103m"]
|
[ext_resource type="Script" path="res://State/Character/PlayerHealState.cs" id="13_t103m"]
|
||||||
|
[ext_resource type="Script" path="res://State/Character/PlayerMaxLevelState.cs" id="14_1sn10"]
|
||||||
[ext_resource type="PackedScene" uid="uid://p7oijq6dbvvk" path="res://Items/Weapons/DocLance.tscn" id="14_bj0lo"]
|
[ext_resource type="PackedScene" uid="uid://p7oijq6dbvvk" path="res://Items/Weapons/DocLance.tscn" id="14_bj0lo"]
|
||||||
[ext_resource type="Texture2D" uid="uid://d1ukste16yq6v" path="res://Assets/Sprites/Particles/player-light.png" id="15_3hahh"]
|
[ext_resource type="Texture2D" uid="uid://d1ukste16yq6v" path="res://Assets/Sprites/Particles/player-light.png" id="15_3hahh"]
|
||||||
[ext_resource type="Script" path="res://Utils/DamageTime.cs" id="15_4xl06"]
|
[ext_resource type="Script" path="res://Utils/DamageTime.cs" id="15_4xl06"]
|
||||||
[ext_resource type="AudioStream" uid="uid://st8qgqiygy5a" path="res://Assets/Sounds/electricity.wav" id="15_61bua"]
|
[ext_resource type="AudioStream" uid="uid://st8qgqiygy5a" path="res://Assets/Sounds/electricity.wav" id="15_61bua"]
|
||||||
[ext_resource type="AudioStream" uid="uid://b1jmusgltouak" path="res://Assets/Sounds/lightning.wav" id="16_fo4my"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://g7wfcubs6bdd" path="res://Items/Weapons/Railgun.tscn" id="21_n8w32"]
|
[ext_resource type="PackedScene" uid="uid://g7wfcubs6bdd" path="res://Items/Weapons/Railgun.tscn" id="21_n8w32"]
|
||||||
[ext_resource type="PackedScene" uid="uid://ce0ph4wk0ylra" path="res://UI/TargetTracer.tscn" id="22_hxi53"]
|
[ext_resource type="PackedScene" uid="uid://ce0ph4wk0ylra" path="res://UI/TargetTracer.tscn" id="22_hxi53"]
|
||||||
[ext_resource type="PackedScene" uid="uid://5y1acxl4j4n7" path="res://Items/Weapons/Pugio.tscn" id="22_mqpn7"]
|
[ext_resource type="PackedScene" uid="uid://5y1acxl4j4n7" path="res://Items/Weapons/Pugio.tscn" id="22_mqpn7"]
|
||||||
[ext_resource type="PackedScene" uid="uid://d1d4vg7we5rjr" path="res://Items/Weapons/Shotgun.tscn" id="22_rmciq"]
|
[ext_resource type="PackedScene" uid="uid://d1d4vg7we5rjr" path="res://Items/Weapons/Shotgun.tscn" id="22_rmciq"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://bd8l8kafb42dt" path="res://Assets/Sprites/Particles/circle.png" id="22_uefct"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bcgm3r168qjn3" path="res://Assets/Sprites/Particles/cast-effect.png" id="24_njn4h"]
|
[ext_resource type="Texture2D" uid="uid://bcgm3r168qjn3" path="res://Assets/Sprites/Particles/cast-effect.png" id="24_njn4h"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cgg0sfm2qeiwn" path="res://Items/Weapons/Bow.tscn" id="29_7j1fs"]
|
[ext_resource type="PackedScene" uid="uid://cgg0sfm2qeiwn" path="res://Items/Weapons/Bow.tscn" id="29_7j1fs"]
|
||||||
|
|
||||||
|
@ -251,7 +252,7 @@ tracks/2/keys = {
|
||||||
tracks/3/type = "value"
|
tracks/3/type = "value"
|
||||||
tracks/3/imported = false
|
tracks/3/imported = false
|
||||||
tracks/3/enabled = true
|
tracks/3/enabled = true
|
||||||
tracks/3/path = NodePath("%Effects/Cast:visible")
|
tracks/3/path = NodePath("../Sprites/CharacterEffects/Cast:visible")
|
||||||
tracks/3/interp = 1
|
tracks/3/interp = 1
|
||||||
tracks/3/loop_wrap = true
|
tracks/3/loop_wrap = true
|
||||||
tracks/3/keys = {
|
tracks/3/keys = {
|
||||||
|
@ -263,7 +264,7 @@ tracks/3/keys = {
|
||||||
tracks/4/type = "value"
|
tracks/4/type = "value"
|
||||||
tracks/4/imported = false
|
tracks/4/imported = false
|
||||||
tracks/4/enabled = true
|
tracks/4/enabled = true
|
||||||
tracks/4/path = NodePath("%Effects/Cast:frame")
|
tracks/4/path = NodePath("../Sprites/CharacterEffects/Cast:frame")
|
||||||
tracks/4/interp = 1
|
tracks/4/interp = 1
|
||||||
tracks/4/loop_wrap = true
|
tracks/4/loop_wrap = true
|
||||||
tracks/4/keys = {
|
tracks/4/keys = {
|
||||||
|
@ -308,7 +309,7 @@ tracks/1/keys = {
|
||||||
tracks/2/type = "value"
|
tracks/2/type = "value"
|
||||||
tracks/2/imported = false
|
tracks/2/imported = false
|
||||||
tracks/2/enabled = true
|
tracks/2/enabled = true
|
||||||
tracks/2/path = NodePath("%Effects/Cast:visible")
|
tracks/2/path = NodePath("../Sprites/CharacterEffects/Cast:visible")
|
||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
|
@ -320,7 +321,7 @@ tracks/2/keys = {
|
||||||
tracks/3/type = "value"
|
tracks/3/type = "value"
|
||||||
tracks/3/imported = false
|
tracks/3/imported = false
|
||||||
tracks/3/enabled = true
|
tracks/3/enabled = true
|
||||||
tracks/3/path = NodePath("%Effects/Cast:frame")
|
tracks/3/path = NodePath("../Sprites/CharacterEffects/Cast:frame")
|
||||||
tracks/3/interp = 1
|
tracks/3/interp = 1
|
||||||
tracks/3/loop_wrap = true
|
tracks/3/loop_wrap = true
|
||||||
tracks/3/keys = {
|
tracks/3/keys = {
|
||||||
|
@ -337,17 +338,33 @@ tracks/4/interp = 1
|
||||||
tracks/4/loop_wrap = true
|
tracks/4/loop_wrap = true
|
||||||
tracks/4/keys = {
|
tracks/4/keys = {
|
||||||
"clips": [{
|
"clips": [{
|
||||||
"end_offset": 2.31782,
|
"end_offset": 1.59007,
|
||||||
"start_offset": 0.141459,
|
"start_offset": 0.141459,
|
||||||
"stream": ExtResource("15_61bua")
|
"stream": ExtResource("15_61bua")
|
||||||
}, {
|
|
||||||
"end_offset": 0.0,
|
|
||||||
"start_offset": 0.0,
|
|
||||||
"stream": ExtResource("16_fo4my")
|
|
||||||
}],
|
}],
|
||||||
"times": PackedFloat32Array(0.075, 0.3)
|
"times": PackedFloat32Array(0.075)
|
||||||
}
|
}
|
||||||
tracks/4/use_blend = true
|
tracks/4/use_blend = true
|
||||||
|
tracks/5/type = "method"
|
||||||
|
tracks/5/imported = false
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/path = NodePath("%Animations/../StateMachine/MaxLevel")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/keys = {
|
||||||
|
"times": PackedFloat32Array(0.5, 0.7, 0.9),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"values": [{
|
||||||
|
"args": [],
|
||||||
|
"method": &"Cast"
|
||||||
|
}, {
|
||||||
|
"args": [],
|
||||||
|
"method": &"Cast"
|
||||||
|
}, {
|
||||||
|
"args": [],
|
||||||
|
"method": &"Cast"
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_audkv"]
|
[sub_resource type="Animation" id="Animation_audkv"]
|
||||||
resource_name = "heal"
|
resource_name = "heal"
|
||||||
|
@ -526,6 +543,32 @@ scale_max = 0.25
|
||||||
color = Color(0, 0, 0, 1)
|
color = Color(0, 0, 0, 1)
|
||||||
color_ramp = SubResource("GradientTexture1D_jb8kb")
|
color_ramp = SubResource("GradientTexture1D_jb8kb")
|
||||||
|
|
||||||
|
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_y1v5m"]
|
||||||
|
light_mode = 1
|
||||||
|
|
||||||
|
[sub_resource type="Gradient" id="Gradient_80g57"]
|
||||||
|
offsets = PackedFloat32Array(0.2, 1)
|
||||||
|
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
|
||||||
|
|
||||||
|
[sub_resource type="GradientTexture1D" id="GradientTexture1D_3jlnh"]
|
||||||
|
gradient = SubResource("Gradient_80g57")
|
||||||
|
|
||||||
|
[sub_resource type="Curve" id="Curve_xcuxr"]
|
||||||
|
_data = [Vector2(0, 0.2), 0.0, 0.0, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0]
|
||||||
|
point_count = 2
|
||||||
|
|
||||||
|
[sub_resource type="CurveTexture" id="CurveTexture_80m7d"]
|
||||||
|
curve = SubResource("Curve_xcuxr")
|
||||||
|
|
||||||
|
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_4jub4"]
|
||||||
|
particle_flag_disable_z = true
|
||||||
|
gravity = Vector3(0, 0, 0)
|
||||||
|
orbit_velocity_min = 0.0
|
||||||
|
orbit_velocity_max = 0.0
|
||||||
|
scale_curve = SubResource("CurveTexture_80m7d")
|
||||||
|
color = Color(1, 1, 1, 0.25098)
|
||||||
|
color_ramp = SubResource("GradientTexture1D_3jlnh")
|
||||||
|
|
||||||
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_ejdrf"]
|
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_ejdrf"]
|
||||||
light_mode = 1
|
light_mode = 1
|
||||||
|
|
||||||
|
@ -574,18 +617,20 @@ script = ExtResource("5_rgckv")
|
||||||
InitialState = NodePath("Idle")
|
InitialState = NodePath("Idle")
|
||||||
Character = NodePath("..")
|
Character = NodePath("..")
|
||||||
|
|
||||||
[node name="Idle" type="Node" parent="StateMachine" node_paths=PackedStringArray("MoveState", "EmoteState", "HealState", "IdleState", "Character")]
|
[node name="Idle" type="Node" parent="StateMachine" node_paths=PackedStringArray("MoveState", "EmoteState", "HealState", "IdleState", "MaxLevelState", "Character")]
|
||||||
script = ExtResource("6_wkfdm")
|
script = ExtResource("6_wkfdm")
|
||||||
MoveState = NodePath("../Move")
|
MoveState = NodePath("../Move")
|
||||||
EmoteState = NodePath("../Emote")
|
EmoteState = NodePath("../Emote")
|
||||||
HealState = NodePath("../Heal")
|
HealState = NodePath("../Heal")
|
||||||
IdleState = NodePath(".")
|
IdleState = NodePath(".")
|
||||||
|
MaxLevelState = NodePath("../MaxLevel")
|
||||||
Character = NodePath("../..")
|
Character = NodePath("../..")
|
||||||
|
|
||||||
[node name="Move" type="Node" parent="StateMachine" node_paths=PackedStringArray("AbilityState", "IdleState", "Character")]
|
[node name="Move" type="Node" parent="StateMachine" node_paths=PackedStringArray("AbilityState", "IdleState", "MaxLevelState", "Character")]
|
||||||
script = ExtResource("7_dfqd8")
|
script = ExtResource("7_dfqd8")
|
||||||
AbilityState = NodePath("../Roll")
|
AbilityState = NodePath("../Roll")
|
||||||
IdleState = NodePath("../Idle")
|
IdleState = NodePath("../Idle")
|
||||||
|
MaxLevelState = NodePath("../MaxLevel")
|
||||||
Character = NodePath("../..")
|
Character = NodePath("../..")
|
||||||
|
|
||||||
[node name="Dash" type="Node" parent="StateMachine" node_paths=PackedStringArray("IdleState", "Character")]
|
[node name="Dash" type="Node" parent="StateMachine" node_paths=PackedStringArray("IdleState", "Character")]
|
||||||
|
@ -612,6 +657,14 @@ HealAmount = 20.0
|
||||||
IdleState = NodePath("../Idle")
|
IdleState = NodePath("../Idle")
|
||||||
Character = NodePath("../..")
|
Character = NodePath("../..")
|
||||||
|
|
||||||
|
[node name="MaxLevel" type="Node" parent="StateMachine" node_paths=PackedStringArray("IdleState", "Character")]
|
||||||
|
script = ExtResource("14_1sn10")
|
||||||
|
CastDistance = 128.0
|
||||||
|
CastTime = 1.0
|
||||||
|
LevelCost = 4
|
||||||
|
IdleState = NodePath("../Idle")
|
||||||
|
Character = NodePath("../..")
|
||||||
|
|
||||||
[node name="Animations" type="Node" parent="."]
|
[node name="Animations" type="Node" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
script = ExtResource("7_sdgvb")
|
script = ExtResource("7_sdgvb")
|
||||||
|
@ -685,6 +738,16 @@ lifetime = 0.8
|
||||||
one_shot = true
|
one_shot = true
|
||||||
explosiveness = 1.0
|
explosiveness = 1.0
|
||||||
|
|
||||||
|
[node name="CastParticles" type="GPUParticles2D" parent="Effects"]
|
||||||
|
material = SubResource("CanvasItemMaterial_y1v5m")
|
||||||
|
position = Vector2(0, -4)
|
||||||
|
emitting = false
|
||||||
|
amount = 2
|
||||||
|
process_material = SubResource("ParticleProcessMaterial_4jub4")
|
||||||
|
texture = ExtResource("22_uefct")
|
||||||
|
lifetime = 0.5
|
||||||
|
one_shot = true
|
||||||
|
|
||||||
[node name="DeathCry" type="AudioStreamPlayer2D" parent="Effects"]
|
[node name="DeathCry" type="AudioStreamPlayer2D" parent="Effects"]
|
||||||
stream = ExtResource("12_vd7j4")
|
stream = ExtResource("12_vd7j4")
|
||||||
volume_db = 2.0
|
volume_db = 2.0
|
||||||
|
@ -703,16 +766,6 @@ stream = ExtResource("12_vvem5")
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
position = Vector2(0, -4)
|
position = Vector2(0, -4)
|
||||||
|
|
||||||
[node name="Cast" type="Sprite2D" parent="Effects"]
|
|
||||||
visible = false
|
|
||||||
y_sort_enabled = true
|
|
||||||
material = SubResource("CanvasItemMaterial_ejdrf")
|
|
||||||
position = Vector2(2, 1)
|
|
||||||
texture = ExtResource("24_njn4h")
|
|
||||||
centered = false
|
|
||||||
offset = Vector2(-9.5, -14)
|
|
||||||
hframes = 6
|
|
||||||
|
|
||||||
[node name="Camera2D" parent="." instance=ExtResource("4_ym125")]
|
[node name="Camera2D" parent="." instance=ExtResource("4_ym125")]
|
||||||
zoom = Vector2(4, 4)
|
zoom = Vector2(4, 4)
|
||||||
position_smoothing_speed = 8.0
|
position_smoothing_speed = 8.0
|
||||||
|
@ -734,6 +787,19 @@ texture = ExtResource("4_5vird")
|
||||||
offset = Vector2(0, -4)
|
offset = Vector2(0, -4)
|
||||||
hframes = 46
|
hframes = 46
|
||||||
|
|
||||||
|
[node name="CharacterEffects" type="Node2D" parent="Sprites"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
|
[node name="Cast" type="Sprite2D" parent="Sprites/CharacterEffects"]
|
||||||
|
visible = false
|
||||||
|
y_sort_enabled = true
|
||||||
|
material = SubResource("CanvasItemMaterial_ejdrf")
|
||||||
|
position = Vector2(2.5, 0.999989)
|
||||||
|
texture = ExtResource("24_njn4h")
|
||||||
|
centered = false
|
||||||
|
offset = Vector2(-9.5, -14)
|
||||||
|
hframes = 6
|
||||||
|
|
||||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||||
position = Vector2(0, -4)
|
position = Vector2(0, -4)
|
||||||
shape = SubResource("RectangleShape2D_bfqew")
|
shape = SubResource("RectangleShape2D_bfqew")
|
||||||
|
@ -763,7 +829,7 @@ InventoryMap = {
|
||||||
"equip_3": 2
|
"equip_3": 2
|
||||||
}
|
}
|
||||||
|
|
||||||
[node name="Sword" parent="Inventory" instance=ExtResource("22_mqpn7")]
|
[node name="DocLance" parent="Inventory" instance=ExtResource("14_bj0lo")]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="Node2D" parent="Inventory" instance=ExtResource("7_4rxuv")]
|
[node name="Node2D" parent="Inventory" instance=ExtResource("7_4rxuv")]
|
||||||
|
@ -772,6 +838,9 @@ visible = false
|
||||||
[node name="Bow" parent="Inventory" instance=ExtResource("29_7j1fs")]
|
[node name="Bow" parent="Inventory" instance=ExtResource("29_7j1fs")]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
|
[node name="Sword" parent="Inventory" instance=ExtResource("22_mqpn7")]
|
||||||
|
visible = false
|
||||||
|
|
||||||
[node name="Shotgun" parent="Inventory" instance=ExtResource("22_rmciq")]
|
[node name="Shotgun" parent="Inventory" instance=ExtResource("22_rmciq")]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
|
@ -779,9 +848,6 @@ visible = false
|
||||||
visible = false
|
visible = false
|
||||||
UseTime = 0.2
|
UseTime = 0.2
|
||||||
|
|
||||||
[node name="DocLance" parent="Inventory" instance=ExtResource("14_bj0lo")]
|
|
||||||
visible = false
|
|
||||||
|
|
||||||
[node name="RemoteTransform2D2" type="RemoteTransform2D" parent="Inventory"]
|
[node name="RemoteTransform2D2" type="RemoteTransform2D" parent="Inventory"]
|
||||||
position = Vector2(0, 4)
|
position = Vector2(0, 4)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
using Godot;
|
||||||
|
using SupaLidlGame.Extensions;
|
||||||
|
|
||||||
|
namespace SupaLidlGame.Entities;
|
||||||
|
|
||||||
|
public partial class Lightning : Projectile
|
||||||
|
{
|
||||||
|
private AnimationPlayer _animPlayer;
|
||||||
|
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
base._Ready();
|
||||||
|
_animPlayer = GetNode<AnimationPlayer>("AnimationPlayer");
|
||||||
|
_animPlayer.Play("start");
|
||||||
|
_animPlayer.AnimationFinished += (anim) => Die();
|
||||||
|
|
||||||
|
var stream = GetNode<Node2D>("AudioStreamPlayer2D");
|
||||||
|
stream.CloneOnWorld<AudioStreamPlayer2D>()
|
||||||
|
.WithPitchDeviation(0.125f)
|
||||||
|
.Play();
|
||||||
|
|
||||||
|
// hitbox should only be active for one frame only
|
||||||
|
//Hitbox.SetDeferred("monitoring", false);
|
||||||
|
|
||||||
|
Hitbox.Hit += (box) =>
|
||||||
|
{
|
||||||
|
if (box is BoundingBoxes.Hurtbox)
|
||||||
|
{
|
||||||
|
if (box.GetParent() is Characters.Character ch)
|
||||||
|
{
|
||||||
|
ch.Stun(3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,139 @@
|
||||||
|
[gd_scene load_steps=11 format=3 uid="uid://dwbyhbaoutu7q"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cf1a0uk34o343" path="res://Assets/Sprites/Particles/lightning.png" id="1_bf8ae"]
|
||||||
|
[ext_resource type="Script" path="res://Entities/Lightning.cs" id="1_worfg"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://du5vhccg75nrq" path="res://BoundingBoxes/Hitbox.tscn" id="3_vlt1v"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://b1jmusgltouak" path="res://Assets/Sounds/lightning.wav" id="4_qxpk6"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://bd8l8kafb42dt" path="res://Assets/Sprites/Particles/circle.png" id="5_vkpuj"]
|
||||||
|
|
||||||
|
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_3bsa7"]
|
||||||
|
light_mode = 1
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_1c3yr"]
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("Sprite2D:frame")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [0]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Sprite2D:visible")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("PointLight2D:energy")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [0.5]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_jexpw"]
|
||||||
|
resource_name = "start"
|
||||||
|
length = 0.7
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("Sprite2D:frame")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [0, 1, 2, 3, 4, 5]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Sprite2D:visible")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.6),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("PointLight2D:energy")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.7),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [0.5, 0.0]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_g3m4l"]
|
||||||
|
_data = {
|
||||||
|
"RESET": SubResource("Animation_1c3yr"),
|
||||||
|
"start": SubResource("Animation_jexpw")
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="CircleShape2D" id="CircleShape2D_f1v7c"]
|
||||||
|
radius = 8.0
|
||||||
|
|
||||||
|
[node name="Lightning" type="RigidBody2D" node_paths=PackedStringArray("Hitbox")]
|
||||||
|
collision_layer = 0
|
||||||
|
collision_mask = 0
|
||||||
|
script = ExtResource("1_worfg")
|
||||||
|
ProjectileName = "Lightning"
|
||||||
|
Hitbox = NodePath("Hitbox")
|
||||||
|
|
||||||
|
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||||
|
material = SubResource("CanvasItemMaterial_3bsa7")
|
||||||
|
position = Vector2(0, 8)
|
||||||
|
texture = ExtResource("1_bf8ae")
|
||||||
|
centered = false
|
||||||
|
offset = Vector2(-16, -64)
|
||||||
|
hframes = 6
|
||||||
|
|
||||||
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
|
libraries = {
|
||||||
|
"": SubResource("AnimationLibrary_g3m4l")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Hitbox" parent="." instance=ExtResource("3_vlt1v")]
|
||||||
|
collision_layer = 0
|
||||||
|
Damage = 20.0
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" parent="Hitbox" index="0"]
|
||||||
|
shape = SubResource("CircleShape2D_f1v7c")
|
||||||
|
|
||||||
|
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
|
||||||
|
stream = ExtResource("4_qxpk6")
|
||||||
|
pitch_scale = 0.8
|
||||||
|
max_distance = 1024.0
|
||||||
|
attenuation = 0.25
|
||||||
|
bus = &"Effects"
|
||||||
|
|
||||||
|
[node name="PointLight2D" type="PointLight2D" parent="."]
|
||||||
|
energy = 0.5
|
||||||
|
texture = ExtResource("5_vkpuj")
|
||||||
|
texture_scale = 0.25
|
||||||
|
|
||||||
|
[editable path="Hitbox"]
|
|
@ -39,6 +39,7 @@ public partial class PlayerHealState : PlayerState
|
||||||
{
|
{
|
||||||
_player.AttackAnimation.Play("heal_cancel");
|
_player.AttackAnimation.Play("heal_cancel");
|
||||||
}
|
}
|
||||||
|
base.Exit(nextState);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override CharacterState Process(double delta)
|
public override CharacterState Process(double delta)
|
||||||
|
|
|
@ -0,0 +1,125 @@
|
||||||
|
using Godot;
|
||||||
|
|
||||||
|
namespace SupaLidlGame.State.Character;
|
||||||
|
|
||||||
|
public partial class PlayerMaxLevelState : PlayerState
|
||||||
|
{
|
||||||
|
[Export]
|
||||||
|
public float CastDistance { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public double CastTime { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public int LevelCost { get; set; }
|
||||||
|
|
||||||
|
private double _castTimeLeft = 0;
|
||||||
|
|
||||||
|
private static PackedScene _lightningScene;
|
||||||
|
|
||||||
|
private GpuParticles2D _particles;
|
||||||
|
|
||||||
|
static PlayerMaxLevelState()
|
||||||
|
{
|
||||||
|
_lightningScene = GD.Load<PackedScene>("res://Entities/Lightning.tscn");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
base._Ready();
|
||||||
|
_particles = GetNode<GpuParticles2D>("%Effects/CastParticles");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IState<CharacterState> Enter(IState<CharacterState> prevState)
|
||||||
|
{
|
||||||
|
_player.AttackAnimation.Play("cast");
|
||||||
|
_player.Inventory.Visible = false;
|
||||||
|
_player.Stats.Level.Value -= LevelCost;
|
||||||
|
_castTimeLeft = CastTime;
|
||||||
|
return base.Enter(prevState);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Exit(IState<CharacterState> nextState)
|
||||||
|
{
|
||||||
|
_player.Inventory.Visible = true;
|
||||||
|
base.Exit(nextState);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override CharacterState Process(double delta)
|
||||||
|
{
|
||||||
|
// return to idle when finished
|
||||||
|
if ((_castTimeLeft -= delta) <= 0)
|
||||||
|
{
|
||||||
|
return IdleState;
|
||||||
|
}
|
||||||
|
|
||||||
|
return base.Process(delta);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override CharacterState Input(InputEvent @event)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Cast()
|
||||||
|
{
|
||||||
|
Scenes.Map map = Utils.World.Instance.CurrentMap;
|
||||||
|
bool hasSpawned = false;
|
||||||
|
foreach (var node in map.Entities.GetChildren())
|
||||||
|
{
|
||||||
|
if (node is Characters.Character ch)
|
||||||
|
{
|
||||||
|
if (ch.Faction == Character.Faction)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ch.IsAlive)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if distance good and spawn lightning
|
||||||
|
var dist = Character.GlobalPosition
|
||||||
|
.DistanceTo(ch.GlobalPosition);
|
||||||
|
if (dist <= CastDistance)
|
||||||
|
{
|
||||||
|
// delay up to 150 milliseconds
|
||||||
|
double delay = GD.Randf() * 0.150;
|
||||||
|
GetTree().CreateTimer(delay).Timeout += () =>
|
||||||
|
{
|
||||||
|
SpawnLightning(ch);
|
||||||
|
};
|
||||||
|
hasSpawned = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasSpawned)
|
||||||
|
{
|
||||||
|
_player.Camera.Shake(2.0f, 0.5f);
|
||||||
|
// delay to time out
|
||||||
|
// this is a workaround where particles of amount 1 won't render
|
||||||
|
GetTree().CreateTimer(0.1f).Timeout += () =>
|
||||||
|
{
|
||||||
|
_particles.Emitting = false;
|
||||||
|
};
|
||||||
|
_particles.Emitting = true;
|
||||||
|
//_particles.SetDeferred("emitting", false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SpawnLightning(Characters.Character target)
|
||||||
|
{
|
||||||
|
if (target is null || !IsInstanceValid(target) || !target.IsAlive)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var map = Utils.World.Instance.CurrentMap;
|
||||||
|
var instance = map.SpawnEntity<Entities.Lightning>(_lightningScene);
|
||||||
|
instance.Hitbox.Faction = Character.Faction;
|
||||||
|
instance.Hitbox.Inflictor = Character;
|
||||||
|
instance.Weapon = null;
|
||||||
|
instance.GlobalPosition = target.GlobalPosition;
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,6 +10,9 @@ public abstract partial class PlayerState : CharacterState
|
||||||
[Export]
|
[Export]
|
||||||
public PlayerIdleState IdleState { get; set; }
|
public PlayerIdleState IdleState { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public PlayerMaxLevelState MaxLevelState { get; set; }
|
||||||
|
|
||||||
public override CharacterState Input(InputEvent @event)
|
public override CharacterState Input(InputEvent @event)
|
||||||
{
|
{
|
||||||
var inventory = Character.Inventory;
|
var inventory = Character.Inventory;
|
||||||
|
@ -44,6 +47,14 @@ public abstract partial class PlayerState : CharacterState
|
||||||
// if looking at a trigger then interact with it
|
// if looking at a trigger then interact with it
|
||||||
player.InteractionRay.Trigger?.InvokeInteraction();
|
player.InteractionRay.Trigger?.InvokeInteraction();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (@event.IsActionPressed("cast"))
|
||||||
|
{
|
||||||
|
if (_player.Stats.Level.Value >= MaxLevelState.LevelCost)
|
||||||
|
{
|
||||||
|
return MaxLevelState;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return base.Input(@event);
|
return base.Input(@event);
|
||||||
|
|
|
@ -187,6 +187,11 @@ ability={
|
||||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"echo":false,"script":null)
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"echo":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
cast={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":67,"key_label":0,"unicode":99,"echo":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
[internationalization]
|
[internationalization]
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue