refactor(items): use ItemType enum and offset constants in ChestItemData/RoomChestConfig
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
## ChestItemData — configuration for a single item slot inside a RoomChest.
|
## ChestItemData — configuration for a single item slot inside a RoomChest.
|
||||||
class_name ChestItemData extends Resource
|
class_name ChestItemData extends Resource
|
||||||
|
|
||||||
|
enum ItemType { HOLDABLE, OUTFIT }
|
||||||
|
|
||||||
@export var item_id: String = ""
|
@export var item_id: String = ""
|
||||||
@export var item_type: String = "holdable"
|
@export var item_type: ItemType = ItemType.HOLDABLE
|
||||||
@export var outfit_layer: int = 1
|
@export_range(1, 3) var outfit_layer: int = 1
|
||||||
@export var spawn_offset: Vector2 = Vector2.ZERO
|
@export var spawn_offset: Vector2 = Vector2.ZERO
|
||||||
|
|||||||
@@ -2,88 +2,94 @@
|
|||||||
## Maps chest_id strings to ChestItemData arrays. No assets needed: item_id strings only.
|
## Maps chest_id strings to ChestItemData arrays. No assets needed: item_id strings only.
|
||||||
class_name RoomChestConfig
|
class_name RoomChestConfig
|
||||||
|
|
||||||
|
const _OFFSET_LEFT: Vector2 = Vector2(-70.0, -60.0)
|
||||||
|
const _OFFSET_CENTER: Vector2 = Vector2(0.0, -80.0)
|
||||||
|
const _OFFSET_RIGHT: Vector2 = Vector2(70.0, -60.0)
|
||||||
|
const _OFFSET_LEFT_2: Vector2 = Vector2(-50.0, -60.0)
|
||||||
|
const _OFFSET_RIGHT_2: Vector2 = Vector2(50.0, -60.0)
|
||||||
|
|
||||||
|
|
||||||
static func get_items(chest_id: String) -> Array[ChestItemData]:
|
static func get_items(chest_id: String) -> Array[ChestItemData]:
|
||||||
match chest_id:
|
match chest_id:
|
||||||
"reception_desk":
|
"reception_desk":
|
||||||
return _make([
|
return _make([
|
||||||
["clipboard", "holdable", 1, Vector2(-70.0, -60.0)],
|
["clipboard", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_LEFT],
|
||||||
["pen", "holdable", 1, Vector2(0.0, -80.0)],
|
["pen", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_CENTER],
|
||||||
["bandage", "holdable", 1, Vector2(70.0, -60.0)],
|
["bandage", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_RIGHT],
|
||||||
])
|
])
|
||||||
"giftshop_shelf":
|
"giftshop_shelf":
|
||||||
return _make([
|
return _make([
|
||||||
["gift_box", "holdable", 1, Vector2(-70.0, -60.0)],
|
["gift_box", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_LEFT],
|
||||||
["ribbon", "holdable", 1, Vector2(0.0, -80.0)],
|
["ribbon", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_CENTER],
|
||||||
["balloon", "holdable", 1, Vector2(70.0, -60.0)],
|
["balloon", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_RIGHT],
|
||||||
])
|
])
|
||||||
"restaurant_counter":
|
"restaurant_counter":
|
||||||
return _make([
|
return _make([
|
||||||
["teacup", "holdable", 1, Vector2(-70.0, -60.0)],
|
["teacup", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_LEFT],
|
||||||
["plate", "holdable", 1, Vector2(0.0, -80.0)],
|
["plate", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_CENTER],
|
||||||
["spoon", "holdable", 1, Vector2(70.0, -60.0)],
|
["spoon", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_RIGHT],
|
||||||
])
|
])
|
||||||
"emergency_cabinet":
|
"emergency_cabinet":
|
||||||
return _make([
|
return _make([
|
||||||
["bandage_roll", "holdable", 1, Vector2(-70.0, -60.0)],
|
["bandage_roll", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_LEFT],
|
||||||
["syringe", "holdable", 1, Vector2(0.0, -80.0)],
|
["syringe", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_CENTER],
|
||||||
["ice_pack", "holdable", 1, Vector2(70.0, -60.0)],
|
["ice_pack", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_RIGHT],
|
||||||
])
|
])
|
||||||
"xray_cabinet":
|
"xray_cabinet":
|
||||||
return _make([
|
return _make([
|
||||||
["xray_sheet", "holdable", 1, Vector2(-70.0, -60.0)],
|
["xray_sheet", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_LEFT],
|
||||||
["lead_apron", "outfit", 1, Vector2(0.0, -80.0)],
|
["lead_apron", ChestItemData.ItemType.OUTFIT, 1, _OFFSET_CENTER],
|
||||||
["marker", "holdable", 1, Vector2(70.0, -60.0)],
|
["marker", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_RIGHT],
|
||||||
])
|
])
|
||||||
"pharmacy_medicine":
|
"pharmacy_medicine":
|
||||||
return _make([
|
return _make([
|
||||||
["pill_bottle", "holdable", 1, Vector2(-50.0, -60.0)],
|
["pill_bottle", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_LEFT_2],
|
||||||
["syrup", "holdable", 1, Vector2(50.0, -60.0)],
|
["syrup", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_RIGHT_2],
|
||||||
])
|
])
|
||||||
"pharmacy_tools":
|
"pharmacy_tools":
|
||||||
return _make([
|
return _make([
|
||||||
["mortar", "holdable", 1, Vector2(-50.0, -60.0)],
|
["mortar", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_LEFT_2],
|
||||||
["spatula", "holdable", 1, Vector2(50.0, -60.0)],
|
["spatula", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_RIGHT_2],
|
||||||
])
|
])
|
||||||
"lab_bench":
|
"lab_bench":
|
||||||
return _make([
|
return _make([
|
||||||
["test_tube", "holdable", 1, Vector2(-70.0, -60.0)],
|
["test_tube", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_LEFT],
|
||||||
["pipette", "holdable", 1, Vector2(0.0, -80.0)],
|
["pipette", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_CENTER],
|
||||||
["microscope_slide", "holdable", 1, Vector2(70.0, -60.0)],
|
["microscope_slide", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_RIGHT],
|
||||||
])
|
])
|
||||||
"patient_cabinet":
|
"patient_cabinet":
|
||||||
return _make([
|
return _make([
|
||||||
["thermometer", "holdable", 1, Vector2(-70.0, -60.0)],
|
["thermometer", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_LEFT],
|
||||||
["stethoscope", "outfit", 2, Vector2(0.0, -80.0)],
|
["stethoscope", ChestItemData.ItemType.OUTFIT, 2, _OFFSET_CENTER],
|
||||||
["pillow", "holdable", 1, Vector2(70.0, -60.0)],
|
["pillow", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_RIGHT],
|
||||||
])
|
])
|
||||||
"ultrasound_cart":
|
"ultrasound_cart":
|
||||||
return _make([
|
return _make([
|
||||||
["gel_tube", "holdable", 1, Vector2(-70.0, -60.0)],
|
["gel_tube", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_LEFT],
|
||||||
["probe", "holdable", 1, Vector2(0.0, -80.0)],
|
["probe", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_CENTER],
|
||||||
["towel", "holdable", 1, Vector2(70.0, -60.0)],
|
["towel", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_RIGHT],
|
||||||
])
|
])
|
||||||
"delivery_cabinet":
|
"delivery_cabinet":
|
||||||
return _make([
|
return _make([
|
||||||
["swaddle", "outfit", 1, Vector2(-70.0, -60.0)],
|
["swaddle", ChestItemData.ItemType.OUTFIT, 1, _OFFSET_LEFT],
|
||||||
["scissors", "holdable", 1, Vector2(0.0, -80.0)],
|
["scissors", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_CENTER],
|
||||||
["cord_clamp", "holdable", 1, Vector2(70.0, -60.0)],
|
["cord_clamp", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_RIGHT],
|
||||||
])
|
])
|
||||||
"nursery_shelf":
|
"nursery_shelf":
|
||||||
return _make([
|
return _make([
|
||||||
["bottle", "holdable", 1, Vector2(-70.0, -60.0)],
|
["bottle", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_LEFT],
|
||||||
["rattle", "holdable", 1, Vector2(0.0, -80.0)],
|
["rattle", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_CENTER],
|
||||||
["blanket", "outfit", 1, Vector2(70.0, -60.0)],
|
["blanket", ChestItemData.ItemType.OUTFIT, 1, _OFFSET_RIGHT],
|
||||||
])
|
])
|
||||||
"garden_table":
|
"garden_table":
|
||||||
return _make([
|
return _make([
|
||||||
["teapot", "holdable", 1, Vector2(-50.0, -60.0)],
|
["teapot", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_LEFT_2],
|
||||||
["cake", "holdable", 1, Vector2(50.0, -60.0)],
|
["cake", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_RIGHT_2],
|
||||||
])
|
])
|
||||||
"garden_storage":
|
"garden_storage":
|
||||||
return _make([
|
return _make([
|
||||||
["confetti", "holdable", 1, Vector2(-50.0, -60.0)],
|
["confetti", ChestItemData.ItemType.HOLDABLE, 1, _OFFSET_LEFT_2],
|
||||||
["party_hat", "outfit", 1, Vector2(50.0, -60.0)],
|
["party_hat", ChestItemData.ItemType.OUTFIT, 1, _OFFSET_RIGHT_2],
|
||||||
])
|
])
|
||||||
return []
|
return []
|
||||||
|
|
||||||
@@ -91,6 +97,7 @@ static func get_items(chest_id: String) -> Array[ChestItemData]:
|
|||||||
static func _make(data: Array) -> Array[ChestItemData]:
|
static func _make(data: Array) -> Array[ChestItemData]:
|
||||||
var result: Array[ChestItemData] = []
|
var result: Array[ChestItemData] = []
|
||||||
for entry: Array in data:
|
for entry: Array in data:
|
||||||
|
assert(entry.size() == 4, "ChestItemData entry must have 4 elements: " + str(entry))
|
||||||
var d: ChestItemData = ChestItemData.new()
|
var d: ChestItemData = ChestItemData.new()
|
||||||
d.item_id = entry[0]
|
d.item_id = entry[0]
|
||||||
d.item_type = entry[1]
|
d.item_type = entry[1]
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ extends GutTest
|
|||||||
|
|
||||||
func test_chest_item_data_default_item_type_is_holdable() -> void:
|
func test_chest_item_data_default_item_type_is_holdable() -> void:
|
||||||
var d: ChestItemData = ChestItemData.new()
|
var d: ChestItemData = ChestItemData.new()
|
||||||
assert_eq(d.item_type, "holdable")
|
assert_eq(d.item_type, ChestItemData.ItemType.HOLDABLE)
|
||||||
|
|
||||||
|
|
||||||
func test_chest_item_data_default_outfit_layer_is_one() -> void:
|
func test_chest_item_data_default_outfit_layer_is_one() -> void:
|
||||||
@@ -20,3 +20,18 @@ func test_room_chest_config_reception_desk_has_three_items() -> void:
|
|||||||
func test_room_chest_config_unknown_id_returns_empty() -> void:
|
func test_room_chest_config_unknown_id_returns_empty() -> void:
|
||||||
var items: Array[ChestItemData] = RoomChestConfig.get_items("does_not_exist")
|
var items: Array[ChestItemData] = RoomChestConfig.get_items("does_not_exist")
|
||||||
assert_eq(items.size(), 0)
|
assert_eq(items.size(), 0)
|
||||||
|
|
||||||
|
|
||||||
|
func test_room_chest_config_reception_desk_first_item_fields() -> void:
|
||||||
|
var items: Array[ChestItemData] = RoomChestConfig.get_items("reception_desk")
|
||||||
|
assert_eq(items[0].item_id, "clipboard")
|
||||||
|
assert_eq(items[0].item_type, ChestItemData.ItemType.HOLDABLE)
|
||||||
|
assert_eq(items[0].spawn_offset, Vector2(-70.0, -60.0))
|
||||||
|
|
||||||
|
|
||||||
|
func test_room_chest_config_patient_cabinet_stethoscope_outfit_layer_two() -> void:
|
||||||
|
var items: Array[ChestItemData] = RoomChestConfig.get_items("patient_cabinet")
|
||||||
|
var stethoscope: ChestItemData = items[1]
|
||||||
|
assert_eq(stethoscope.item_id, "stethoscope")
|
||||||
|
assert_eq(stethoscope.item_type, ChestItemData.ItemType.OUTFIT)
|
||||||
|
assert_eq(stethoscope.outfit_layer, 2)
|
||||||
|
|||||||
Reference in New Issue
Block a user