Cyclone-Tracker/cyclone.gd

95 lines
2.5 KiB
GDScript3
Raw Permalink Normal View History

2025-06-29 16:25:51 +10:00
extends RigidBody2D
2025-06-29 15:15:49 +10:00
@export var sprite : Sprite2D
@export var label : Label
@export var wind_speed_label : Label
2025-06-29 16:25:51 +10:00
@export var line : Line2D
2025-07-04 15:14:59 +10:00
@export var visuals : Node2D
2025-06-30 20:47:54 +10:00
var wind_speed : float = 0.1
2025-06-29 15:15:49 +10:00
#var move_speed : float = 20
2025-06-30 20:47:54 +10:00
var wind_acceleration : float = 5
var wind_change : float = 5
2025-06-29 16:25:51 +10:00
var wind_penalty : float = 0
var sprite_spin : float = 40
2025-06-29 15:15:49 +10:00
var move_acceleration : Vector2 = Vector2(0,0)
var move_change : Vector2 = Vector2(0,0)
var velocity : Vector2 = Vector2(0,0)
2025-06-30 20:47:54 +10:00
2025-06-29 15:15:49 +10:00
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
2025-06-30 20:47:54 +10:00
2025-06-29 15:15:49 +10:00
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
label.text = get_category()
2025-06-29 16:25:51 +10:00
sprite.self_modulate = Color(1,1,1, clamp(wind_speed/20,0,1) )
2025-06-30 20:47:54 +10:00
wind_speed_label.text = str(round(wind_speed*10)/10) + "km/h"
2025-06-29 16:25:51 +10:00
sprite.rotation_degrees += sprite_spin * delta
2025-06-29 15:15:49 +10:00
if wind_speed <= 0:
end_cyclone()
wind_acceleration += wind_change * delta
wind_acceleration = clampf(wind_acceleration, -5, 5)
wind_speed += wind_acceleration * delta
2025-06-29 16:25:51 +10:00
if wind_speed > 140:
wind_penalty = (wind_speed-140)/140 * delta * 150
wind_speed -= wind_penalty * delta
2025-06-29 15:15:49 +10:00
move_acceleration += move_change * delta
move_acceleration.x = clampf(move_acceleration.x, -5, 5)
move_acceleration.y = clampf(move_acceleration.y, -5, 5)
2025-06-29 16:25:51 +10:00
apply_force(move_acceleration * delta * 10)
#linear_velocity += move_acceleration * delta
#linear_velocity.x = clampf(velocity.x, -3, 3)
#linear_velocity.y = clampf(velocity.y, -3, 3)
#position += velocity * delta
sprite_spin = clampf((wind_speed/250) * 180, 0, 9999)
line.global_position = Vector2(0,0)
2025-06-29 15:15:49 +10:00
func do_something():
wind_change = randf_range(-1,1)
move_change = Vector2(randf_range(-1,1),randf_range(-1,1))
pass
func end_cyclone():
2025-06-29 16:25:51 +10:00
line.reparent(get_tree().get_root())
2025-06-29 15:15:49 +10:00
queue_free()
func get_category() -> String:
if wind_speed >= 250:
2025-06-29 16:25:51 +10:00
sprite.modulate = Color.DEEP_PINK
2025-06-29 15:15:49 +10:00
return "5"
elif wind_speed >= 210:
2025-06-29 16:25:51 +10:00
sprite.modulate = Color.RED
2025-06-29 15:15:49 +10:00
return "4"
elif wind_speed >= 178:
2025-06-29 16:25:51 +10:00
sprite.modulate = Color.ORANGE_RED
2025-06-29 15:15:49 +10:00
return "3"
elif wind_speed >= 154:
2025-06-29 16:25:51 +10:00
sprite.modulate = Color.ORANGE
2025-06-29 15:15:49 +10:00
return "2"
elif wind_speed >= 119:
2025-06-29 16:25:51 +10:00
sprite.modulate = Color.YELLOW
2025-06-29 15:15:49 +10:00
return "1"
elif wind_speed >= 63:
2025-06-29 16:25:51 +10:00
sprite.modulate = Color.LIME_GREEN
2025-06-29 15:15:49 +10:00
return "TS"
else:
2025-06-29 16:25:51 +10:00
sprite.modulate = Color.DODGER_BLUE
2025-06-29 15:15:49 +10:00
return "TD"
2025-06-30 20:47:54 +10:00
2025-06-29 15:15:49 +10:00
func _on_timer_timeout() -> void:
do_something()
2025-06-29 16:25:51 +10:00
func _on_new_point_timer_timeout() -> void:
line.add_point(global_position)