49 lines
1.3 KiB
GDScript
49 lines
1.3 KiB
GDScript
extends "res://scripts/ColoredEntity.gd"
|
|
|
|
@onready var Bullet: PackedScene = preload("res://scenes/Projectile.tscn")
|
|
const RATE_OF_CHANGE: float = 0.9
|
|
const UPPER_LIMIT: int = -89
|
|
const LOWER_LIMIT: int = -5
|
|
|
|
var angle: float = -45.0
|
|
|
|
func _ready():
|
|
self.highlight()
|
|
|
|
func _process(delta):
|
|
$Sprite2D.set_rotation(deg_to_rad(self.angle))
|
|
$Sprite2D.size.y = 24
|
|
|
|
func _input(event):
|
|
if Input.is_action_pressed("ui_up"):
|
|
if self.angle > UPPER_LIMIT:
|
|
self.move_up()
|
|
if Input.is_action_pressed("ui_down"):
|
|
if self.angle < LOWER_LIMIT:
|
|
self.move_down()
|
|
|
|
func move_up() -> void:
|
|
self.angle -= RATE_OF_CHANGE
|
|
|
|
func move_down() -> void:
|
|
self.angle += RATE_OF_CHANGE
|
|
|
|
func shoot() -> void:
|
|
if $FireCooldown.time_left == 0:
|
|
var NewBullet = Bullet.instantiate()
|
|
NewBullet.global_position = $Sprite2D/CannonTip.global_position
|
|
NewBullet.rotation_degrees = self.angle
|
|
var at: Vector2 = $Sprite2D/CannonTip.global_position - $Sprite2D/CannonBase.global_position
|
|
NewBullet.shoot(at)
|
|
|
|
var BulletSprite = NewBullet.get_node("Mask")
|
|
if self.highlighted:
|
|
BulletSprite.highlight()
|
|
else:
|
|
BulletSprite.lowlight()
|
|
|
|
NewBullet.setup(GLOBAL.SpriteType.BULLET, GLOBAL.BULLET_SPEED)
|
|
NewBullet.update_collision_layer()
|
|
$Projectiles.add_child(NewBullet)
|
|
$FireCooldown.start()
|