class_name Kessel extends StaticBody2D @export var ui_elemnte: Kessel_UI var potion_ingerdiants:Array[String] var fuel_level:float = 60 var brew_progress:float = 0.0 var overheat_timer: float = 0.0 @export var item_input_sound: AudioStreamPlayer # Einstellungen @export_subgroup("Einstellungen Kessel") @export var fuel_burn_rate: float = 1.0 # Wie schnell das Feuer ausgeht (pro Sekunde) @export var brew_speed: float = 10.0 # Wie schnell die Potion fertig wird @export var max_overheat_time: float = 5.0 # 5 Sekunden Zeit zu reagieren @export var max_fuel_level:int = 100 #Flags var has_fuel:bool = false var is_brewing:bool = false signal potion_done(list:Array[String]) func _process(delta: float) -> void: if has_fuel: handle_fuel(delta) if is_brewing: handle_brewing(delta) ## Funktion passiert wenn der spieler etwas in den topf wierft # muss den brew progress zurückstezten , neu starten wenn was neues dazu kommt func add_item(item:Item)->void: # is es das erste , ingredient dann zeige icon und starte timer / wenn was drin ist starte timer neu if item.item_type == Item.TYPE.INGREDIENT: potion_ingerdiants.append(item.name) new_ingrediant() item_input_sound.play() elif item.name == "Wood": add_fuell() ui_elemnte.hitze_bar.show() # wenn die bar noch net aktiviert ist aktiviere sie else: print("Spiler hat nichts in der Hand was wichtig ist ") return ## wenn ein Ingredient hinzugefügt wird func new_ingrediant()->void: # erstes ingrediant für die portion if potion_ingerdiants.size() == 1: ui_elemnte.brew_container.show() # starte brew timer is_brewing = true # hier vl speilen das je mehr zutaen drin sindd er brew timer etwas rurück geht je mehr desto mehr brew_progress -= 10.0 fuel_level -= 5.0 func handle_brewing(delta:float)->void: # 1. Berechne wie effizient die Hitze gerade ist if !ui_elemnte.brew_progess.is_visible_in_tree(): ui_elemnte.brew_progess.show() var heat_efficiency: float = 0.0 if fuel_level < 25: heat_efficiency = 0.0 # Zu kalt elif fuel_level <= 80: heat_efficiency = 1.0 # Perfekt else: heat_efficiency = 1.8 # Turbo-Brauen, aber gefährlich! # 2. Wende die Effizienz auf den Fortschritt an # Wenn heat_efficiency 0 ist, bleibt der Balken einfach stehen brew_progress += brew_speed * heat_efficiency * delta # UI Update ui_elemnte.set_brew_bar(brew_progress) # Check ob fertig if brew_progress >= 100: finish_potion() func finish_potion()->void: is_brewing = false ui_elemnte.brew_progess.hide() potion_done.emit(potion_ingerdiants) brew_progress = 0.0 $potion_done_sound.play() # vl noch coole animation abspeilen das die potion fertig ist zb idk ## Kessel Fuel Logik func handle_fuel(time:float)->void: # Passiver Brennstoffverbrauch fuel_level = clamp(fuel_level, 0, 100) fuel_level -= fuel_burn_rate*time # UI Update ui_elemnte.set_fuel_bar(fuel_level) # Überhitzung prüfen if fuel_level >= 95.0: overheat_timer += time # Hier könnte man den Kessel rot blinken lassen if overheat_timer >= max_overheat_time: explode_kessel() else: overheat_timer = 0.0 func explode_kessel()->void: pass ## funktion die Getriggert wurd wenn Holz rin kommt - verbindung mit Hitze func add_fuell()->void: if fuel_level < max_fuel_level: fuel_level += 15 has_fuel = true func has_potion()->bool: if not is_brewing and potion_ingerdiants.size() >= 1: potion_ingerdiants = [] return true return false func hide_kessel_ui()->void: ui_elemnte.brew_container.hide()