Implemented vending machine

This commit is contained in:
MaddoScientisto 2026-03-07 16:49:06 +01:00
commit e5ffb0cf94
32 changed files with 3074 additions and 1992 deletions

File diff suppressed because one or more lines are too long

View file

@ -2316,6 +2316,7 @@
{
"classname" "actor_elevator_1"
"origin" "-176 544 15"
"targetname" "elevator_card"
}
// entity 73
{
@ -3662,6 +3663,13 @@
}
// entity 271
{
"classname" "actor_controlpad"
"origin" "-192 572 36"
"target" "elevator_card"
"activationtype" "Toggle"
}
// entity 272
{
"classname" "func_group"
"_tb_type" "_tb_layer"
"_tb_name" "Shrouds"
@ -3669,7 +3677,7 @@
"_tb_layer_sort_index" "0"
"_tb_layer_hidden" "1"
}
// entity 272
// entity 273
{
"classname" "func_shroud"
"targetname" "secret_001"
@ -3685,7 +3693,7 @@
( 128 800 48 ) ( 128 800 49 ) ( 128 801 48 ) Manual/Black [ 0 1 0 0 ] [ 0 0 -1 -4 ] 180 1 1
}
}
// entity 273
// entity 274
{
"classname" "func_shroud"
"targetname" "wall_trap_1"
@ -3701,7 +3709,7 @@
( -72 248 52 ) ( -72 248 53 ) ( -72 249 52 ) Manual/Black [ 0 1 0 0 ] [ 0 0 -1 0 ] 90 1 1
}
}
// entity 274
// entity 275
{
"classname" "func_shroud"
"targetname" "wall_trap_1"
@ -3717,7 +3725,7 @@
( -72 352 52 ) ( -72 352 53 ) ( -72 353 52 ) Manual/Black [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 275
// entity 276
{
"classname" "func_group"
"_tb_type" "_tb_layer"
@ -3725,7 +3733,7 @@
"_tb_id" "15"
"_tb_layer_sort_index" "1"
}
// entity 276
// entity 277
{
"classname" "func_group"
"_tb_type" "_tb_group"
@ -3735,7 +3743,7 @@
"_tb_transformation" "1 0 0 -508 0 1 0 576 0 0 1 32 0 0 0 1"
"_tb_layer" "15"
}
// entity 277
// entity 278
{
"classname" "func_group"
"_tb_type" "_tb_group"
@ -3822,7 +3830,7 @@
( -160 528 16 ) ( -160 528 17 ) ( -160 529 16 ) Manual/Chevron_2 [ 0 1 0 0 ] [ 0 0 -1 -8 ] 0 1 1
}
}
// entity 278
// entity 279
{
"classname" "func_group"
"_tb_type" "_tb_group"

View file

@ -146,7 +146,7 @@
( -96 -192 -16 ) ( -96 -192 -15 ) ( -95 -192 -16 ) special/clip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -96 -224 8 ) ( -95 -224 8 ) ( -96 -223 8 ) special/clip [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 32 -96 16 ) ( 32 -95 16 ) ( 33 -96 16 ) Floors/Floor_Tiled_0088 [ 1 0 0 0 ] [ 0 -1 0 0 ] 90 1 1
( 32 -96 16 ) ( 33 -96 16 ) ( 32 -96 17 ) special/clip [ -1 0 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 32 -96 16 ) ( 33 -96 16 ) ( 32 -96 17 ) Manual/Black [ -1 0 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 32 -96 16 ) ( 32 -96 17 ) ( 32 -95 16 ) special/clip [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
}
// brush 16
@ -183,7 +183,7 @@
( -192 -128 -16 ) ( -191 -128 -16 ) ( -192 -127 -16 ) special/clip [ -1 0 0 0 ] [ 0 -1 0 0 ] 90 1 1
( -64 0 16 ) ( -64 1 16 ) ( -63 0 16 ) Floors/Floor_Tiled_0088 [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( -64 32 16 ) ( -63 32 16 ) ( -64 32 17 ) special/clip [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -64 0 16 ) ( -64 0 17 ) ( -64 1 16 ) special/clip [ 0 1 0 0 ] [ 0 0 -1 0 ] 90 1 1
( -64 0 16 ) ( -64 0 17 ) ( -64 1 16 ) Manual/Black [ 0 1 0 0 ] [ 0 0 -1 0 ] 90 1 1
}
// brush 20
{
@ -273,7 +273,7 @@
( -120 -160 16 ) ( -119 -160 16 ) ( -120 -159 16 ) special/clip [ -1 0 0 -24 ] [ 0 -1 0 0 ] 180 1 1
( -88 -128 48 ) ( -88 -127 48 ) ( -87 -128 48 ) Manual/Black [ 1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
( -88 -96 48 ) ( -87 -96 48 ) ( -88 -96 49 ) Walls/wall_concrete_003 [ -1 0 0 -8 ] [ 0 0 -1 -16 ] 90 1 1
( -88 -128 48 ) ( -88 -128 49 ) ( -88 -127 48 ) Walls/wall_concrete_003 [ 0 1 0 0 ] [ 0 0 -1 -16 ] 180 1 1
( -88 -128 48 ) ( -88 -128 49 ) ( -88 -127 48 ) Manual/Black [ 0 1 0 0 ] [ 0 0 -1 -16 ] 180 1 1
}
// brush 30
{
@ -1008,10 +1008,10 @@
{
( -224 -256 16 ) ( -224 -255 16 ) ( -224 -256 17 ) special/clip [ 0 -1 0 0 ] [ 0 0 -1 0 ] 180 1 1
( -224 -256 16 ) ( -224 -256 17 ) ( -223 -256 16 ) special/clip [ 1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1
( -224 -256 16 ) ( -223 -256 16 ) ( -224 -255 16 ) special/clip [ -1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
( -224 -256 -16 ) ( -223 -256 -16 ) ( -224 -255 -16 ) special/clip [ -1 0 0 0 ] [ 0 -1 0 0 ] 90 1 1
( -192 -224 48 ) ( -192 -223 48 ) ( -191 -224 48 ) Manual/Black [ 1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
( -192 -128 48 ) ( -191 -128 48 ) ( -192 -128 49 ) Manual/Black [ -1 0 0 0 ] [ 0 0 -1 0 ] 180 1 1
( -192 -224 48 ) ( -192 -224 49 ) ( -192 -223 48 ) Walls/wall_concrete_003 [ 0 1 0 0 ] [ 0 0 -1 -16 ] 180 1 1
( -192 -224 48 ) ( -192 -224 49 ) ( -192 -223 48 ) Manual/Black [ 0 1 0 0 ] [ 0 0 -1 -16 ] 180 1 1
}
// brush 112
{
@ -1020,7 +1020,7 @@
( -96 -320 -16 ) ( -95 -320 -16 ) ( -96 -319 -16 ) special/clip [ -1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
( -64 -288 48 ) ( -64 -287 48 ) ( -63 -288 48 ) Manual/Black [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( -64 -256 48 ) ( -63 -256 48 ) ( -64 -256 49 ) Walls/Wall0 [ -1 0 0 0 ] [ 0 0 -1 -16 ] 0 1 1
( -192 -288 48 ) ( -192 -288 49 ) ( -192 -287 48 ) Walls/wall_concrete_003 [ 0 1 0 0 ] [ 0 0 -1 -16 ] 90 1 1
( -192 -288 48 ) ( -192 -288 49 ) ( -192 -287 48 ) Manual/Black [ 0 1 0 0 ] [ 0 0 -1 -16 ] 90 1 1
}
// brush 113
{
@ -1056,7 +1056,7 @@
( 8 -72 16 ) ( 9 -72 16 ) ( 8 -71 16 ) special/clip [ -1 0 0 8 ] [ 0 -1 0 -8 ] 270 1 1
( 40 -40 48 ) ( 40 -39 48 ) ( 41 -40 48 ) Manual/Black [ 1 0 0 0 ] [ 0 -1 0 0 ] 270 1 1
( 40 -96 48 ) ( 41 -96 48 ) ( 40 -96 49 ) Manual/Black [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 40 -40 48 ) ( 40 -40 49 ) ( 40 -39 48 ) Walls/wall_concrete_003 [ 0 1 0 8 ] [ 0 0 -1 -16 ] 270 1 1
( 40 -40 48 ) ( 40 -40 49 ) ( 40 -39 48 ) Manual/Black [ 0 1 0 8 ] [ 0 0 -1 -16 ] 270 1 1
}
// brush 117
{
@ -1193,6 +1193,33 @@
( 240 232 56 ) ( 241 232 56 ) ( 240 232 57 ) Manual/Black [ -1 0 0 0 ] [ 0 0 -1 0 ] 270 1 1
( 72 232 56 ) ( 72 232 57 ) ( 72 233 56 ) Manual/Black [ 0 1 0 24 ] [ 0 0 -1 0 ] 90 1 1
}
// brush 132
{
( -96 -104 48 ) ( -96 -103 48 ) ( -96 -104 49 ) special/clip [ 0 -1 0 0 ] [ 0 0 -1 0 ] 180 1 1
( -24 -104 48 ) ( -24 -104 49 ) ( -23 -104 48 ) special/clip [ 1 0 0 24 ] [ 0 0 -1 0 ] 270 1 1
( -24 -104 48 ) ( -23 -104 48 ) ( -24 -103 48 ) special/clip [ -1 0 0 -24 ] [ 0 -1 0 0 ] 270 1 1
( 200 -96 52 ) ( 200 -95 52 ) ( 201 -96 52 ) Manual/Black [ 1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
( 200 -96 56 ) ( 201 -96 56 ) ( 200 -96 57 ) Walls/WallTop_002 [ -1 0 0 0 ] [ 0 0 -1 0 ] 270 1 1
( -72 -96 56 ) ( -72 -96 57 ) ( -72 -95 56 ) special/clip [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
}
// brush 133
{
( -72 -104 48 ) ( -72 -103 48 ) ( -72 -104 49 ) special/clip [ 0 -1 0 0 ] [ 0 0 -1 0 ] 90 1 1
( 8 -104 48 ) ( 8 -104 49 ) ( 9 -104 48 ) special/clip [ 1 0 0 -8 ] [ 0 0 -1 0 ] 270 1 1
( 8 -104 48 ) ( 9 -104 48 ) ( 8 -103 48 ) special/clip [ -1 0 0 8 ] [ 0 -1 0 0 ] 270 1 1
( 232 -96 52 ) ( 232 -95 52 ) ( 233 -96 52 ) Manual/Black [ 1 0 0 0 ] [ 0 -1 0 0 ] 180 1 1
( 232 -96 56 ) ( 233 -96 56 ) ( 232 -96 57 ) Manual/Black [ -1 0 0 0 ] [ 0 0 -1 0 ] 270 1 1
( -40 -96 56 ) ( -40 -96 57 ) ( -40 -95 56 ) special/clip [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
}
// brush 134
{
( -72 -64 48 ) ( -72 -64 49 ) ( -72 -65 48 ) special/clip [ -1.0718754395722282e-15 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -64 -96 56 ) ( -64 -96 57 ) ( -63 -96 56 ) special/clip [ 1 -1.0718754395722282e-15 0 0 ] [ 0 0 -1 0 ] 270 1 1
( -72 -64 48 ) ( -72 -65 48 ) ( -71 -64 48 ) special/clip [ 1.0718754395722282e-15 1 0 0 ] [ -1 1.0718754395722282e-15 0 0 ] 270 1 1
( -64 -288 52 ) ( -63 -288 52 ) ( -64 -289 52 ) Manual/Black [ -1.0718754395722282e-15 -1 0 0 ] [ -1 1.0718754395722282e-15 0 0 ] 0 1 1
( -72 -40 48 ) ( -71 -40 48 ) ( -72 -40 49 ) Walls/WallTop_002 [ -1 1.0718754395722282e-15 0 0 ] [ 0 0 -1 0 ] 270 1 1
( -64 -288 56 ) ( -64 -289 56 ) ( -64 -288 57 ) Manual/Black [ 1.0718754395722282e-15 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 1
{
@ -1617,7 +1644,7 @@
// entity 71
{
"classname" "marker_spawn_item"
"origin" "-36 -116 22"
"origin" "-124 -28 22"
"resource_path" "res://Resources/Items/DARK_MACHINE_GUN_Item.tres"
}
// entity 72
@ -1661,3 +1688,51 @@
"classname" "actor_box_red"
"origin" "40 88 20"
}
// entity 80
{
"classname" "actor_vendingmachine"
"origin" "-56 -152 28"
}
// entity 81
{
"classname" "actor_terminal"
"origin" "-4 -188 28"
"angles" "0 90 0"
"custom_dialogue" "asdf"
}
// entity 82
{
"classname" "marker_spawn_item"
"origin" "-20 -100 22"
"resource_path" "res://Resources/Items/Money_Pickup.tres"
}
// entity 83
{
"classname" "marker_spawn_item"
"origin" "-20 -132 22"
"resource_path" "res://Resources/Items/Money_Pickup.tres"
}
// entity 84
{
"classname" "marker_spawn_item"
"origin" "-4 -124 22"
"resource_path" "res://Resources/Items/Money_Pickup.tres"
}
// entity 85
{
"classname" "marker_spawn_item"
"origin" "-20 -116 22"
"resource_path" "res://Resources/Items/Money_Pickup.tres"
}
// entity 86
{
"classname" "marker_spawn_item"
"origin" "12 -132 22"
"resource_path" "res://Resources/Items/Money_Pickup.tres"
}
// entity 87
{
"classname" "marker_spawn_item"
"origin" "-4 -140 22"
"resource_path" "res://Resources/Items/Money_Pickup.tres"
}

View file

@ -1,14 +1,24 @@
[gd_scene load_steps=3 format=3 uid="uid://bb2pjblwkb7ub"]
[gd_scene format=3 uid="uid://bb2pjblwkb7ub"]
[ext_resource type="PackedScene" uid="uid://cphr15gnmriw3" path="res://3D/BlockbenchModels/VendingMachine/VendingMachine.gltf" id="1_wtma2"]
[ext_resource type="Script" uid="uid://kt08ji546nms" path="res://Scripts/Actors/3D/VendingMachine3D.cs" id="2_script"]
[sub_resource type="BoxShape3D" id="BoxShape3D_hsg1w"]
size = Vector3(1.0528, 2.01202, 0.990539)
[node name="VendingMachine" type="StaticBody3D"]
[node name="VendingMachine" type="Area3D" unique_id=920711293 groups=["Interactable"]]
collision_layer = 32
collision_mask = 0
script = ExtResource("2_script")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=855169760]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0167541, 0.24654551, 0.00338751)
shape = SubResource("BoxShape3D_hsg1w")
[node name="blockbench_export" parent="." instance=ExtResource("1_wtma2")]
[node name="Body" type="StaticBody3D" parent="." unique_id=1920958687]
[node name="CollisionShape3D" type="CollisionShape3D" parent="Body" unique_id=1000054276]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0167541, 0.24654551, 0.00338751)
shape = SubResource("BoxShape3D_hsg1w")
[node name="blockbench_export" parent="." unique_id=1405020962 instance=ExtResource("1_wtma2")]

View file

@ -1,9 +1,10 @@
[gd_resource type="Resource" script_class="FuncGodotFGDModelPointClass" load_steps=5 format=3 uid="uid://bmfarpfcbbfa5"]
[gd_resource type="Resource" script_class="FuncGodotFGDModelPointClass" format=3 uid="uid://bmfarpfcbbfa5"]
[ext_resource type="Resource" uid="uid://5bc1qysixhmh" path="res://3D/TrenchBroom/EntityDefinitions/base/actor_base.tres" id="1_2x8yp"]
[ext_resource type="PackedScene" uid="uid://bb2pjblwkb7ub" path="res://3D/Scenes/Props/Vending_Machine_3D.tscn" id="2_2x8yp"]
[ext_resource type="Script" uid="uid://d1nwwgcrner8b" path="res://addons/func_godot/src/fgd/func_godot_fgd_point_class_display_descriptor.gd" id="2_8x313"]
[ext_resource type="Script" uid="uid://ldfqjtq0br35" path="res://addons/func_godot/src/fgd/func_godot_fgd_model_point_class.gd" id="3_2x8yp"]
[ext_resource type="Resource" uid="uid://dwc3j47cgj78j" path="res://3D/TrenchBroom/EntityDefinitions/base/requirement_key_base.tres" id="4_req"]
[resource]
script = ExtResource("3_2x8yp")
@ -13,7 +14,15 @@ scene_file = ExtResource("2_2x8yp")
apply_scale_on_map_build = false
classname = "actor_vendingmachine"
description = "Vending Machine"
base_classes = Array[Resource]([ExtResource("1_2x8yp")])
base_classes = Array[Resource]([ExtResource("1_2x8yp"), ExtResource("4_req")])
class_properties = Dictionary[String, Variant]({
"shop_definition_path": "",
"shop_ui_scene_path": ""
})
class_property_descriptions = Dictionary[String, Variant]({
"shop_definition_path": "Optional resource path or uid:// for a VendingShopDefinition. Leave blank to use the scene default.",
"shop_ui_scene_path": "Optional packed scene path or uid:// for the shop UI. Leave blank to use the scene default."
})
meta_properties = Dictionary[String, Variant]({
"model": "{\"path\": \"3D/MapModels/actor_vendingmachine.glb\", \"scale\": 16.0 }",
"size": AABB(-8, -8, -12, 8, 8, 12)