sunoku/scenes/player/player.gd

104 lines
2.1 KiB
GDScript

extends CharacterBody2D
class_name Player
var base_speed = 100
var death_scene = "res://scenes/game_over.tscn"
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 = 100
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):
if health < 0:
Globals.score = score
get_tree().change_scene_to_file(death_scene)
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_action_just_pressed("reload"):
reload()
if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT) and get_global_mouse_position().x < 256 and Globals.mouse_dragging == false:
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:
if remaining_bullets < ammunition:
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 inflict_damage():
health -= incoming_damage
inventory.update_stats()
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