mirror of
https://codeberg.org/Melon-Bread/Comets.gd.git
synced 2025-07-06 22:54:36 -04:00
Refactored all of ship movement
This commit is contained in:
@ -1,13 +1,16 @@
|
||||
extends Area2D
|
||||
|
||||
@export var max_speed := 1400.00
|
||||
|
||||
var direction := Vector2.ZERO
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
var viewport_size := get_viewport_rect().size
|
||||
position.x = wrap(position.x, 0, viewport_size.x)
|
||||
position.y = wrap(position.y, 0,viewport_size.y)
|
||||
position += direction * max_speed * delta
|
||||
#print("Bullet Pos: " + str(position))
|
||||
|
||||
#var viewport_size := get_viewport_rect().size
|
||||
#position.x = wrap(position.x, 0, viewport_size.x)
|
||||
#position.y = wrap(position.y, 0,viewport_size.y)
|
||||
|
||||
func _on_life_timer_timeout() -> void:
|
||||
queue_free()
|
||||
|
@ -1,27 +1,41 @@
|
||||
extends Area2D
|
||||
extends RigidBody2D
|
||||
|
||||
@export var max_speed := 1200.0
|
||||
@export var steering_factor := 3.0
|
||||
@export var engine_power := 16000.0
|
||||
@export var spin_power := 200000.0
|
||||
|
||||
var velocity := Vector2.ZERO
|
||||
@onready var screensize = self.get_viewport_rect().size
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
# TODO: Maybe look into tank controls like classic Astroids
|
||||
var direction := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
|
||||
if direction.length() > 1.0:
|
||||
direction.normalized()
|
||||
const BULLET = preload("res://scenes/bullet.tscn")
|
||||
|
||||
var desired_velocity := max_speed * direction
|
||||
var steering := desired_velocity - velocity
|
||||
velocity += steering * steering_factor * delta
|
||||
position += velocity * delta
|
||||
var thrust := Vector2.ZERO
|
||||
var rotation_direction := 0
|
||||
var can_shoot := false
|
||||
|
||||
if velocity.length() > 0.0:
|
||||
# TODO: Have the CollisionShape toate with the sprite
|
||||
$Sprite2D.rotation = velocity.angle()
|
||||
func shoot_gun(pos : Vector2, dir : Vector2, rot : float) -> void:
|
||||
var bullet = BULLET.instantiate()
|
||||
bullet.position = pos
|
||||
bullet.direction = dir
|
||||
bullet.rotation = rot
|
||||
add_child(bullet)
|
||||
can_shoot = false
|
||||
$ShotCooldown.start()
|
||||
|
||||
var viewport_size := get_viewport_rect().size
|
||||
position.x = wrap(position.x, 0, viewport_size.x)
|
||||
position.y = wrap(position.y, 0,viewport_size.y)
|
||||
func get_input() -> void:
|
||||
thrust = Vector2.ZERO
|
||||
if Input.is_action_pressed("ui_up"):
|
||||
thrust = self.transform.x * engine_power
|
||||
rotation_direction = Input.get_axis("ui_left", "ui_right")
|
||||
|
||||
func fire_gun() -> void:
|
||||
func _integrate_forces(state: PhysicsDirectBodyState2D) -> void:
|
||||
var xform := state.transform
|
||||
xform.origin.x = wrapf(xform.origin.x, 0 , screensize.x)
|
||||
xform.origin.y = wrapf(xform.origin.y , 0, screensize.y)
|
||||
state.transform = xform
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
get_input()
|
||||
self.constant_force = thrust * delta
|
||||
self.constant_torque = rotation_direction * spin_power * delta
|
||||
|
||||
func _on_shot_cooldown_timeout() -> void:
|
||||
can_shoot = true
|
||||
|
50
scripts/ship.old.gd
Normal file
50
scripts/ship.old.gd
Normal file
@ -0,0 +1,50 @@
|
||||
extends Area2D
|
||||
|
||||
@export var max_speed := 1200.0
|
||||
@export var steering_factor := 3.0
|
||||
|
||||
const BULLET = preload("res://scenes/bullet.tscn")
|
||||
var velocity := Vector2.ZERO
|
||||
var gun_direction := Vector2.ZERO
|
||||
var can_shoot := true
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
# TODO: Maybe look into tank controls like classic Astroids
|
||||
var direction := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
|
||||
if direction.length() > 1.0:
|
||||
direction.normalized()
|
||||
if direction.length() != 0.0:
|
||||
gun_direction = direction
|
||||
|
||||
|
||||
var desired_velocity := max_speed * direction
|
||||
var steering := desired_velocity - velocity
|
||||
velocity += steering * steering_factor * delta
|
||||
position += velocity * delta
|
||||
|
||||
if velocity.length() > 0.0:
|
||||
# TODO: Have the CollisionShape toate with the sprite
|
||||
$Sprite2D.rotation = velocity.angle()
|
||||
print("Angle: " + str($Sprite2D.rotation))
|
||||
|
||||
|
||||
var viewport_size := get_viewport_rect().size
|
||||
position.x = wrap(position.x, 0, viewport_size.x)
|
||||
position.y = wrap(position.y, 0,viewport_size.y)
|
||||
|
||||
|
||||
if Input.is_action_pressed("ui_accept") and can_shoot:
|
||||
fire_gun($Gun.position, $Sprite2D.rotation, velocity.angle())
|
||||
|
||||
|
||||
func fire_gun(pos : Vector2, dir : Vector2, rot : float) -> void:
|
||||
var bullet = BULLET.instantiate()
|
||||
bullet.position = pos
|
||||
bullet.direction = dir
|
||||
bullet.rotation = rot
|
||||
add_child(bullet)
|
||||
can_shoot = false
|
||||
$ShotCooldown.start()
|
||||
|
||||
func _on_timer_timeout() -> void:
|
||||
can_shoot = true
|
Reference in New Issue
Block a user