Door and forcefield in TB

This commit is contained in:
Marco 2025-06-25 16:52:31 +02:00
commit 52756defba
18 changed files with 880 additions and 628 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View file

@ -3862,6 +3862,30 @@
}
// entity 215
{
"classname" "actor_keypad"
"origin" "348 692 36"
"key" "BLUE_KEY"
"target" "door_secret_1"
}
// entity 216
{
"classname" "actor_door_1"
"origin" "304 732 32"
"targetname" "door_secret_1"
}
// entity 217
{
"classname" "actor_forcefield_1"
"origin" "344 720 32"
"targetname" "forcefield_1"
}
// entity 218
{
"classname" "actor_chest_1"
"origin" "264 712 24"
}
// entity 219
{
"classname" "func_group"
"_tb_type" "_tb_layer"
"_tb_name" "Computer Room"
@ -3940,37 +3964,37 @@
( 104 -200 60 ) ( 104 -200 61 ) ( 104 -199 60 ) Manual/Blue_Panel_Wall [ 0 1 0 -16 ] [ 0 0 -1 24 ] 0 1 1
}
}
// entity 216
// entity 220
{
"classname" "actor_table"
"origin" "48 -164 60"
"_tb_layer" "37"
}
// entity 217
// entity 221
{
"classname" "actor_terminal_big"
"origin" "8 -140 68"
"_tb_layer" "37"
}
// entity 218
// entity 222
{
"classname" "actor_terminal_big"
"origin" "8 -164 68"
"_tb_layer" "37"
}
// entity 219
// entity 223
{
"classname" "actor_mainframe"
"origin" "8 -184 68"
"_tb_layer" "37"
}
// entity 220
// entity 224
{
"classname" "actor_mainframe"
"origin" "8 -200 68"
"_tb_layer" "37"
}
// entity 221
// entity 225
{
"classname" "actor_terminal"
"origin" "48 -168 68"

View file

@ -24,4 +24,5 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00500488, 0.00234985, -0.0
shape = SubResource("BoxShape3D_7axon")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0)
mesh = SubResource("QuadMesh_hfile")

View file

