godot-ci/test-project/scripts/Cannon.gd
Antonio Dell'Annunziata 79e2014976
Some checks are pending
godot-ci export / Windows Export (push) Waiting to run
godot-ci export / Linux Export (push) Waiting to run
godot-ci export / Web Export (push) Waiting to run
godot-ci export / Mac Export (push) Waiting to run
Adapt to forgejo
2025-03-02 11:36:40 +01:00

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