Files
GodotTest/scripts/Cannon.gd
2025-05-13 13:29:35 +02:00

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()