rundumdiewelten/rund-um-die-welten/planet/planet_v_2.gd
phantomvines d8eec1150e upload
2025-09-19 16:37:23 +02:00

150 lines
3.9 KiB
GDScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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