From 25598c1b7622b41d9d8a125fb7891f11b33f3646 Mon Sep 17 00:00:00 2001 From: Hurlu Date: Sun, 5 Apr 2020 15:02:24 +0200 Subject: [PATCH] slowtrail --- Assets/BigPlaceholder.png | Bin 0 -> 236 bytes Assets/BigPlaceholder.png.import | 34 ++++++++++++++++++++++++++ Scene/Player.tscn | 7 +++++- Scene/SlowTrail.tscn | 21 ++++++++++++++++ Scripts/Player.gd | 40 ++++++++++++++++++++++++++++--- Scripts/SlowTrail.gd | 27 +++++++++++++++++++++ project.godot | 24 +++++++++++++++++++ 7 files changed, 149 insertions(+), 4 deletions(-) create mode 100644 Assets/BigPlaceholder.png create mode 100644 Assets/BigPlaceholder.png.import create mode 100644 Scene/SlowTrail.tscn create mode 100644 Scripts/SlowTrail.gd diff --git a/Assets/BigPlaceholder.png b/Assets/BigPlaceholder.png new file mode 100644 index 0000000000000000000000000000000000000000..06c0a8c3a329ac4b90835dd06b9f59d84c9ce7e8 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^8-Un^g9%73{i1ptNHG=%xjQkeJ16rJ$YDu$^mSxl z*x1kgCy^D%=PdAuEM{QfI}E~%$MaXD00kR8T^vIy;@(~|WMnW9U|#skeD1n>IS1za g0uDzyz=IoW6<6N+{=I8mJp00i_>zopr06`HocK`qY literal 0 HcmV?d00001 diff --git a/Assets/BigPlaceholder.png.import b/Assets/BigPlaceholder.png.import new file mode 100644 index 0000000..4681709 --- /dev/null +++ b/Assets/BigPlaceholder.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/BigPlaceholder.png-9c0a4f83e393ffb882dc587d443d0c12.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/BigPlaceholder.png" +dest_files=[ "res://.import/BigPlaceholder.png-9c0a4f83e393ffb882dc587d443d0c12.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/Scene/Player.tscn b/Scene/Player.tscn index 3113a0b..c2697ab 100644 --- a/Scene/Player.tscn +++ b/Scene/Player.tscn @@ -208,8 +208,11 @@ _data = { "points": PoolVector2Array( -15.7724, -10.548, 15.7724, 10.548, 79.9353, -88.996, 8.91483, -9.7366, -8.91483, 9.7366, 75.135, -62.2204, 10.2863, 13.7935, -10.2863, -13.7935, -33.2145, -63.0318, -10.2863, 9.7366, 10.2863, -9.7366, -16.7564, -88.1847, -14.4009, 13.7935, 14.4009, -13.7935, -16.7564, -88.996, -6.85756, -19.4732, 6.85756, 19.4732, 79.9353, -88.996 ) } -[node name="KinematicBody2D" type="KinematicBody2D"] +[node name="KinematicBody2D" type="KinematicBody2D" groups=[ +"Player", +]] script = ExtResource( 2 ) +slow_cooldown = 3 [node name="Sprite" type="Sprite" parent="."] texture = ExtResource( 1 ) @@ -254,6 +257,7 @@ rotate = false position = Vector2( 0.823479, -2.89215 ) rotation = -0.639347 scale = Vector2( 1.1136, 1.2906 ) +z_index = -1 texture = ExtResource( 3 ) [node name="PathFollow2D2" type="PathFollow2D" parent="ConfusionStars/Path2D"] @@ -266,4 +270,5 @@ rotate = false position = Vector2( 0.823479, -2.89215 ) rotation = -0.639347 scale = Vector2( 1.1136, 1.2906 ) +z_index = -1 texture = ExtResource( 3 ) diff --git a/Scene/SlowTrail.tscn b/Scene/SlowTrail.tscn new file mode 100644 index 0000000..12d1853 --- /dev/null +++ b/Scene/SlowTrail.tscn @@ -0,0 +1,21 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://Assets/BigPlaceholder.png" type="Texture" id=1] +[ext_resource path="res://Scripts/SlowTrail.gd" type="Script" id=2] + +[sub_resource type="RectangleShape2D" id=1] +extents = Vector2( 88.8117, 26.2111 ) + +[node name="SlowTrail" type="Node2D"] +rotation = -6.28319 +script = ExtResource( 2 ) + +[node name="Sprite" type="Sprite" parent="."] +z_index = 10 +texture = ExtResource( 1 ) +offset = Vector2( 88, 0 ) + +[node name="Area2D" type="Area2D" parent="Sprite"] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Sprite/Area2D"] +shape = SubResource( 1 ) diff --git a/Scripts/Player.gd b/Scripts/Player.gd index 36f1da5..2e24753 100644 --- a/Scripts/Player.gd +++ b/Scripts/Player.gd @@ -6,11 +6,17 @@ var FRICTION = 2000 var MAX_LIFE = 30 const PICKUP_BONUS = 5 export var rota_speed = 100 +export var slow_cooldown = 5 + +var slow_trail = load("res://Scene/SlowPaint.tscn") + +var slow_cooldown_elapsed = 5 var follow1; var follow2; var vel = Vector2.ZERO +var last_dir = Vector2.ZERO var curLife = MAX_LIFE var coroutines = [] @@ -40,16 +46,40 @@ func _ready(): healthBar = get_tree().get_nodes_in_group("healthbar")[1] healthBar.maxHealthUpdated(MAX_LIFE) +func launch_slow(): + if slow_cooldown_elapsed < slow_cooldown: + return + slow_cooldown_elapsed = 0 + var world = get_parent() + var inst = load("res://Scene/SlowTrail.tscn").instance() + var dir = get_dir() + if dir == Vector2.ZERO: + dir = (last_dir if last_dir != Vector2.ZERO else Vector2.DOWN) + var angle = acos(dir.dot(Vector2.RIGHT)) + var modifier = 0 + if dir.y < 0: + modifier += angle * -2 + inst.transform = inst.transform.rotated(angle + modifier) + inst.position = self.position + inst.slowFactor = 2 + world.add_child(inst) + func _process(delta): follow1.set_offset(follow1.get_offset() + delta * rota_speed) follow2.set_offset(follow2.get_offset() + delta * rota_speed) + + if (self.name == "Player1" && Input.get_action_strength("gameplay_slow") > 0) \ + || (self.name == "Player2" && Input.get_action_strength("gameplay_slow2") > 0): + launch_slow() + updatePaintEffects(delta) curLife -= delta + slow_cooldown_elapsed += delta if curLife <= 0: get_node("/root/World/GameManager").endGame() - healthBar.healthUpdated(curLife) + healthBar.healthUpdated(curLife) -func _physics_process(delta): +func get_dir(): var input_vector = Vector2.ZERO if self.name == "Player1": @@ -60,8 +90,13 @@ func _physics_process(delta): input_vector.y = Input.get_action_strength(inputs[EInput.DOWN] + "2") - Input.get_action_strength(inputs[EInput.UP] + "2") input_vector = input_vector.normalized() + return input_vector + +func _physics_process(delta): + var input_vector = get_dir() if input_vector != Vector2.ZERO: + last_dir = input_vector animationTree.set("parameters/Idle/blend_position", input_vector) animationTree.set("parameters/Run/blend_position", input_vector) animationState.travel("Run") @@ -72,7 +107,6 @@ func _physics_process(delta): vel = move_and_slide(vel) - func updatePaintEffects(delta): var updated = [] for rout in coroutines: diff --git a/Scripts/SlowTrail.gd b/Scripts/SlowTrail.gd new file mode 100644 index 0000000..3b47e77 --- /dev/null +++ b/Scripts/SlowTrail.gd @@ -0,0 +1,27 @@ +extends Node + +var slowFactor +var lifetime = 5 +var elapsed = 0 +var sprite + +func slow_player(victim): + if victim.is_in_group("Player"): + victim.MAX_SPEED /= slowFactor + +func unslow_player(victim): + if victim.is_in_group("Player"): + victim.MAX_SPEED *= slowFactor + +# Called when the node enters the scene tree for the first time. +func _ready(): + sprite = get_node("Sprite") + get_node("Sprite/Area2D").connect("body_entered", self, "slow_player") + get_node("Sprite/Area2D").connect("body_exited", self, "unslow_player") + +func _process(delta): + elapsed += delta + if elapsed >= lifetime * 0.7: + sprite.self_modulate = Color(1,1,1,lerp(1, 0, (elapsed - lifetime * 0.7) / (lifetime * 0.3))) + if elapsed >= lifetime: + queue_free() diff --git a/project.godot b/project.godot index fba0bf8..3b27825 100644 --- a/project.godot +++ b/project.godot @@ -115,6 +115,30 @@ pause={ "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"unicode":0,"echo":false,"script":null) ] } +gameplay_slow={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777220,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":2,"pressure":0.0,"pressed":false,"script":null) + ] +} +gameplay_slow2={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":69,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":2,"pressure":0.0,"pressed":false,"script":null) + ] +} +gameplay_fast={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777221,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null) + ] +} +gameplay_fast2={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":0,"pressure":0.0,"pressed":false,"script":null) + ] +} [rendering]