extends CharacterBody2D var base_speed = 100 var speed var bullet_speed var ammunition var damage var incoming_damage var bullet_delay var size = 100 var tax var reloading = false var remaining_bullets = 7 var health = 100 var money = 0 var score = 0 var reload_speed = 0.1 var bullet_timer = 0 @onready var sprite = $CollisionShape2D/Sprite2D @onready var collision = $CollisionShape2D @export var inventory : Control @export var bullet_scene : PackedScene func _physics_process(delta): bullet_timer -= delta velocity = Vector2(0,0) if Input.is_action_pressed("left"): velocity.x += -1 if Input.is_action_pressed("right"): velocity.x += 1 if Input.is_action_pressed("up"): velocity.y += -1 if Input.is_action_pressed("down"): velocity.y += 1 if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT): spawn_bullet() velocity = velocity.normalized() * speed*base_speed*delta move_and_slide() sprite.global_position = Vector2i(global_position) collision.scale = Vector2(0.3,0.3)*(pow(size,0.2)) if bullet_timer < 0 and reloading: remaining_bullets += 1 bullet_timer = reload_speed if remaining_bullets >= ammunition: reloading = false bullet_timer = 0.1*pow(bullet_delay,0.4) inventory.update_stats() func reload(): reloading = true func spawn_bullet(): if bullet_timer > 0 or reloading: return var new_bullet = bullet_scene.instantiate() new_bullet.direction = global_position.direction_to(get_global_mouse_position()) new_bullet.position = position new_bullet.damage = damage new_bullet.speed = sqrt(bullet_speed) get_tree().root.add_child(new_bullet) bullet_timer = 0.1*pow(bullet_delay,0.4) remaining_bullets -= 1 inventory.update_stats() if remaining_bullets <= 0: reload() return