@ -0,0 +1,33 @@
[gd_scene load_steps=6 format=3 uid="uid://bd12hm40bg5mt"]
[ext_resource type="Script" uid="uid://qxh76ahgexqa" path="res://Scripts/Interactables/Switch3D.cs" id="1_l7ayv"]
[ext_resource type="Texture2D" uid="uid://d24g1qb40t72l" path="res://Sprites/Button_Small.png" id="2_d7f2j"]
[ext_resource type="AudioStream" uid="uid://bjvklk7qmlivd" path="res://SFX/288963__littlerobotsoundfactory__click_electronic_14.wav" id="3_gv7k2"]
[ext_resource type="PackedScene" uid="uid://qs3vxatub5lc" path="res://3D/BlockbenchModels/Keypad/Key_Pad.gltf" id="4_l7ayv"]
[sub_resource type="SphereShape3D" id="SphereShape3D_itd0i"]
radius = 0.868968
[node name="KeyPad" type="Area3D" groups=["Interactable"]]
collision_layer = 32
collision_mask = 0
script = ExtResource("1_l7ayv")
metadata/_edit_group_ = true
[node name="Sprite3D" type="Sprite3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 0, 0)
visible = false
pixel_size = 0.1
texture_filter = 0
texture = ExtResource("2_d7f2j")
hframes = 4
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("SphereShape3D_itd0i")
[node name="ActivationSound" type="AudioStreamPlayer3D" parent="."]
visible = false
stream = ExtResource("3_gv7k2")
bus = &"Effects"
[node name="blockbench_export" parent="." instance=ExtResource("4_l7ayv")]

View file

@ -0,0 +1,29 @@
[gd_resource type="Resource" script_class="FuncGodotFGDBaseClass" load_steps=2 format=3 uid="uid://dwc3j47cgj78j"]
[ext_resource type="Script" uid="uid://6o4wbl0iau0v" path="res://addons/func_godot/src/fgd/func_godot_fgd_base_class.gd" id="1_tkd7e"]
[resource]
script = ExtResource("1_tkd7e")
classname = "Requirement_Key"
description = "Key Requirement"
func_godot_internal = false
base_classes = Array[Resource]([])
class_properties = {
"key": {
"BLUE_KEY": "BLUE_KEY",
"GENERIC_KEY": "GENERIC_KEY",
"GREEN_KEY": "GREEN_KEY",
"RED_KEY": "RED_KEY",
"YELLOW_KEY": "YELLOW_KEY"
}
}
class_property_descriptions = {
"key": "The key to use as requirement"
}
auto_apply_to_matching_node_properties = false
meta_properties = {
"color": Color(0.8, 0.8, 0.8, 1),
"size": AABB(-8, -8, -8, 8, 8, 8)
}
node_class = ""
name_property = ""

View file

@ -0,0 +1,32 @@
[gd_resource type="Resource" script_class="FuncGodotFGDModelPointClass" load_steps=5 format=3 uid="uid://vuuarep4h5w2"]
[ext_resource type="Resource" uid="uid://5bc1qysixhmh" path="res://3D/TrenchBroom/EntityDefinitions/base/actor_base.tres" id="1_3puc0"]
[ext_resource type="Resource" uid="uid://c1utxplehq2jl" path="res://3D/TrenchBroom/EntityDefinitions/base/targetname_base.tres" id="2_7csyq"]
[ext_resource type="PackedScene" uid="uid://c0262d4ffxx1w" path="res://3D/Scenes/Props/Door_Path_3D.tscn" id="3_7csyq"]
[ext_resource type="Script" uid="uid://dkmyelig23ub5" path="res://addons/func_godot/src/fgd/func_godot_fgd_model_point_class.gd" id="3_gqtxh"]
[resource]
script = ExtResource("3_gqtxh")
target_map_editor = 1
models_sub_folder = ""
scale_expression = ""
generate_size_property = false
rotation_offset = Vector3(0, 0, 0)
generate_gd_ignore_file = false
scene_file = ExtResource("3_7csyq")
apply_rotation_on_map_build = true
apply_scale_on_map_build = false
classname = "actor_door_1"
description = "Door Type 1"
func_godot_internal = false
base_classes = Array[Resource]([ExtResource("1_3puc0"), ExtResource("2_7csyq")])
class_properties = {}
class_property_descriptions = {}
auto_apply_to_matching_node_properties = false
meta_properties = {
"model": "\"3D/MapModels/actor_door_1.glb\"",
"size": AABB(-4, -16, -16, 4, 16, 16)
}
node_class = ""
name_property = ""
metadata/_custom_type_script = "uid://c83r7t467hm4m"

View file

@ -0,0 +1,32 @@
[gd_resource type="Resource" script_class="FuncGodotFGDModelPointClass" load_steps=5 format=3 uid="uid://cc881gocw0au4"]
[ext_resource type="Resource" uid="uid://5bc1qysixhmh" path="res://3D/TrenchBroom/EntityDefinitions/base/actor_base.tres" id="1_wufju"]
[ext_resource type="Resource" uid="uid://c1utxplehq2jl" path="res://3D/TrenchBroom/EntityDefinitions/base/targetname_base.tres" id="2_6wd32"]
[ext_resource type="PackedScene" uid="uid://dioiq4nb7kiet" path="res://3D/Scenes/Props/ForceField_3D.tscn" id="3_wufju"]
[ext_resource type="Script" uid="uid://dkmyelig23ub5" path="res://addons/func_godot/src/fgd/func_godot_fgd_model_point_class.gd" id="4_jvva7"]
[resource]
script = ExtResource("4_jvva7")
target_map_editor = 1
models_sub_folder = ""
scale_expression = ""
generate_size_property = false
rotation_offset = Vector3(0, 180, 0)
generate_gd_ignore_file = false
scene_file = ExtResource("3_wufju")
apply_rotation_on_map_build = true
apply_scale_on_map_build = false
classname = "actor_forcefield_1"
description = "Forcefield Type 1"
func_godot_internal = false
base_classes = Array[Resource]([ExtResource("1_wufju"), ExtResource("2_6wd32")])
class_properties = {}
class_property_descriptions = {}
auto_apply_to_matching_node_properties = false
meta_properties = {
"model": "\"3D/MapModels/actor_forcefield_1.glb\"",
"size": AABB(-4, -16, -16, 4, 16, 16)
}
node_class = ""
name_property = ""
metadata/_custom_type_script = "uid://c83r7t467hm4m"

View file

@ -6,7 +6,7 @@
[resource]
script = ExtResource("3_6p0lm")
target_map_editor = 0
target_map_editor = 1
models_sub_folder = ""
scale_expression = ""
generate_size_property = false
@ -23,9 +23,7 @@ class_properties = {}
class_property_descriptions = {}
auto_apply_to_matching_node_properties = false
meta_properties = {
"model": "\"3D/MapModels/Barrel3DModel.glb\"",
"size": AABB(-8, -8, -8, 8, 8, 8),
"studio": "\"3D/MapModels/actor_chest_1.glb\""
"size": AABB(-8, -8, -8, 8, 8, 8)
}
node_class = ""
name_property = ""

View file

@ -0,0 +1,32 @@
[gd_resource type="Resource" script_class="FuncGodotFGDModelPointClass" load_steps=6 format=3 uid="uid://1ew6u5xe3xhb"]
[ext_resource type="Resource" uid="uid://5bc1qysixhmh" path="res://3D/TrenchBroom/EntityDefinitions/base/actor_base.tres" id="1_ercjo"]
[ext_resource type="Resource" uid="uid://kerywjgft7vh" path="res://3D/TrenchBroom/EntityDefinitions/base/target_base.tres" id="2_wyj6h"]
[ext_resource type="Resource" uid="uid://dwc3j47cgj78j" path="res://3D/TrenchBroom/EntityDefinitions/base/requirement_key_base.tres" id="3_wyj6h"]
[ext_resource type="Script" uid="uid://dkmyelig23ub5" path="res://addons/func_godot/src/fgd/func_godot_fgd_model_point_class.gd" id="4_8crxf"]
[ext_resource type="PackedScene" uid="uid://bd12hm40bg5mt" path="res://3D/Scenes/Props/Key_Pad_3D.tscn" id="4_wyj6h"]
[resource]
script = ExtResource("4_8crxf")
target_map_editor = 1
models_sub_folder = ""
scale_expression = ""
generate_size_property = false
rotation_offset = Vector3(0, 180, 0)
generate_gd_ignore_file = false
scene_file = ExtResource("4_wyj6h")
apply_rotation_on_map_build = true
apply_scale_on_map_build = false
classname = "actor_keypad"
description = "Key Pad"
func_godot_internal = false
base_classes = Array[Resource]([ExtResource("1_ercjo"), ExtResource("2_wyj6h"), ExtResource("3_wyj6h")])
class_properties = {}
class_property_descriptions = {}
auto_apply_to_matching_node_properties = false
meta_properties = {
"size": AABB(-4, -4, -4, 4, 4, 4)
}
node_class = ""
name_property = ""
metadata/_custom_type_script = "uid://c83r7t467hm4m"

View file

@ -1,4 +1,4 @@
[gd_resource type="Resource" script_class="FuncGodotFGDFile" load_steps=10 format=3 uid="uid://onsfttdpojex"]
[gd_resource type="Resource" script_class="FuncGodotFGDFile" load_steps=11 format=3 uid="uid://onsfttdpojex"]
[ext_resource type="Resource" uid="uid://kerywjgft7vh" path="res://3D/TrenchBroom/EntityDefinitions/base/target_base.tres" id="1_abw2p"]
[ext_resource type="Script" uid="uid://cknmd0lgmorx2" path="res://addons/func_godot/src/fgd/func_godot_fgd_file.gd" id="1_p3xok"]
@ -9,6 +9,7 @@
[ext_resource type="Resource" uid="uid://bfjnt8q3l2p65" path="res://3D/TrenchBroom/EntityDefinitions/base/func_base.tres" id="6_1xsdl"]
[ext_resource type="Resource" uid="uid://ermxog0n4mvn" path="res://3D/TrenchBroom/EntityDefinitions/base/trigger_base.tres" id="7_2isdf"]
[ext_resource type="Resource" uid="uid://di5wnbv5icxtq" path="res://3D/TrenchBroom/EntityDefinitions/base/dialogue_base.tres" id="8_2isdf"]
[ext_resource type="Resource" uid="uid://dwc3j47cgj78j" path="res://3D/TrenchBroom/EntityDefinitions/base/requirement_key_base.tres" id="9_htav4"]
[resource]
script = ExtResource("1_p3xok")
@ -16,5 +17,5 @@ export_file = false
target_map_editor = 1
fgd_name = "FuncGodot"
base_fgd_files = Array[Resource]([])
entity_definitions = Array[Resource]([ExtResource("1_abw2p"), ExtResource("2_entxp"), ExtResource("1_wfoxw"), ExtResource("5_mkw5g"), ExtResource("2_abw2p"), ExtResource("6_1xsdl"), ExtResource("7_2isdf"), ExtResource("8_2isdf")])
entity_definitions = Array[Resource]([ExtResource("1_abw2p"), ExtResource("2_entxp"), ExtResource("1_wfoxw"), ExtResource("5_mkw5g"), ExtResource("2_abw2p"), ExtResource("6_1xsdl"), ExtResource("7_2isdf"), ExtResource("8_2isdf"), ExtResource("9_htav4")])
metadata/_custom_type_script = "uid://cknmd0lgmorx2"

View file

@ -1,4 +1,4 @@
[gd_resource type="Resource" script_class="FuncGodotFGDFile" load_steps=30 format=3 uid="uid://b700sa4be6dfa"]
[gd_resource type="Resource" script_class="FuncGodotFGDFile" load_steps=33 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"]
@ -29,6 +29,9 @@
[ext_resource type="Resource" uid="uid://clbpsv6t4qamd" path="res://3D/TrenchBroom/EntityDefinitions/point/actors/Actor_Furniture_Shelf.tres" id="26_v48k5"]
[ext_resource type="Resource" uid="uid://cdlo7qrub1bbd" path="res://3D/TrenchBroom/EntityDefinitions/point/actors/Actor_Furniture_Can.tres" id="27_ombvk"]
[ext_resource type="Resource" uid="uid://ocl6a6lorlxa" path="res://3D/TrenchBroom/EntityDefinitions/point/actors/Actor_Furniture_Box.tres" id="28_31lma"]
[ext_resource type="Resource" uid="uid://1ew6u5xe3xhb" path="res://3D/TrenchBroom/EntityDefinitions/point/actors/actor_keypad.tres" id="29_louv0"]
[ext_resource type="Resource" uid="uid://vuuarep4h5w2" path="res://3D/TrenchBroom/EntityDefinitions/point/actors/Actor_Door.tres" id="30_wfgfu"]
[ext_resource type="Resource" uid="uid://cc881gocw0au4" path="res://3D/TrenchBroom/EntityDefinitions/point/actors/Actor_Forcefield.tres" id="31_elv2e"]
[resource]
script = ExtResource("1_lykim")
@ -36,5 +39,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"), ExtResource("19_hvhb8"), ExtResource("20_3v5us"), ExtResource("21_g67cj"), ExtResource("22_iy67w"), ExtResource("23_b5lmu"), ExtResource("24_ndas4"), ExtResource("25_n7wsi"), ExtResource("26_v48k5"), ExtResource("27_ombvk"), ExtResource("28_31lma")])
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"), ExtResource("20_3v5us"), ExtResource("21_g67cj"), ExtResource("22_iy67w"), ExtResource("23_b5lmu"), ExtResource("24_ndas4"), ExtResource("25_n7wsi"), ExtResource("26_v48k5"), ExtResource("27_ombvk"), ExtResource("28_31lma"), ExtResource("29_louv0"), ExtResource("30_wfgfu"), ExtResource("31_elv2e")])
metadata/_custom_type_script = "uid://cknmd0lgmorx2"

View file

@ -1,17 +1,53 @@
using Cirno.Scripts.Misc;
using System.Linq;
using Cirno.Scripts.Misc;
using Cirno.Scripts.Resources;
using Godot;
using Godot.Collections;
namespace Cirno.Scripts.Interactables;
[Tool]
public partial class Interactable3D : Area3D, IInteractable
{
[Export] public Array<LootItem> Requirements = [];
[Export] public Array<StringName> RequirementKeys = [];
public virtual bool Activate(ActivationType activationType = ActivationType.Toggle)
{
return true;
return MeetsRequirements();
}
protected virtual bool MeetsRequirements()
{
if (Requirements.Count != 0)
{
if (InventoryManager.Instance.HasItems(Requirements.Select(x => x.ItemKey.ToString()).ToList()))
{
GD.Print($"Requirements for activation of {this.Name} successfully met: {string.Join(",", Requirements.Select(x => x.Item))} ");
return true;
}
else
{
GD.Print($"Requirements for activation of {this.Name} not met: {string.Join(",", Requirements.Select(x => x.Item))} ");
return false;
}
}
if (RequirementKeys.Count != 0)
{
if (InventoryManager.Instance.HasItems(RequirementKeys.Select(x => x.ToString()).ToList()))
{
GD.Print($"Requirements for activation of {this.Name} successfully met: {string.Join(",", RequirementKeys.Select(x => x))} ");
return true;
}
else
{
GD.Print($"Requirements for activation of {this.Name} not met: {string.Join(",", RequirementKeys.Select(x => x))} ");
return false;
}
}
return true;
}

View file

@ -29,6 +29,10 @@ public partial class Switch3D : Interactable3D
public void _func_godot_apply_properties(Dictionary<string, string> props)
{
TargetGroup = props["target"];
if (props.TryGetValue("key", out var prop))
{
RequirementKeys = [prop];
}
//TargetFunc = props["targetfunc"];
//TargetName = props["targetname"];
}

View file

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bvybqletsvqgk"
path="res://.godot/imported/BlueKeycard_Small.png-b925d0e80a2eaa9ef7fe1ee182ce6c65.ctex"
path.s3tc="res://.godot/imported/BlueKeycard_Small.png-b925d0e80a2eaa9ef7fe1ee182ce6c65.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://Sprites/Items/BlueKeycard_Small.png"
dest_files=["res://.godot/imported/BlueKeycard_Small.png-b925d0e80a2eaa9ef7fe1ee182ce6c65.ctex"]
dest_files=["res://.godot/imported/BlueKeycard_Small.png-b925d0e80a2eaa9ef7fe1ee182ce6c65.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
detect_3d/compress_to=0