diff --git a/3D/MapModels/actor_controlpad.glb b/3D/MapModels/actor_controlpad.glb new file mode 100644 index 00000000..382327b6 Binary files /dev/null and b/3D/MapModels/actor_controlpad.glb differ diff --git a/3D/MapScenes/TestLevel.tscn b/3D/MapScenes/TestLevel.tscn index 1c2904e0..91d6c89e 100644 --- a/3D/MapScenes/TestLevel.tscn +++ b/3D/MapScenes/TestLevel.tscn @@ -2030,6 +2030,10 @@ shape = SubResource("ConvexPolygonShape3D_p8h87") transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 26, 1.125, 23.5) TargetName = &"actor_elevator_test" +[node name="entity_115_actor_controlpad" parent="FuncGodotMap" instance=ExtResource("35_c4mw0")] +transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 22.25, 1.75, 26.25) +TargetGroup = "actor_elevator_test" + [node name="Props" type="Node3D" parent="."] [node name="Mainframe3d" parent="Props" instance=ExtResource("16_u5cc4")] diff --git a/3D/Maps/Level1.map b/3D/Maps/Level1.map index 7783bf17..7e5f533b 100644 --- a/3D/Maps/Level1.map +++ b/3D/Maps/Level1.map @@ -1511,6 +1511,7 @@ // entity 1 { "classname" "wall_grille" +"targetname" "actor_elevator_test" // brush 0 { ( 348 168 16 ) ( 348 168 17 ) ( 348 167 16 ) special/clip [ 0 -1 0 -24 ] [ 0 0 1 -16 ] 180 1 -1 @@ -1524,6 +1525,7 @@ // entity 2 { "classname" "wall_grille" +"targetname" "actor_elevator_test" // brush 0 { ( 348 184 16 ) ( 348 184 17 ) ( 348 183 16 ) special/clip [ 0 -1 0 -8 ] [ 0 0 1 -16 ] 180 1 -1 @@ -1966,570 +1968,681 @@ { "classname" "light_omni" "origin" "248 456 40" +"targetname" "actor_elevator_test" } // entity 28 { "classname" "light_spot" "origin" "136 408 40" +"targetname" "actor_elevator_test" } // entity 29 { "classname" "light_omni" "origin" "312 232 40" +"targetname" "actor_elevator_test" } // entity 30 { "classname" "light_omni" "origin" "408 280 40" +"targetname" "actor_elevator_test" } // entity 31 { "classname" "light_omni" "origin" "408 168 40" +"targetname" "actor_elevator_test" } // entity 32 { "classname" "light_omni" "origin" "504 184 40" +"targetname" "actor_elevator_test" } // entity 33 { "classname" "light_omni" "origin" "376 104 40" +"targetname" "actor_elevator_test" } // entity 34 { "classname" "light_omni" "origin" "488 264 40" +"targetname" "actor_elevator_test" } // entity 35 { "classname" "light_omni" "origin" "488 328 40" +"targetname" "actor_elevator_test" } // entity 36 { "classname" "light_omni" "origin" "488 408 40" +"targetname" "actor_elevator_test" } // entity 37 { "classname" "actor_barrel_1" "origin" "184 504 24" +"targetname" "actor_elevator_test" } // entity 38 { "classname" "actor_barrel_1" "origin" "184 520 24" +"targetname" "actor_elevator_test" } // entity 39 { "classname" "actor_barrel_1" "origin" "184 536 24" +"targetname" "actor_elevator_test" } // entity 40 { "classname" "actor_barrel_1" "origin" "264 360 24" +"targetname" "actor_elevator_test" } // entity 41 { "classname" "actor_tank" "origin" "280 544 24" +"targetname" "actor_elevator_test" } // entity 42 { "classname" "actor_box_wood" "origin" "332 360 20" +"targetname" "actor_elevator_test" } // entity 43 { "classname" "actor_box_wood" "origin" "284 360 20" "angle" "90" +"targetname" "actor_elevator_test" } // entity 44 { "classname" "actor_tube_straight" "origin" "248 552 24" +"targetname" "actor_elevator_test" } // entity 45 { "classname" "actor_tube_straight" "origin" "248 536 24" +"targetname" "actor_elevator_test" } // entity 46 { "classname" "actor_tube_straight" "origin" "248 520 24" +"targetname" "actor_elevator_test" } // entity 47 { "classname" "actor_tube_straight" "origin" "248 504 24" +"targetname" "actor_elevator_test" } // entity 48 { "classname" "actor_tube_junction" "origin" "248 488 24" "angle" "90" +"targetname" "actor_elevator_test" } // entity 49 { "classname" "actor_tube_straight" "origin" "216 504 24" +"targetname" "actor_elevator_test" } // entity 50 { "classname" "actor_tube_straight" "origin" "216 520 24" +"targetname" "actor_elevator_test" } // entity 51 { "classname" "actor_tube_straight" "origin" "216 536 24" +"targetname" "actor_elevator_test" } // entity 52 { "classname" "actor_tube_straight" "origin" "216 552 24" +"targetname" "actor_elevator_test" } // entity 53 { "classname" "actor_tube_straight" "origin" "232 488 24" "angle" "270" +"targetname" "actor_elevator_test" } // entity 54 { "classname" "actor_tube_straight" "origin" "216 360 24" +"targetname" "actor_elevator_test" } // entity 55 { "classname" "actor_tube_straight" "origin" "216 376 24" +"targetname" "actor_elevator_test" } // entity 56 { "classname" "actor_tube_straight" "origin" "216 392 24" +"targetname" "actor_elevator_test" } // entity 57 { "classname" "actor_tube_straight" "origin" "216 408 24" +"targetname" "actor_elevator_test" } // entity 58 { "classname" "actor_tube_straight" "origin" "216 424 24" +"targetname" "actor_elevator_test" } // entity 59 { "classname" "actor_tube_straight" "origin" "232 440 24" "angle" "270" +"targetname" "actor_elevator_test" } // entity 60 { "classname" "actor_tube_junction" "origin" "280 488 24" "angle" "180" +"targetname" "actor_elevator_test" } // entity 61 { "classname" "actor_tube_straight" "origin" "280 472 24" +"targetname" "actor_elevator_test" } // entity 62 { "classname" "actor_tube_straight" "origin" "280 456 24" +"targetname" "actor_elevator_test" } // entity 63 { "classname" "actor_tube_straight" "origin" "280 440 24" +"targetname" "actor_elevator_test" } // entity 64 { "classname" "actor_tube_straight" "origin" "264 488 24" "angle" "270" +"targetname" "actor_elevator_test" } // entity 65 { "classname" "actor_box_red" "origin" "376 472 20" +"targetname" "actor_elevator_test" } // entity 66 { "classname" "actor_box_red" "origin" "376 488 20" +"targetname" "actor_elevator_test" } // entity 67 { "classname" "actor_box_red" "origin" "376 472 28" +"targetname" "actor_elevator_test" } // entity 68 { "classname" "actor_box_red" "origin" "376 488 28" +"targetname" "actor_elevator_test" } // entity 69 { "classname" "actor_box_red" "origin" "376 456 20" +"targetname" "actor_elevator_test" } // entity 70 { "classname" "actor_box_red" "origin" "328 440 20" +"targetname" "actor_elevator_test" } // entity 71 { "classname" "actor_box_red" "origin" "328 456 20" +"targetname" "actor_elevator_test" } // entity 72 { "classname" "actor_box_red" "origin" "328 488 20" +"targetname" "actor_elevator_test" } // entity 73 { "classname" "actor_box_red" "origin" "344 456 20" +"targetname" "actor_elevator_test" } // entity 74 { "classname" "actor_box_red" "origin" "344 440 20" +"targetname" "actor_elevator_test" } // entity 75 { "classname" "actor_box_red" "origin" "360 440 20" +"targetname" "actor_elevator_test" } // entity 76 { "classname" "actor_box_red" "origin" "360 456 20" +"targetname" "actor_elevator_test" } // entity 77 { "classname" "actor_box_red" "origin" "376 440 20" +"targetname" "actor_elevator_test" } // entity 78 { "classname" "actor_box_red" "origin" "392 448 20" "angle" "45" +"targetname" "actor_elevator_test" } // entity 79 { "classname" "actor_box_blue" "origin" "360 488 20" +"targetname" "actor_elevator_test" } // entity 80 { "classname" "actor_box_blue" "origin" "360 488 28" +"targetname" "actor_elevator_test" } // entity 81 { "classname" "actor_box_blue" "origin" "360 456 28" +"targetname" "actor_elevator_test" } // entity 82 { "classname" "actor_box_blue" "origin" "344 440 28" +"targetname" "actor_elevator_test" } // entity 83 { "classname" "actor_box_blue" "origin" "136 456 20" +"targetname" "actor_elevator_test" } // entity 84 { "classname" "actor_box_wood" "origin" "268 192 20" +"targetname" "actor_elevator_test" } // entity 85 { "classname" "actor_box_wood" "origin" "276 192 20" +"targetname" "actor_elevator_test" } // entity 86 { "classname" "actor_box_wood" "origin" "268 208 20" +"targetname" "actor_elevator_test" } // entity 87 { "classname" "actor_box_wood" "origin" "268 192 28" +"targetname" "actor_elevator_test" } // entity 88 { "classname" "actor_box_wood" "origin" "268 272 20" +"targetname" "actor_elevator_test" } // entity 89 { "classname" "actor_box_wood" "origin" "276 272 20" +"targetname" "actor_elevator_test" } // entity 90 { "classname" "actor_box_wood" "origin" "268 256 20" +"targetname" "actor_elevator_test" } // entity 91 { "classname" "actor_box_wood" "origin" "268 272 28" +"targetname" "actor_elevator_test" } // entity 92 { "classname" "actor_box_wood" "origin" "356 272 20" +"targetname" "actor_elevator_test" } // entity 93 { "classname" "actor_box_wood" "origin" "356 184 20" +"targetname" "actor_elevator_test" } // entity 94 { "classname" "actor_box_wood" "origin" "356 272 28" +"targetname" "actor_elevator_test" } // entity 95 { "classname" "actor_box_wood" "origin" "356 184 28" +"targetname" "actor_elevator_test" } // entity 96 { "classname" "actor_box_wood" "origin" "364 184 20" +"targetname" "actor_elevator_test" } // entity 97 { "classname" "actor_box_wood" "origin" "364 272 20" +"targetname" "actor_elevator_test" } // entity 98 { "classname" "actor_table" "origin" "272 232 20" +"targetname" "actor_elevator_test" } // entity 99 { "classname" "actor_box_blue" "origin" "336 192 20" +"targetname" "actor_elevator_test" } // entity 100 { "classname" "actor_box_red" "origin" "336 192 28" +"targetname" "actor_elevator_test" } // entity 101 { "classname" "actor_box_blue" "origin" "336 272 20" +"targetname" "actor_elevator_test" } // entity 102 { "classname" "actor_box_blue" "origin" "336 272 28" +"targetname" "actor_elevator_test" } // entity 103 { "classname" "actor_barrel_1" "origin" "248 360 24" +"targetname" "actor_elevator_test" } // entity 104 { "classname" "actor_barrel_1" "origin" "232 360 24" +"targetname" "actor_elevator_test" } // entity 105 { "classname" "actor_barrel_1" "origin" "232 360 32" +"targetname" "actor_elevator_test" } // entity 106 { "classname" "actor_tank" "origin" "432 544 24" +"targetname" "actor_elevator_test" } // entity 107 { "classname" "actor_ac_unit" "origin" "440 416 24" +"targetname" "actor_elevator_test" } // entity 108 { "classname" "actor_ac_unit" "origin" "440 360 24" "angle" "270" +"targetname" "actor_elevator_test" } // entity 109 { "classname" "actor_ac_unit" "origin" "168 552 24" "angle" "180" +"targetname" "actor_elevator_test" } // entity 110 { "classname" "actor_terminal" "origin" "272 232 28" +"targetname" "actor_elevator_test" } // entity 111 { "classname" "actor_ac_unit" "origin" "304 188 24" "angle" "270" +"targetname" "actor_elevator_test" } // entity 112 { "classname" "actor_tube_corner" "origin" "216 488 24" "angle" "270" +"targetname" "actor_elevator_test" } // entity 113 { "classname" "actor_tube_corner" "origin" "216 440 24" "angle" "180" +"targetname" "actor_elevator_test" } // entity 114 { "classname" "actor_box_green" "origin" "328 472 20" +"targetname" "actor_elevator_test" } // entity 115 { "classname" "actor_box_green" "origin" "344 472 20" +"targetname" "actor_elevator_test" } // entity 116 { "classname" "actor_box_yellow" "origin" "344 488 20" +"targetname" "actor_elevator_test" } // entity 117 { "classname" "actor_box_green" "origin" "328 488 28" +"targetname" "actor_elevator_test" } // entity 118 { "classname" "actor_box_yellow" "origin" "328 440 28" +"targetname" "actor_elevator_test" } // entity 119 { "classname" "actor_box_yellow" "origin" "360 472 20" +"targetname" "actor_elevator_test" } // entity 120 { "classname" "actor_capacitor" "origin" "528 136 28" +"targetname" "actor_elevator_test" } // entity 121 { "classname" "actor_capacitor" "origin" "496 136 28" +"targetname" "actor_elevator_test" } // entity 122 { "classname" "actor_box_green" "origin" "248 712 20" +"targetname" "actor_elevator_test" } // entity 123 { "classname" "actor_box_wood" "origin" "244 792 28" +"targetname" "actor_elevator_test" } // entity 124 { "classname" "actor_box_wood" "origin" "244 792 20" +"targetname" "actor_elevator_test" } // entity 125 { "classname" "actor_table" "origin" "248 732 20" +"targetname" "actor_elevator_test" } // entity 126 { "classname" "actor_box_green" "origin" "280 792 20" +"targetname" "actor_elevator_test" } // entity 127 { "classname" "actor_box_red" "origin" "296 784 20" +"targetname" "actor_elevator_test" } // entity 128 { "classname" "actor_box_blue" "origin" "312 760 20" +"targetname" "actor_elevator_test" } // entity 129 { "classname" "actor_box_yellow" "origin" "320 792 20" +"targetname" "actor_elevator_test" } // entity 130 { "classname" "actor_box_blue" "origin" "248 712 28" +"targetname" "actor_elevator_test" } // entity 131 { "classname" "actor_box_wood" "origin" "244 776 20" +"targetname" "actor_elevator_test" } // entity 132 { "classname" "actor_box_wood" "origin" "252 792 20" +"targetname" "actor_elevator_test" } // entity 133 { "classname" "actor_box_wood" "origin" "308 792 20" +"targetname" "actor_elevator_test" } // entity 134 { "classname" "actor_ac_unit" "origin" "284 708 24" "angle" "270" +"targetname" "actor_elevator_test" } // entity 135 { "classname" "actor_vendingmachine" "origin" "248 760 28" +"targetname" "actor_elevator_test" } // entity 136 { "classname" "actor_vendingmachine" "origin" "280 744 28" "angle" "270" +"targetname" "actor_elevator_test" } // entity 137 { "classname" "trigger_area" "target" "actor_elevator_test" +"targetname" "" // brush 0 { ( 360 352 16 ) ( 360 353 16 ) ( 360 352 17 ) special/clip [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 @@ -2546,3 +2659,10 @@ "origin" "376 416 18" "targetname" "actor_elevator_test" } +// entity 139 +{ +"classname" "actor_controlpad" +"origin" "420 356 28" +"targetname" "" +"target" "actor_elevator_test" +} diff --git a/3D/TrenchBroom/EntityDefinitions/point/actors/actor_controlpad.tres b/3D/TrenchBroom/EntityDefinitions/point/actors/actor_controlpad.tres index 4e581051..2fe88bff 100644 --- a/3D/TrenchBroom/EntityDefinitions/point/actors/actor_controlpad.tres +++ b/3D/TrenchBroom/EntityDefinitions/point/actors/actor_controlpad.tres @@ -1,7 +1,8 @@ -[gd_resource type="Resource" script_class="FuncGodotFGDModelPointClass" load_steps=4 format=3 uid="uid://ceio7tm5eopbb"] +[gd_resource type="Resource" script_class="FuncGodotFGDModelPointClass" load_steps=5 format=3 uid="uid://ceio7tm5eopbb"] [ext_resource type="Resource" uid="uid://5bc1qysixhmh" path="res://3D/TrenchBroom/EntityDefinitions/base/actor_base.tres" id="1_5ms1a"] [ext_resource type="PackedScene" uid="uid://du6hlcoq0iip4" path="res://3D/Scenes/Props/control_pad_3d.tscn" id="2_5ms1a"] +[ext_resource type="Resource" uid="uid://kerywjgft7vh" path="res://3D/TrenchBroom/EntityDefinitions/base/target_base.tres" id="2_65tcb"] [ext_resource type="Script" uid="uid://dkmyelig23ub5" path="res://addons/func_godot/src/fgd/func_godot_fgd_model_point_class.gd" id="3_y02cg"] [resource] @@ -14,15 +15,15 @@ generate_gd_ignore_file = false scene_file = ExtResource("2_5ms1a") apply_rotation_on_map_build = true apply_scale_on_map_build = false -classname = "actor_vendingmachine" -description = "Vending Machine" +classname = "actor_controlpad" +description = "Control Pad" func_godot_internal = false -base_classes = Array[Resource]([ExtResource("1_5ms1a")]) +base_classes = Array[Resource]([ExtResource("1_5ms1a"), ExtResource("2_65tcb")]) class_properties = {} class_property_descriptions = {} auto_apply_to_matching_node_properties = false meta_properties = { -"size": AABB(-8, -8, -12, 8, 8, 12), +"size": AABB(-4, -4, -4, 4, 4, 4), "studio": "\"3D/MapModels/actor_vendingmachine.glb\"" } node_class = "" diff --git a/3D/TrenchBroom/fgd_point.tres b/3D/TrenchBroom/fgd_point.tres index 9bce49d6..d8c03b8e 100644 --- a/3D/TrenchBroom/fgd_point.tres +++ b/3D/TrenchBroom/fgd_point.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="FuncGodotFGDFile" load_steps=20 format=3 uid="uid://b700sa4be6dfa"] +[gd_resource type="Resource" script_class="FuncGodotFGDFile" load_steps=21 format=3 uid="uid://b700sa4be6dfa"] [ext_resource type="Resource" uid="uid://ia1t5p4mhom3" path="res://3D/TrenchBroom/EntityDefinitions/point/lights/light_omni.tres" id="1_7vcj1"] [ext_resource type="Script" uid="uid://cknmd0lgmorx2" path="res://addons/func_godot/src/fgd/func_godot_fgd_file.gd" id="1_lykim"] @@ -19,6 +19,7 @@ [ext_resource type="Resource" uid="uid://41wnjh6ftght" path="res://3D/TrenchBroom/EntityDefinitions/point/actors/actor_box_green.tres" id="16_7h4of"] [ext_resource type="Resource" uid="uid://dj72os2jpdl4l" path="res://3D/TrenchBroom/EntityDefinitions/point/actors/actor_box_yellow.tres" id="17_m3sbm"] [ext_resource type="Resource" uid="uid://bmfarpfcbbfa5" path="res://3D/TrenchBroom/EntityDefinitions/point/actors/Actor_VendingMachine.tres" id="18_m3sbm"] +[ext_resource type="Resource" uid="uid://ceio7tm5eopbb" path="res://3D/TrenchBroom/EntityDefinitions/point/actors/actor_controlpad.tres" id="19_hvhb8"] [resource] script = ExtResource("1_lykim") @@ -26,5 +27,5 @@ export_file = false target_map_editor = 1 fgd_name = "FuncGodot" base_fgd_files = Array[Resource]([]) -entity_definitions = Array[Resource]([ExtResource("1_7vcj1"), ExtResource("2_u7uvb"), ExtResource("3_u7uvb"), ExtResource("4_1nmxk"), ExtResource("5_ljb2x"), ExtResource("6_seuvu"), ExtResource("7_fmwex"), ExtResource("8_c8m8m"), ExtResource("9_14sjf"), ExtResource("10_xik3w"), ExtResource("11_dgiqm"), ExtResource("12_1teik"), ExtResource("13_f0hti"), ExtResource("14_6ld6e"), ExtResource("15_g8j5j"), ExtResource("16_7h4of"), ExtResource("17_m3sbm"), ExtResource("18_m3sbm")]) +entity_definitions = Array[Resource]([ExtResource("1_7vcj1"), ExtResource("2_u7uvb"), ExtResource("3_u7uvb"), ExtResource("4_1nmxk"), ExtResource("5_ljb2x"), ExtResource("6_seuvu"), ExtResource("7_fmwex"), ExtResource("8_c8m8m"), ExtResource("9_14sjf"), ExtResource("10_xik3w"), ExtResource("11_dgiqm"), ExtResource("12_1teik"), ExtResource("13_f0hti"), ExtResource("14_6ld6e"), ExtResource("15_g8j5j"), ExtResource("16_7h4of"), ExtResource("17_m3sbm"), ExtResource("18_m3sbm"), ExtResource("19_hvhb8")]) metadata/_custom_type_script = "uid://cknmd0lgmorx2" diff --git a/Scripts/Interactables/Switch3D.cs b/Scripts/Interactables/Switch3D.cs index 78f2f576..360dc033 100644 --- a/Scripts/Interactables/Switch3D.cs +++ b/Scripts/Interactables/Switch3D.cs @@ -4,8 +4,10 @@ using Godot.Collections; namespace Cirno.Scripts.Interactables; +[Tool] public partial class Switch3D : Interactable3D { + [Export] public string TargetGroup { get; private set; } [Export] public Node Target { get; set; } [Export] public Array Targets { get; private set; } = []; [Export] public ActivationType ActivationType { get; set; } = ActivationType.Toggle; @@ -19,9 +21,18 @@ public partial class Switch3D : Interactable3D public override void _Ready() { + if (Engine.IsEditorHint()) return; + _activationSound = GetNodeOrNull(_activationSoundName); } + public void _func_godot_apply_properties(Dictionary props) + { + TargetGroup = props["target"]; + //TargetFunc = props["targetfunc"]; + //TargetName = props["targetname"]; + } + public override bool Activate(ActivationType activationType = ActivationType.Toggle) { var activationTypeToUse = activationType is ActivationType.Use ? ActivationType : activationType; @@ -34,6 +45,11 @@ public partial class Switch3D : Interactable3D // Compatibility for old single system bool success = ActivateTarget(Target, activationTypeToUse); + if (!string.IsNullOrWhiteSpace(TargetGroup)) + { + UseTargets(this, TargetGroup); + } + return Targets.Aggregate(success, (current, target) => ActivateTarget(target, activationTypeToUse) | success); } @@ -43,4 +59,20 @@ public partial class Switch3D : Interactable3D activable?.Activate(activationType); return true; } + + private void UseTargets(Node activator, string target) + { + GD.Print($"Trying to use targets called: {target}"); + var targetList = GetTree().GetNodesInGroup(target); + foreach (var t in targetList) + { + //string f; + GD.Print($"Trying to use {t.Name}"); + if (t is IActivable activable) + { + GD.Print($"Activating {t.Name}"); + activable.Toggle(); + } + } + } } \ No newline at end of file