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