From f64ace3402d895ae19111bbacb4a86f8de2414d8 Mon Sep 17 00:00:00 2001 From: Logan Date: Fri, 17 Jul 2020 16:24:04 -0500 Subject: [PATCH] Wands will autoshoot when button is held --- characters/Player.tscn | 25 +++++++++---------------- magic/Wands/BasicWand.tscn | 17 +++++++++++++++++ script/BasicWand.gd | 15 +++++++++++++++ script/player.gd | 16 ++++------------ 4 files changed, 45 insertions(+), 28 deletions(-) create mode 100644 magic/Wands/BasicWand.tscn create mode 100644 script/BasicWand.gd diff --git a/characters/Player.tscn b/characters/Player.tscn index 48e302e..951a3f3 100644 --- a/characters/Player.tscn +++ b/characters/Player.tscn @@ -3,8 +3,8 @@ [ext_resource path="res://script/player.gd" type="Script" id=1] [ext_resource path="res://meta/BoundedCamera.tscn" type="PackedScene" id=2] [ext_resource path="res://script/PlayerStateMachine.gd" type="Script" id=3] -[ext_resource path="res://art/Wand.png" type="Texture" id=4] -[ext_resource path="res://art/WizardM.png" type="Texture" id=5] +[ext_resource path="res://art/WizardM.png" type="Texture" id=4] +[ext_resource path="res://magic/Wands/BasicWand.tscn" type="PackedScene" id=5] [sub_resource type="OccluderPolygon2D" id=1] polygon = PoolVector2Array( -7, 0, -7, -2, -6, -2, -6, -3, -5, -3, -5, -5, -6, -5, -6, -10, -7, -10, -7, -12, -6, -12, -6, -19, -4, -19, -4, -18, -3, -18, -3, -17, 1, -17, 1, -16, 3, -16, 3, -15, 4, -15, 4, -14, 5, -14, 5, -13, 6, -13, 6, -12, 7, -12, 7, -10, 6, -10, 6, -9, 5, -9, 5, -8, 6, -8, 6, -4, 5, -4, 5, 0, -7, 0 ) @@ -77,22 +77,9 @@ drag_margin_bottom = 0.0 [node name="PlayerStateMachine" type="Node" parent="."] script = ExtResource( 3 ) -[node name="HoldPosition" type="Position2D" parent="."] -position = Vector2( 0, -6 ) -rotation = 1.5708 - -[node name="Wand" type="Sprite" parent="HoldPosition"] -position = Vector2( 9, -4.76837e-007 ) -rotation = 1.5708 -texture = ExtResource( 4 ) - -[node name="ProjectileSpawn" type="Position2D" parent="HoldPosition"] -position = Vector2( 17, -9.53674e-007 ) -rotation = 1.5708 - [node name="Sprite" type="Sprite" parent="."] position = Vector2( 0, -12 ) -texture = ExtResource( 5 ) +texture = ExtResource( 4 ) vframes = 3 hframes = 4 @@ -126,4 +113,10 @@ position = Vector2( 0, -7 ) [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hitbox"] visible = false polygon = PoolVector2Array( -6, -12, -6, -5, -7, -5, -7, -3, -6, -3, -6, 2, -5, 2, -5, 4, -6, 4, -6, 5, -7, 5, -7, 7, 5, 7, 5, 3, 6, 3, 6, -1, 5, -1, 5, -2, 6, -2, 6, -3, 7, -3, 7, -5, 6, -5, 6, -6, 5, -6, 5, -7, 4, -7, 4, -8, 3, -8, 3, -9, 1, -9, 1, -10, -3, -10, -3, -11, -4, -11, -4, -12, -6, -12 ) + +[node name="HoldPosition" type="Position2D" parent="."] +position = Vector2( 0, -7 ) + +[node name="Wand" parent="HoldPosition" instance=ExtResource( 5 )] +position = Vector2( 14, 0 ) [connection signal="grounded_updated" from="." to="Node2D" method="_on_grounded_updated"] diff --git a/magic/Wands/BasicWand.tscn b/magic/Wands/BasicWand.tscn new file mode 100644 index 0000000..74a592c --- /dev/null +++ b/magic/Wands/BasicWand.tscn @@ -0,0 +1,17 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://art/Wand.png" type="Texture" id=1] +[ext_resource path="res://script/BasicWand.gd" type="Script" id=2] + +[node name="Wand" type="Sprite"] +position = Vector2( 7, 0 ) +rotation = 1.5708 +texture = ExtResource( 1 ) +script = ExtResource( 2 ) + +[node name="ProjectileSpawn" type="Position2D" parent="."] +position = Vector2( -6.11959e-007, -7 ) + +[node name="ShootDelay" type="Timer" parent="."] +wait_time = 0.4 +one_shot = true diff --git a/script/BasicWand.gd b/script/BasicWand.gd new file mode 100644 index 0000000..5cce76d --- /dev/null +++ b/script/BasicWand.gd @@ -0,0 +1,15 @@ +extends Sprite + +onready var ShootDelay : Timer = $ShootDelay +onready var ProjectileSpawn : Timer = $ProjectileSpawn + +export var projectile_ps = globals.WHITE_PROJECTILE_PS + +func fire_projectile(rot): + if ShootDelay.is_stopped(): + var temp = projectile_ps.instance() + get_tree().current_scene.add_child(temp) + temp.global_position = ProjectileSpawn.global_position + temp.rotation_degrees = rot + temp.launch() + ShootDelay.start() \ No newline at end of file diff --git a/script/player.gd b/script/player.gd index c6b3753..db6db09 100644 --- a/script/player.gd +++ b/script/player.gd @@ -15,7 +15,6 @@ var walljump_height = 2.25 * 16 var jump_duration = 0.35 var is_grounded var touching_wall = 0 -var projectile_ps = globals.WHITE_PROJECTILE_PS onready var Spr: Sprite = $Sprite onready var Occluder: LightOccluder2D = $Sprite/LightOccluder2D @@ -25,6 +24,7 @@ onready var ShootDelay: Timer = $ShootDelay onready var StateMachine: Node = $PlayerStateMachine onready var HoldPosition: Node2D = $HoldPosition onready var ProjectileSpawn: Node2D = $HoldPosition/ProjectileSpawn +onready var Wand: Sprite = $HoldPosition/Wand @@ -43,10 +43,9 @@ func handle_move_input(): input_direction = int(Input.is_action_pressed("right")) - int(Input.is_action_pressed("left")) velocity.x = lerp(velocity.x, speed * input_direction, get_movement_weight()) HoldPosition.look_at(get_global_mouse_position()) - HoldPosition.rotation_degrees - if Input.is_action_just_pressed("shoot"): - fire_projectile() + if Input.is_action_pressed("shoot"): + Wand.fire_projectile(HoldPosition.rotation_degrees) if input_direction > 0: Spr.flip_h = false @@ -60,14 +59,7 @@ func jump(): velocity.y = max_jump_velocity CoyoteTimer.stop() -func fire_projectile(): - if ShootDelay.is_stopped(): - var temp = projectile_ps.instance() - get_tree().current_scene.add_child(temp) - temp.global_position = ProjectileSpawn.global_position - temp.rotation_degrees = HoldPosition.rotation_degrees - temp.launch() - ShootDelay.start() + func apply_gravity(delta, modifier = 1): velocity.y += gravity * delta * modifier