SpielBackupAlt/Assets/3d_car_customizable/scripts/settings.gd

227 lines
13 KiB
GDScript3
Raw Normal View History

2024-12-26 14:54:06 +00:00
extends MarginContainer
var CarNode : VehicleBody
onready var PresetList = get_node("ScrollContainer/MarginContainer/List/Car/PresetList")
onready var DeleteButton = get_node("ScrollContainer/MarginContainer/List/Car/PresetButtons/DeletePreset")
onready var LoadButton = get_node("ScrollContainer/MarginContainer/List/Car/PresetButtons/LoadPreset")
func _ready():
# If there is no CarNode attached, Settingspanel quits the tree
if(CarNode == null):
free()
return
#Getting the values from the VehicleBody
get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/EngineForce/MaxEngineForce").value = CarNode.MAX_ENGINE_FORCE
_on_MaxEngineForce_value_changed(CarNode.MAX_ENGINE_FORCE)
get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/Brake/MaxBrake").value = CarNode.MAX_BRAKE
_on_MaxBrake_value_changed(CarNode.MAX_BRAKE)
get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/Steering/MaxSteering").value = CarNode.MAX_STEERING
_on_MaxSteering_value_changed(CarNode.MAX_STEERING)
get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/SteeringSpeed/SteeringSpeed").value = CarNode.STEERING_SPEED
_on_SteeringSpeed_value_changed(CarNode.STEERING_SPEED)
get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Weight/Weight").value = CarNode.weight
_on_Weight_value_changed(CarNode.weight)
# We do not need to get the Mass from the VehicleBody because Weight automatically updates the Mass
#get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Mass/Mass").value = CarNode.mass
#_on_Mass_value_changed(CarNode.mass)
# Each wheel contributes the Wheels dictionary that will later be used twice
var Wheels = {}
for Wheel in CarNode.get_children():
if(Wheel is VehicleWheel):
Wheels[Wheel.name] = Wheel
# All wheels are instanced in the Settingspanel
# with their properties from the CarNode
for Items in Wheels:
var Wheel = Wheels[Items]
var ToInstance = preload("../scenes/wheelsettings.tscn").instance()
ToInstance.get_child(0).text = Wheel.name
ToInstance.name = Wheel.name
ToInstance.get_node("Binding/BindedTo").add_item("none")
for items in Wheels: if(Wheels[items].name != Wheel.name):
ToInstance.get_node("Binding/BindedTo").add_item(Wheels[items].name)
ToInstance.set("WheelNode", { Wheel.name : Wheel } )
ToInstance.get_node("General/UseAsTraction").pressed = Wheel.use_as_traction
ToInstance.get_node("General/UseAsSteering").pressed = Wheel.use_as_steering
ToInstance.get_node("Wheel/RollInfluence/WheelRollInfluence").value = Wheel.wheel_roll_influence
ToInstance.get_node("Wheel/WheelRadius/WheelRadius").value = Wheel.wheel_radius
ToInstance.get_node("Wheel/RestLength/WheelRestLength").value = Wheel.wheel_rest_length
ToInstance.get_node("Wheel/FrictionSlip/WheelFrictionSlip").value = Wheel.wheel_friction_slip
ToInstance.get_node("Suspension/Travel/SuspensionTravel").value = Wheel.suspension_travel
ToInstance.get_node("Suspension/Stiffness/SuspensionStiffness").value = Wheel.suspension_stiffness
ToInstance.get_node("Suspension/MaxForce/SuspensionMaxForce").value = Wheel.suspension_max_force
ToInstance.get_node("Damping/Compression/DampingCompression").value = Wheel.damping_compression
ToInstance.get_node("Damping/Relaxation/DampingRelaxation").value = Wheel.damping_relaxation
get_node("ScrollContainer/MarginContainer/List").add_child(ToInstance)
# Get presets in user data
GetPresets()
# ..and assign the first preset if it exists
if(PresetList.get_item_count() > 0):
if(PresetList.get_item_text(PresetList.get_item_count() - 1) != "No Presets"):
PresetList.select(0)
_on_PresetList_item_selected(0)
LoadPreset()
func SavePreset():
var presetName = $ScrollContainer/MarginContainer/List/Car/SavePreset/PresetName
if (presetName.text.length() < 1):
presetName.text = "Can't be Empty"
return
print("Generating Preset File")
var preset_file = File.new()
var dir = Directory.new()
print("Checking the presets directory")
if (dir.open("user://3d_car_customizable/") != OK):
print("Preset directory doesn't exist")
dir.make_dir("user://3d_car_customizable/")
print("..created a preset directory")
preset_file.open("user://3d_car_customizable/" + presetName.text + ".json", File.WRITE)
print("Writing car settings")
var CarPreset = {
"MAX_ENGINE_FORCE" : CarNode.get("MAX_ENGINE_FORCE"),
"MAX_BRAKE" : CarNode.get("MAX_BRAKE"),
"MAX_STEERING" : CarNode.get("MAX_STEERING"),
"STEERING_SPEED" : CarNode.get("STEERING_SPEED"),
"mass" : CarNode.mass,
"weight" : CarNode.weight,
"wheel_names" : ""
}
for Wheel in CarNode.get_children():
if(Wheel is VehicleWheel):
CarPreset["wheel_names"] += Wheel.name + "."
CarPreset[Wheel.name] = get_node("ScrollContainer/MarginContainer/List").get_node(Wheel.name).save()
preset_file.store_line(to_json(CarPreset))
print("Writing file")
preset_file.close()
print("Closing file manager")
GetPresets()
func GetPresets():
PresetList.clear()
print("Checking the preset directory")
var dir = Directory.new()
if (dir.open("user://3d_car_customizable/")) == OK:
print("Generating Preset List")
dir.list_dir_begin()
var file_name = dir.get_next()
while (file_name != ""):
if !dir.current_is_dir():
#If it's not a directory
print("Found preset: " + file_name)
PresetList.add_item(file_name.split(".json")[0])
PresetList.set_item_tooltip_enabled(PresetList.get_item_count() - 1, false)
# else:
# print("Found directory: " + file_name)
file_name = dir.get_next()
if(PresetList.get_item_count() < 1):
print("No presets found")
PresetList.add_item("No Presets")
PresetList.set_item_tooltip_enabled(PresetList.get_item_count() - 1, false)
else:
print("Preset directory doesn't exist")
PresetList.add_item("No Presets")
PresetList.set_item_tooltip_enabled(PresetList.get_item_count() - 1, false)
func DeletePreset():
print("Checking the preset directory")
var dir = Directory.new()
if (dir.open("user://3d_car_customizable/")) == OK:
print("Generating Preset List")
dir.list_dir_begin()
var file_name = dir.get_next()
while (file_name != ""):
if (file_name == PresetList.get_item_text(PresetList.get_selected_items()[0]) + ".json"):
#If it's not a directory
print("Found preset and deleted")
dir.remove("user://3d_car_customizable/" + PresetList.get_item_text(PresetList.get_selected_items()[0]) + ".json")
$ScrollContainer/MarginContainer/List/Car/PresetButtons.visible = false
DeleteButton.disabled = true
DeleteButton.text = "Delete Preset"
LoadButton.disabled = true
LoadButton.text = "Load Preset"
GetPresets()
return
file_name = dir.get_next()
if(PresetList.get_item_count() < 1):
print("No presets found > could not delete")
else:
print("Preset directory doesn't exist")
GetPresets()
func LoadPreset():
var preset_file = File.new()
print("Checking the preset file")
if (preset_file.open("user://3d_car_customizable/" + PresetList.get_item_text(PresetList.get_selected_items()[0]) + ".json", File.READ) != OK):
print("Preset doesn't exist")
return
preset_file.open("user://3d_car_customizable/" + PresetList.get_item_text(PresetList.get_selected_items()[0]) + ".json", File.READ)
print("Read car settings")
var CarPreset = parse_json(preset_file.get_line())
_on_MaxEngineForce_value_changed(CarPreset["MAX_ENGINE_FORCE"])
_on_MaxBrake_value_changed(CarPreset["MAX_BRAKE"])
_on_MaxSteering_value_changed(CarPreset["MAX_STEERING"])
_on_SteeringSpeed_value_changed(CarPreset["STEERING_SPEED"])
_on_Mass_value_changed(CarPreset["mass"])
_on_Weight_value_changed(CarPreset["weight"])
print("Applied the preset for: Car Body")
for WheelName in CarPreset["wheel_names"].split(".", false):
#Assign to CarNode wheels
get_node("ScrollContainer/MarginContainer/List").get_node(WheelName).LoadPreset(CarPreset[WheelName])
print("Applied the preset for: " + WheelName)
preset_file.close()
print("Closing file manager")
func _on_MaxEngineForce_value_changed(value):
get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/EngineForceText").text = "Max Engine Force = (" + str(value) + ")"
if(get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/EngineForce/MaxEngineForce").value != value): get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/EngineForce/MaxEngineForce").value = value
if(get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/EngineForce/MaxEngineForceBox").value != value): get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/EngineForce/MaxEngineForceBox").value = value
CarNode.set("MAX_ENGINE_FORCE", value)
func _on_MaxBrake_value_changed(value):
get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/BrakeText").text = "Max Brake Force = (" + str(value) + ")"
if(get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/Brake/MaxBrake").value != value): get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/Brake/MaxBrake").value = value
if(get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/Brake/MaxBrakeBox").value != value): get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/Brake/MaxBrakeBox").value = value
CarNode.set("MAX_BRAKE", value)
func _on_MaxSteering_value_changed(value):
get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/SteeringText").text = "Max Steering Angle = (" + str(value) + ")"
if(get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/Steering/MaxSteering").value != value): get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/Steering/MaxSteering").value = value
if(get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/Steering/MaxSteeringBox").value != value): get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/Steering/MaxSteeringBox").value = value
CarNode.set("MAX_STEERING", value)
func _on_SteeringSpeed_value_changed(value):
get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/SteeringSpeedText").text = "Steering Speed = (" + str(value) + ")"
if(get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/SteeringSpeed/SteeringSpeed").value != value): get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/SteeringSpeed/SteeringSpeed").value = value
if(get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/SteeringSpeed/SteeringSpeedBox").value != value): get_node("ScrollContainer/MarginContainer/List/Car/ScriptVariables/SteeringSpeed/SteeringSpeedBox").value = value
CarNode.set("STEERING_SPEED", value)
func _on_Mass_value_changed(value):
get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/MassText").text = "Mass = (" + str(value) + ")"
if(get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Mass/Mass").value != value): get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Mass/Mass").value = value
if(get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Mass/MassBox").value != value): get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Mass/MassBox").value = value
CarNode.mass = value
get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/WeightText").text = "Weight = (" + str(CarNode.weight) + ")"
if(get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Weight/Weight").value != CarNode.weight): get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Weight/Weight").value = CarNode.weight
if(get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Weight/WeightBox").value != CarNode.weight): get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Weight/WeightBox").value = CarNode.weight
func _on_Weight_value_changed(value):
get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/WeightText").text = "Weight = (" + str(value) + ")"
if(get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Weight/Weight").value != value): get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Weight/Weight").value = value
if(get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Weight/WeightBox").value != value): get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Weight/WeightBox").value = value
CarNode.weight = value
get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/MassText").text = "Mass = (" + str(CarNode.mass) + ")"
if(get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Mass/Mass").value != CarNode.mass): get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Mass/Mass").value = CarNode.mass
if(get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Mass/MassBox").value != CarNode.mass): get_node("ScrollContainer/MarginContainer/List/Car/VehicleBody/Mass/MassBox").value = CarNode.mass
func _on_PresetList_item_selected(index):
if(PresetList.get_item_text(index) == "No Presets"): return
$ScrollContainer/MarginContainer/List/Car/PresetButtons.visible = true
DeleteButton.disabled = false
DeleteButton.text = "Delete Preset: " + PresetList.get_item_text(index)
LoadButton.disabled = false
LoadButton.text = "Load Preset: " + PresetList.get_item_text(index)
$ScrollContainer/MarginContainer/List/Car/SavePreset/PresetName.text = PresetList.get_item_text(index)