extends StaticBody3D @export var isFirstPlace = true func _ready() -> void: # Defers execution slightly to guarantee MeshInstance3D has finished mounting initialize_material.call_deferred() func initialize_material() -> void: $MeshInstance3D.material_override = $MeshInstance3D.material_override.duplicate() $MeshInstance3D.material_override.albedo_color = Color("00000041") if isFirstPlace: # Freshly placed machine in the world defaults to air placeItem("base:air") isFirstPlace = false else: # The machine was loaded from a save! Restore the data that was saved on the parent if $"..".ItemID != "" and $"..".ItemID != "base:air": placeItem($"..".ItemID) func startHighlight(): $MeshInstance3D.material_override.albedo_color = Color("00FF0041") func stopHighlight(): $MeshInstance3D.material_override.albedo_color = Color("00000041") func placeItem(ItemID: String): var segments = ItemID.split(":") var itemResource: ItemData = load("res://GameShit/ItemHandlers/{namespace}/{id}.tres".format({"namespace": segments[0], "id": segments[1]})) if itemResource == null: itemResource = load("res://GameShit/ItemHandlers/base/air.tres") if "texture" in itemResource: $"..".ItemTexture = itemResource.texture $"..".ItemID = itemResource.ID # Mark initialized so it saves its state properly isFirstPlace = false func removeItem(): $"..".ItemTexture = null $"..".ItemID = "base:air" func _interact_press(isRight): if !isRight: if $"..".ItemID == "base:air": placeItem(MainGame.currentHeldItemID) InventoryBus.removeHeldItem.emit() elif isRight: if $"..".ItemID != "base:air" and $"..".ItemID != "": InventoryBus.givePlayerItem.emit($"..".ItemID) removeItem()