rolling gives invincibility frames
							parent
							
								
									b167354ba7
								
							
						
					
					
						commit
						31c66d33ed
					
				|  | @ -13,6 +13,11 @@ public sealed partial class Player : Character | |||
| 
 | ||||
|     private Vector2 _desiredTarget; | ||||
| 
 | ||||
|     private Node2D _effects; | ||||
| 
 | ||||
|     [Node] | ||||
|     private TargetTracer _targetTracer; | ||||
| 
 | ||||
|     public Vector2 DesiredTarget | ||||
|     { | ||||
|         get => _desiredTarget; | ||||
|  | @ -26,8 +31,6 @@ public sealed partial class Player : Character | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private TargetTracer _targetTracer; | ||||
| 
 | ||||
|     [Export] | ||||
|     public PlayerCamera Camera { get; set; } | ||||
| 
 | ||||
|  | @ -46,6 +49,8 @@ public sealed partial class Player : Character | |||
|     { | ||||
|         InteractionRay = GetNode<InteractionRay>("Direction2D/InteractionRay"); | ||||
| 
 | ||||
|         _effects = GetNode<Node2D>("%Effects"); | ||||
| 
 | ||||
|         _targetTracer = GetNode<TargetTracer>("%TargetTracer"); | ||||
| 
 | ||||
|         Stats = GetNode<PlayerStats>("Stats"); | ||||
|  | @ -126,6 +131,25 @@ public sealed partial class Player : Character | |||
|         Items.Weapon weapon = null, | ||||
|         Vector2 knockbackDir = default) | ||||
|     { | ||||
|         if (StateMachine.CurrentState is State.Character.PlayerRollState) | ||||
|         { | ||||
|             // dodge dots: | ||||
|             // melee:  | ||||
|             float dot = Direction.Dot(knockbackDir); | ||||
|             GD.Print(dot); | ||||
|             if (weapon is Items.Weapons.Sword) | ||||
|             { | ||||
|                 // if melee weapon then check if dot is away | ||||
|                 GD.Print("sword"); | ||||
|                 if (dot > Utils.Physics.COS_30_DEG) | ||||
|                 { | ||||
|                     // ignore hit | ||||
|                     GD.Print("ignore hit"); | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         if (damage >= 10 && IsAlive) | ||||
|         { | ||||
|             Camera.Shake(2, 0.5f); | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| [gd_scene load_steps=65 format=3 uid="uid://b2254pup8k161"] | ||||
| [gd_scene load_steps=70 format=3 uid="uid://b2254pup8k161"] | ||||
| 
 | ||||
| [ext_resource type="Script" path="res://Characters/Player.cs" id="1_flygr"] | ||||
| [ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="2_ngsgt"] | ||||
|  | @ -8,7 +8,6 @@ | |||
| [ext_resource type="PackedScene" uid="uid://cl56eadpklnbo" path="res://Utils/PlayerCamera.tscn" id="4_ym125"] | ||||
| [ext_resource type="Script" path="res://State/Character/CharacterStateMachine.cs" id="5_rgckv"] | ||||
| [ext_resource type="Script" path="res://Utils/Values/DoubleValue.cs" id="5_txl0r"] | ||||
| [ext_resource type="Script" path="res://State/Character/CharacterDashState.cs" id="6_rft7p"] | ||||
| [ext_resource type="Script" path="res://Utils/Values/IntValue.cs" id="6_sunc5"] | ||||
| [ext_resource type="Script" path="res://State/Character/PlayerIdleState.cs" id="6_wkfdm"] | ||||
| [ext_resource type="PackedScene" uid="uid://dvqap2uhcah63" path="res://Items/Weapons/Sword.tscn" id="7_4rxuv"] | ||||
|  | @ -23,6 +22,7 @@ | |||
| [ext_resource type="PackedScene" uid="uid://cjgxyhgcyvsv7" path="res://BoundingBoxes/Hurtbox.tscn" id="9_avyu4"] | ||||
| [ext_resource type="AnimationLibrary" uid="uid://epe31b7x1nt1" path="res://Assets/Animations/player_hurt.res" id="9_g42dl"] | ||||
| [ext_resource type="Material" uid="uid://ra02tvwd5o5g" path="res://Assets/Sprites/Particles/PlayerDeathProcessMaterial.tres" id="10_agw51"] | ||||
| [ext_resource type="Script" path="res://State/Character/CharacterDashState.cs" id="10_vsvfh"] | ||||
| [ext_resource type="AudioStream" uid="uid://bbqdpexvknma2" path="res://Assets/Sounds/never-lucky.mp3" id="12_vd7j4"] | ||||
| [ext_resource type="AudioStream" uid="uid://bkeyg8weaqnuu" path="res://Assets/Sounds/splat-player.ogg" id="12_vvem5"] | ||||
| [ext_resource type="AudioStream" uid="uid://cruylv4pu2fo1" path="res://Assets/Sounds/footstep-tile.wav" id="13_bxguv"] | ||||
|  | @ -31,10 +31,13 @@ | |||
| [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="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://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://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://d1d4vg7we5rjr" path="res://Items/Weapons/Shotgun.tscn" id="22_rmciq"] | ||||
| [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"] | ||||
| 
 | ||||
| [sub_resource type="ShaderMaterial" id="ShaderMaterial_h78y7"] | ||||
|  | @ -245,6 +248,106 @@ tracks/2/keys = { | |||
| "update": 1, | ||||
| "values": [false] | ||||
| } | ||||
| tracks/3/type = "value" | ||||
| tracks/3/imported = false | ||||
| tracks/3/enabled = true | ||||
| tracks/3/path = NodePath("%Effects/Cast:visible") | ||||
| tracks/3/interp = 1 | ||||
| tracks/3/loop_wrap = true | ||||
| tracks/3/keys = { | ||||
| "times": PackedFloat32Array(0), | ||||
| "transitions": PackedFloat32Array(1), | ||||
| "update": 1, | ||||
| "values": [false] | ||||
| } | ||||
| tracks/4/type = "value" | ||||
| tracks/4/imported = false | ||||
| tracks/4/enabled = true | ||||
| tracks/4/path = NodePath("%Effects/Cast:frame") | ||||
| tracks/4/interp = 1 | ||||
| tracks/4/loop_wrap = true | ||||
| tracks/4/keys = { | ||||
| "times": PackedFloat32Array(0), | ||||
| "transitions": PackedFloat32Array(1), | ||||
| "update": 1, | ||||
| "values": [0] | ||||
| } | ||||
| 
 | ||||
| [sub_resource type="Animation" id="Animation_dbsas"] | ||||
| resource_name = "cast" | ||||
| length = 1.2 | ||||
| tracks/0/type = "value" | ||||
| tracks/0/imported = false | ||||
| tracks/0/enabled = true | ||||
| tracks/0/path = NodePath("%Sprites/Node2D/Character: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, 0.6, 0.7, 0.8, 1.1), | ||||
| "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1), | ||||
| "update": 1, | ||||
| "values": [36, 37, 38, 39, 40, 41, 42, 43, 44, 45] | ||||
| } | ||||
| tracks/1/type = "method" | ||||
| tracks/1/imported = false | ||||
| tracks/1/enabled = true | ||||
| tracks/1/path = NodePath("%Animations/..") | ||||
| tracks/1/interp = 1 | ||||
| tracks/1/loop_wrap = true | ||||
| tracks/1/keys = { | ||||
| "times": PackedFloat32Array(0.2, 0.4), | ||||
| "transitions": PackedFloat32Array(1, 1), | ||||
| "values": [{ | ||||
| "args": [], | ||||
| "method": &"Footstep" | ||||
| }, { | ||||
| "args": [], | ||||
| "method": &"Footstep" | ||||
| }] | ||||
| } | ||||
| tracks/2/type = "value" | ||||
| tracks/2/imported = false | ||||
| tracks/2/enabled = true | ||||
| tracks/2/path = NodePath("%Effects/Cast:visible") | ||||
| tracks/2/interp = 1 | ||||
| tracks/2/loop_wrap = true | ||||
| tracks/2/keys = { | ||||
| "times": PackedFloat32Array(0, 0.3, 0.9), | ||||
| "transitions": PackedFloat32Array(1, 1, 1), | ||||
| "update": 1, | ||||
| "values": [false, true, false] | ||||
| } | ||||
| tracks/3/type = "value" | ||||
| tracks/3/imported = false | ||||
| tracks/3/enabled = true | ||||
| tracks/3/path = NodePath("%Effects/Cast:frame") | ||||
| tracks/3/interp = 1 | ||||
| tracks/3/loop_wrap = true | ||||
| tracks/3/keys = { | ||||
| "times": PackedFloat32Array(0.3, 0.4, 0.5, 0.6, 0.7, 0.8), | ||||
| "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), | ||||
| "update": 1, | ||||
| "values": [0, 1, 2, 3, 4, 5] | ||||
| } | ||||
| tracks/4/type = "audio" | ||||
| tracks/4/imported = false | ||||
| tracks/4/enabled = true | ||||
| tracks/4/path = NodePath("%Effects/MaxLevel") | ||||
| tracks/4/interp = 1 | ||||
| tracks/4/loop_wrap = true | ||||
| tracks/4/keys = { | ||||
| "clips": [{ | ||||
| "end_offset": 2.31782, | ||||
| "start_offset": 0.141459, | ||||
| "stream": ExtResource("15_61bua") | ||||
| }, { | ||||
| "end_offset": 0.0, | ||||
| "start_offset": 0.0, | ||||
| "stream": ExtResource("16_fo4my") | ||||
| }], | ||||
| "times": PackedFloat32Array(0.075, 0.3) | ||||
| } | ||||
| tracks/4/use_blend = true | ||||
| 
 | ||||
| [sub_resource type="Animation" id="Animation_audkv"] | ||||
| resource_name = "heal" | ||||
|  | @ -353,6 +456,7 @@ tracks/0/keys = { | |||
| [sub_resource type="AnimationLibrary" id="AnimationLibrary_73mj7"] | ||||
| _data = { | ||||
| "RESET": SubResource("Animation_adxyh"), | ||||
| "cast": SubResource("Animation_dbsas"), | ||||
| "heal": SubResource("Animation_audkv"), | ||||
| "heal_cancel": SubResource("Animation_60iyy"), | ||||
| "heal_end": SubResource("Animation_dyfl4"), | ||||
|  | @ -422,6 +526,9 @@ scale_max = 0.25 | |||
| color = Color(0, 0, 0, 1) | ||||
| color_ramp = SubResource("GradientTexture1D_jb8kb") | ||||
| 
 | ||||
| [sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_ejdrf"] | ||||
| light_mode = 1 | ||||
| 
 | ||||
| [sub_resource type="RectangleShape2D" id="RectangleShape2D_bfqew"] | ||||
| size = Vector2(12, 8) | ||||
| 
 | ||||
|  | @ -475,18 +582,17 @@ HealState = NodePath("../Heal") | |||
| IdleState = NodePath(".") | ||||
| Character = NodePath("../..") | ||||
| 
 | ||||
| [node name="Move" type="Node" parent="StateMachine" node_paths=PackedStringArray("RollState", "DashState", "IdleState", "Character")] | ||||
| [node name="Move" type="Node" parent="StateMachine" node_paths=PackedStringArray("AbilityState", "IdleState", "Character")] | ||||
| script = ExtResource("7_dfqd8") | ||||
| RollState = NodePath("../Roll") | ||||
| DashState = NodePath("../Dash") | ||||
| AbilityState = NodePath("../Roll") | ||||
| IdleState = NodePath("../Idle") | ||||
| Character = NodePath("../..") | ||||
| 
 | ||||
| [node name="Dash" type="Node" parent="StateMachine" node_paths=PackedStringArray("IdleState", "Character")] | ||||
| script = ExtResource("6_rft7p") | ||||
| script = ExtResource("10_vsvfh") | ||||
| IdleState = NodePath("../Idle") | ||||
| TimeToDash = 0.1 | ||||
| VelocityModifier = 5.0 | ||||
| VelocityModifier = 4.0 | ||||
| Character = NodePath("../..") | ||||
| 
 | ||||
| [node name="Roll" type="Node" parent="StateMachine" node_paths=PackedStringArray("IdleState", "Character")] | ||||
|  | @ -591,10 +697,22 @@ stream = ExtResource("12_vvem5") | |||
| 
 | ||||
| [node name="Healing" type="AudioStreamPlayer2D" parent="Effects"] | ||||
| 
 | ||||
| [node name="MaxLevel" type="AudioStreamPlayer2D" parent="Effects"] | ||||
| 
 | ||||
| [node name="TargetTracer" parent="Effects" instance=ExtResource("22_hxi53")] | ||||
| unique_name_in_owner = true | ||||
| 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")] | ||||
| zoom = Vector2(4, 4) | ||||
| position_smoothing_speed = 8.0 | ||||
|  | @ -614,7 +732,7 @@ use_parent_material = true | |||
| position = Vector2(0, -8) | ||||
| texture = ExtResource("4_5vird") | ||||
| offset = Vector2(0, -4) | ||||
| hframes = 36 | ||||
| hframes = 46 | ||||
| 
 | ||||
| [node name="CollisionShape2D" type="CollisionShape2D" parent="."] | ||||
| position = Vector2(0, -4) | ||||
|  | @ -652,6 +770,7 @@ visible = false | |||
| visible = false | ||||
| 
 | ||||
| [node name="Bow" parent="Inventory" instance=ExtResource("29_7j1fs")] | ||||
| visible = false | ||||
| 
 | ||||
| [node name="Shotgun" parent="Inventory" instance=ExtResource("22_rmciq")] | ||||
| visible = false | ||||
|  |  | |||
|  | @ -4,6 +4,16 @@ namespace SupaLidlGame.Utils; | |||
| 
 | ||||
| public static class Physics | ||||
| { | ||||
|     public static readonly float COS_30_DEG; | ||||
| 
 | ||||
|     public static readonly float COS_150_DEG; | ||||
| 
 | ||||
|     static Physics() | ||||
|     { | ||||
|         COS_30_DEG = Mathf.Cos(Mathf.DegToRad(30)); | ||||
|         COS_150_DEG = Mathf.Cos(Mathf.DegToRad(150)); | ||||
|     } | ||||
| 
 | ||||
|     /// <summary> | ||||
|     /// Returns the predicted position of a target after a time t at which a | ||||
|     /// projectile is predicted to hit a target. | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue