Diffstat (limited to 'player/scripts/Ship.gd')
| -rw-r--r-- | player/scripts/Ship.gd | 264 |
1 files changed, 264 insertions, 0 deletions
diff --git a/player/scripts/Ship.gd b/player/scripts/Ship.gd new file mode 100644 index 0000000..9973944 --- /dev/null +++ b/player/scripts/Ship.gd @@ -0,0 +1,264 @@ +extends KinematicBody2D +class_name playerkinematic + +var counter +var i_am_in_cooldown: bool +var wait_time = .1 +var walled = false +export var id = 1 +export var fireoffset = 2 +onready var animationState = $AnimationTree.get("parameters/playback") +onready var HitEffect = preload("res://effects/HitEffect.tscn") +onready var hitSound = $AudioStreamPlayer +const ExplosionEffect = preload("res://effects/ExplosionEffect.tscn") +var attack = preload("res://bullets/scenes/Laser.tscn") +export(int) var SPEED = 100 +onready var timer = $Timer +var movementpenalty = 20 +var velocity = Vector2.ZERO +signal player_death +var ACCELERATION = 500 +var FRICTION = 20 +var recoil = 40 +var input_vector = Vector2.ZERO +var USE_TOUCH = OS.has_touchscreen_ui_hint() +onready var splitshotu +onready var rocketsu +onready var lasersu +onready var flaku +onready var beamu +onready var fire = $Fire +var amount = 1 +var target = null +var firing = false +var thrusting_last_frame = false +var shake_intensity = .3 +var quant = 30 +var shake_duration = .2 + + +func _ready(): + playerstats.gun = "lasers" + $MobileJoystick/TouchScreenButton.visible = USE_TOUCH + $MobileJoystick/MobileControls/Attack.visible = USE_TOUCH + $"MobileJoystick/MobileControls/Change gun".visible = USE_TOUCH + $AnimationTree.active = true + lasersu = playerstats.lasers + rocketsu = playerstats.rockets + splitshotu = playerstats.splitshot + flaku = playerstats.flak + beamu = playerstats.beam + + +func create_hit_effect(): + Game.instance_scene_on_main(HitEffect, global_position) + + +func _physics_process(delta): + input_vector.x = Input.get_axis("left_%s" % id, "right_%s" % id) + input_vector.y = Input.get_axis("up_%s" % id, "down_%s" % id) + if Game.keyboard: + input_vector = input_vector.normalized() + if $MobileJoystick/TouchScreenButton.in_use: + input_vector = $MobileJoystick/TouchScreenButton.force + #makes a input vector based off of inputs, and supports controllers + # fire particle code + var fire_dir = input_vector * -1 + fire.direction = fire_dir + + if input_vector.x > 0 or input_vector.y != 0: + fire.emitting = true + fire.initial_velocity = input_vector.x * 40 + else: + fire.emitting = false + + if input_vector != Vector2.ZERO: + if not thrusting_last_frame: + $thrustsfxin.playing = true + + if not $thrustsfxloop.playing: + $thrustsfxloop.playing = true + + thrusting_last_frame = true + else: + if thrusting_last_frame: + $thrustsfxloop.playing = false + $thrustsfxend.playing = true + + if $thrustsfxin.playing: + $thrustsfxin.playing = false + + thrusting_last_frame = false + if input_vector != Vector2.ZERO: #moves ya + velocity = velocity.move_toward(input_vector * SPEED, ACCELERATION * delta) + $AnimationTree.set("parameters/Turn/blend_position", input_vector) + animationState.travel("Turn") + else: + #stops you + animationState.travel("Idle") + velocity = velocity.move_toward(Vector2.ZERO, FRICTION * delta) + if firing: + SPEED = movementpenalty + if not i_am_in_cooldown: + if randi() % quant == quant - 1: + Glitch.apply(.1, amount) + else: + SPEED = 100 + if not i_am_in_cooldown and Input.is_action_pressed("shoot_%s" % id): + shoot() + elif not Input.is_action_pressed("shoot_%s" % id): + firing = false + if Input.is_action_just_pressed("change_gun_%s" % id): + match playerstats.gun: + "lasers": + rockets() + "rockets": + lasers() +# "splitshot": +# lasers() +# "flak": +# lasers() + velocity = move_and_slide(velocity) + + +func _on_TouchScreenButton_force(force): + input_vector = force + + +func _on_Ship_area_entered(area): + if not area.is_in_group("pbullet") and not area.is_in_group("Player"): + qfreenplay(area) + + +func qfreenplay(q): + q.queue_free() + play() + + +func _on_Ship_body_entered(body): + if not body.is_in_group("Player") and not body.is_in_group("pbullet"): + qfreenplay(body) + + +func play(): + hitSound.play() + + +func _on_AudioStreamPlayer_finished(): + playerstats.hp -= 1 + if playerstats.hp <= 0: + $AnimationPlayer.play("Die Anim") + + +func _go_into_cooldown(): + i_am_in_cooldown = true + timer.start(wait_time) + yield(timer, "timeout") + i_am_in_cooldown = false + + +func flak(): + if flaku: + wait_time = .001 + shake_intensity = .03 + shake_duration = .04 + enemy_damage.min_damage = 15 + enemy_damage.max_damage = 30 + movementpenalty = 0 + quant = 20 + amount = .5 + recoil = 1 + attack = preload("res://bullets/scenes/Flak.tscn") + playerstats.gun = "flak" + + +func rockets(): + if rocketsu: + shake_intensity = .4 + shake_duration = .3 + wait_time = 1 + amount = 1 + quant = 4 + enemy_damage.min_damage = 10 + enemy_damage.max_damage = 30 + movementpenalty = 60 + recoil = 200 + attack = preload("res://bullets/scenes/missile.tscn") + playerstats.gun = "rockets" + + +func lasers(): + if lasersu: + amount = 1 + shake_intensity = .3 + shake_duration = .2 + wait_time = .1 + quant = 20 + enemy_damage.min_damage = 4 + enemy_damage.max_damage = 9 + movementpenalty = 20 + recoil = 20 + attack = preload("res://bullets/scenes/Laser.tscn") + playerstats.gun = "lasers" + + +func splitshot(): + if splitshotu: + quant = 40 + wait_time = 0.05 + shake_intensity = .2 + amount = .5 + shake_duration = .2 + enemy_damage.min_damage = .5 + enemy_damage.max_damage = 1 + recoil = 12 + movementpenalty = 130 + attack = preload("res://bullets/scenes/SplitShot.tscn") + playerstats.gun = "splitshot" + + +func shoot(): #shoot + _go_into_cooldown() + if !firing: + firing = true + Shake.shake(shake_intensity, shake_duration) + match playerstats.gun: + "rockets": + var muzzles = $Muzzles/RocketMuzzle.get_children() + for muzzle in muzzles: + var bullet = fire(muzzle.global_position, attack) + bullet.start(target) + "lasers": + var muzzles = $Muzzles/LaserMuzzle.get_children() + for muzzle in muzzles: + fire(muzzle.global_position, attack) + "splitshot": + var muzzles = $Muzzles/SplitMuzzle.get_children() + for muzzle in muzzles: + fire(muzzle.global_position, attack) + "flak": + var muzzles = $Muzzles/FlakMuzzle.get_children() + for muzzle in muzzles: + fire(muzzle.global_position, attack) + + +# warning-ignore:function_conflicts_variable +func fire(global_pos, Bullet): + var bullet = Game.instance_scene_on_main(Bullet, global_pos) + if playerstats.power: + bullet.powered_up = true + if not self.is_on_wall(): + velocity.x -= recoil + else: + velocity.x -= recoil / 10 + return bullet + + +func _exit_tree(): + playerstats.alive = false + Game.instance_scene_on_main(ExplosionEffect, global_position) + emit_signal("player_death") + + +func _on_target_getter_target(_target): + target = _target |