rundumdiewelten/rund-um-die-welten/planet/planet_v_2.gd

151 lines
3.9 KiB
GDScript3
Raw Normal View History

2025-09-19 16:37:23 +02:00
extends Area2D
@export var size_scale := 1.0 # Standardgröße (1 = 100%)
# for differentiating different planets
@export var planet_type: GlobalVariables.planets:
set(value):
planet_type = value
fit_planet_type(value)
@export var win_planet = false:
set(value):
win_planet = value
if value:
$goal.visible = true
else:
$goal.visible = false
@export var win_message = "You reached the goal"
@export var death_message_overwrite: String
@export var speed = 300
@export var clockwise = true:
set (value):
clockwise = value
$rotation_indicator.clockwise = clockwise
$rotation_indicator.set_info()
@export var collision_enabled = true
@export var moon = true
@export var moon_radius = 150
@export var moon_speed = 150
var planet_radius = 40
func _ready():
# Collision anpassen (wenn z.B. CircleShape2D)
# Reaktion auf Klick
input_pickable = true
# set rotation direction of rotation indicator
$rotation_indicator.clockwise = clockwise
fit_planet_type(planet_type)
# if planet is target, display goal texture
if win_planet:
$goal.visible = true
# set info of direction indicator, for updating
$rotation_indicator.set_info()
$moon.vis = moon
$moon.circle_radius = moon_radius
$moon.circle_speed = moon_speed
if moon:
print("show moon")
$moon.visible = true
func fit_planet_type(new_planet_type):
var shape = $CollisionShape2D.shape
# change size of collision area and animation based on which planet is chosen
match new_planet_type:
GlobalVariables.planets.DeathStar:
size_scale = 1.5
$death_star.play("default")
$death_star.visible = true
$goal/mars_goal.visible = true
$rotation_indicator.radius = 23
GlobalVariables.planets.Mars:
size_scale = 1.5
$mars.play("default")
$mars.visible = true
$goal/mars_goal.visible = true
$rotation_indicator.radius = 23
GlobalVariables.planets.Earth:
size_scale = 4.2
$earth.play("default")
$earth.visible = true
$goal/earth_goal.visible = true
$rotation_indicator.radius = 50
GlobalVariables.planets.Sun:
size_scale = 4.8
$sun.play("default")
$sun.visible = true
$goal/sun_goal.visible = true
$rotation_indicator.radius = 60
GlobalVariables.planets.Plant:
size_scale = 2.0
$plant.play("default")
$plant.visible = true
$goal/plant_goal.visible = true
$rotation_indicator.radius = 25
GlobalVariables.planets.Soap:
size_scale = 1.9
$soap.play("default")
$soap.visible = true
$goal/plant_goal.visible = true
$rotation_indicator.radius = 23
GlobalVariables.planets.Magma:
size_scale = 1.4
$magma.play("default")
$magma.visible = true
$goal/mars_goal.visible = true
$rotation_indicator.radius = 20
GlobalVariables.planets.Bowling:
size_scale = 1.5
$bowling.play("default")
$bowling.visible = true
$goal/mars_goal.visible = true
$rotation_indicator.radius = 22
shape.radius = 10 * size_scale
planet_radius = 10 * size_scale
$rotation_indicator.set_info()
func _input_event(_viewport, event, _shape_idx):
if event is InputEventMouseButton and event.pressed:
GlobalVariables.target_planet_position = global_position
GlobalVariables.player_speed = speed
GlobalVariables.player_clockwise = clockwise
func _on_area_entered(area: Area2D) -> void:
if collision_enabled:
# if area in player group entered, kill player
if area.is_in_group("player"):
if win_planet:
GlobalVariables.levels[GlobalVariables.selected_level] = 1
GlobalVariables.emit_level_done(win_message)
else:
if death_message_overwrite:
GlobalVariables.emit_player_died(death_message_overwrite)
else:
GlobalVariables.emit_player_died("You crashed into the " + GlobalVariables.planet_names[planet_type])
print(area.position)
func _physics_process(_delta: float) -> void:
# set target symbol to visible if current planet is targeted
if GlobalVariables.target_planet_position == global_position:
$target.visible = true
else:
$target.visible = false