mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-01 08:55:35 +00:00
Locked Doors
This commit is contained in:
parent
e62b539a1e
commit
e25da0fe16
20 changed files with 318 additions and 61 deletions
25
Resources/Items/Generic_Keycard.tres
Normal file
25
Resources/Items/Generic_Keycard.tres
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
[gd_resource type="Resource" script_class="LootItem" load_steps=4 format=3 uid="uid://oa8s6xydriib"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://liwkh6rv1m41" path="res://Sprites/Items/GrayKeycard_Small.png" id="1_2nnia"]
|
||||
[ext_resource type="Script" uid="uid://epnwjptvks3t" path="res://Scripts/Resources/LootItem.cs" id="2_munhl"]
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_munhl"]
|
||||
atlas = ExtResource("1_2nnia")
|
||||
region = Rect2(0, 0, 16, 16)
|
||||
|
||||
[resource]
|
||||
script = ExtResource("2_munhl")
|
||||
ItemName = &"Generic Keycard"
|
||||
ShortName = null
|
||||
ItemDescription = &"Activates Gray KeyPads"
|
||||
ItemKey = &"GRAY_KEY"
|
||||
Item = 1
|
||||
Amount = 1
|
||||
Max = 99
|
||||
PickupIfMaxed = false
|
||||
ConsumeOnUse = true
|
||||
UiType = 1
|
||||
Selectable = false
|
||||
AutoPickup = false
|
||||
InventorySprite = SubResource("AtlasTexture_munhl")
|
||||
DropScenePath = &"res://Scenes/Items/Blue_Keycard.tscn"
|
||||
39
Resources/RogueliteMaps/Factory_Theme.tres
Normal file
39
Resources/RogueliteMaps/Factory_Theme.tres
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
[gd_resource type="Resource" script_class="RogueliteMapTheme" load_steps=27 format=3 uid="uid://cw6868vuvuynh"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bwtif3if3ea0u" path="res://Scripts/Resources/RogueliteMapTheme.cs" id="1_2rtdw"]
|
||||
[ext_resource type="PackedScene" uid="uid://db5dwj6nqo8fn" path="res://Scenes/Interactable/control_pad_gray_keycard.tscn" id="1_w43eq"]
|
||||
[ext_resource type="PackedScene" uid="uid://l84on3kv2s52" path="res://Scenes/Door_Horizontal.tscn" id="2_y7x1u"]
|
||||
[ext_resource type="PackedScene" uid="uid://bs6o3htusgyjl" path="res://Scenes/Door_Horizontal_Hidden.tscn" id="3_sdu6a"]
|
||||
[ext_resource type="PackedScene" uid="uid://mtn26qwp4yqy" path="res://Scenes/Items/Gray_Keycard.tscn" id="4_qjf5s"]
|
||||
[ext_resource type="PackedScene" uid="uid://bc64lr3vlwchq" path="res://Scenes/Door_Vertical.tscn" id="5_mt0fe"]
|
||||
[ext_resource type="Resource" uid="uid://b5x83li01qrav" path="res://Resources/RogueliteMaps/TestRGMap.tres" id="5_sludw"]
|
||||
[ext_resource type="Resource" uid="uid://ly8l7asedjpx" path="res://Resources/RogueliteMaps/TestRGMap2.tres" id="6_b3pjl"]
|
||||
[ext_resource type="Resource" uid="uid://dn3ai56rrxfnk" path="res://Resources/RogueliteMaps/Beginner1.tres" id="7_nil27"]
|
||||
[ext_resource type="Resource" uid="uid://cgac12krx7vbf" path="res://Resources/RogueliteMaps/Boss1.tres" id="8_pmfuo"]
|
||||
[ext_resource type="Resource" uid="uid://bv0mr43vcfrdh" path="res://Resources/RogueliteMaps/BigMap.tres" id="9_0lwa1"]
|
||||
[ext_resource type="Resource" uid="uid://ryfk7g1wqypk" path="res://Resources/RogueliteMaps/TestRGMapLong.tres" id="10_03ih2"]
|
||||
[ext_resource type="Resource" uid="uid://cjtcksew0qy6d" path="res://Resources/RogueliteMaps/TestRGMapLarge.tres" id="11_modrh"]
|
||||
[ext_resource type="Resource" uid="uid://cmgiqsmujujss" path="res://Resources/RogueliteMaps/TestMapLongX3.tres" id="12_exyjy"]
|
||||
[ext_resource type="Resource" uid="uid://n6nb5yco60gi" path="res://Resources/RogueliteMaps/BigLarge.tres" id="13_2j670"]
|
||||
[ext_resource type="Resource" uid="uid://do11fodskgasi" path="res://Resources/RogueliteMaps/RGTestRoom1.tres" id="14_rjphh"]
|
||||
[ext_resource type="Resource" uid="uid://cur433g6oevmd" path="res://Resources/RogueliteMaps/RGLongAcidWalk.tres" id="15_2gg5d"]
|
||||
[ext_resource type="Resource" uid="uid://cc53bb6th33hi" path="res://Resources/RogueliteMaps/RGHorizontal1x1.tres" id="16_402ix"]
|
||||
[ext_resource type="Resource" uid="uid://bew4cuec4pbms" path="res://Resources/RogueliteMaps/KeyRoom1.tres" id="17_52l5g"]
|
||||
[ext_resource type="Resource" uid="uid://cwtma7mxged8a" path="res://Resources/RogueliteMaps/ShopRoom1.tres" id="18_gh41q"]
|
||||
[ext_resource type="Resource" uid="uid://crqgvauqarfaq" path="res://Resources/RogueliteMaps/TreasureRoom1.tres" id="19_bn1n6"]
|
||||
[ext_resource type="Resource" uid="uid://bo4efv7rwowuh" path="res://Resources/RogueliteMaps/SecretRoom1.tres" id="20_0on7r"]
|
||||
[ext_resource type="Resource" uid="uid://cb7gk278lmicd" path="res://Resources/RogueliteMaps/Lab2x1_1.tres" id="21_m2nxl"]
|
||||
[ext_resource type="Resource" uid="uid://char0yv78vtty" path="res://Resources/RogueliteMaps/BigTest2.tres" id="22_ae3bb"]
|
||||
[ext_resource type="Resource" uid="uid://bxvv82vno8ub1" path="res://Resources/RogueliteMaps/1x1_1.tres" id="23_p3lfl"]
|
||||
[ext_resource type="Resource" uid="uid://d01146n5uo0gd" path="res://Resources/RogueliteMaps/1x2_1.tres" id="24_tsgja"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_2rtdw")
|
||||
HorizontalDoorPrefab = ExtResource("2_y7x1u")
|
||||
HorizontalWallPrefab = ExtResource("3_sdu6a")
|
||||
VerticalDoorPrefab = ExtResource("5_mt0fe")
|
||||
VerticalWallPrefab = ExtResource("5_mt0fe")
|
||||
DoorLockPrefab = ExtResource("1_w43eq")
|
||||
KeyCardPrefab = ExtResource("4_qjf5s")
|
||||
Rooms = Array[Object]([ExtResource("5_sludw"), ExtResource("6_b3pjl"), ExtResource("7_nil27"), ExtResource("8_pmfuo"), ExtResource("9_0lwa1"), ExtResource("10_03ih2"), ExtResource("11_modrh"), ExtResource("12_exyjy"), ExtResource("13_2j670"), ExtResource("14_rjphh"), ExtResource("15_2gg5d"), ExtResource("16_402ix"), ExtResource("17_52l5g"), ExtResource("18_gh41q"), ExtResource("19_bn1n6"), ExtResource("20_0on7r"), ExtResource("23_p3lfl"), ExtResource("24_tsgja"), ExtResource("21_m2nxl"), ExtResource("22_ae3bb")])
|
||||
metadata/_custom_type_script = "uid://bwtif3if3ea0u"
|
||||
52
Scenes/Interactable/control_pad_gray_keycard.tscn
Normal file
52
Scenes/Interactable/control_pad_gray_keycard.tscn
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
[gd_scene load_steps=10 format=3 uid="uid://db5dwj6nqo8fn"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://6n7duf35c52l" path="res://Scripts/Interactables/RogueliteDoorLock.cs" id="1_jm4yx"]
|
||||
[ext_resource type="Resource" uid="uid://oa8s6xydriib" path="res://Resources/Items/Generic_Keycard.tres" id="3_q2yjn"]
|
||||
[ext_resource type="Texture2D" uid="uid://c1hcyxn2og2kq" path="res://Sprites/Actors/Key_Reader.png" id="4_bkia3"]
|
||||
[ext_resource type="Texture2D" uid="uid://dsf7jj36mk0xp" path="res://Sprites/Actors/KeyReaderOverlay.png" id="5_smh4i"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_vvpve"]
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_1r0vh"]
|
||||
atlas = ExtResource("4_bkia3")
|
||||
region = Rect2(0, 0, 16, 16)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_vnkqd"]
|
||||
atlas = ExtResource("4_bkia3")
|
||||
region = Rect2(16, 0, 16, 16)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_330vc"]
|
||||
atlas = ExtResource("4_bkia3")
|
||||
region = Rect2(32, 0, 16, 16)
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_ck7ns"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_1r0vh")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_vnkqd")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_330vc")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[node name="KeycardReaderBlue" type="Area2D" groups=["Interactable"]]
|
||||
collision_layer = 4
|
||||
collision_mask = 2
|
||||
script = ExtResource("1_jm4yx")
|
||||
Requirements = [ExtResource("3_q2yjn")]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("CircleShape2D_vvpve")
|
||||
|
||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
|
||||
sprite_frames = SubResource("SpriteFrames_ck7ns")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="AnimatedSprite2D"]
|
||||
texture = ExtResource("5_smh4i")
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
[gd_scene load_steps=8 format=3 uid="uid://d0yes7huiyisw"]
|
||||
[gd_scene load_steps=7 format=3 uid="uid://d0yes7huiyisw"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://dxs3ks2ucaxl4" path="res://Scenes/Items/Red_Keycard.tscn" id="1_8f4hq"]
|
||||
[ext_resource type="Script" uid="uid://epnwjptvks3t" path="res://Scripts/Resources/LootItem.cs" id="2_as2n7"]
|
||||
[ext_resource type="Resource" uid="uid://cj5aa7btaw6q0" path="res://Resources/Items/Blue_Keycard.tres" id="2_woclw"]
|
||||
[ext_resource type="Texture2D" uid="uid://bvybqletsvqgk" path="res://Sprites/Items/BlueKeycard_Small.png" id="3_k20dr"]
|
||||
|
||||
|
|
@ -28,7 +27,7 @@ animations = [{
|
|||
}]
|
||||
|
||||
[node name="BlueKeycard" instance=ExtResource("1_8f4hq")]
|
||||
LootTable = Array[ExtResource("2_as2n7")]([ExtResource("2_woclw")])
|
||||
LootTable = [ExtResource("2_woclw")]
|
||||
|
||||
[node name="AnimatedSprite2D" parent="." index="1"]
|
||||
sprite_frames = SubResource("SpriteFrames_gbw5v")
|
||||
|
|
|
|||
35
Scenes/Items/Gray_Keycard.tscn
Normal file
35
Scenes/Items/Gray_Keycard.tscn
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[gd_scene load_steps=7 format=3 uid="uid://mtn26qwp4yqy"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://dxs3ks2ucaxl4" path="res://Scenes/Items/Red_Keycard.tscn" id="1_0bwjc"]
|
||||
[ext_resource type="Resource" uid="uid://oa8s6xydriib" path="res://Resources/Items/Generic_Keycard.tres" id="3_0bwjc"]
|
||||
[ext_resource type="Texture2D" uid="uid://bvybqletsvqgk" path="res://Sprites/Items/BlueKeycard_Small.png" id="4_7ohj7"]
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_kprwo"]
|
||||
atlas = ExtResource("4_7ohj7")
|
||||
region = Rect2(0, 0, 16, 16)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_kems3"]
|
||||
atlas = ExtResource("4_7ohj7")
|
||||
region = Rect2(16, 0, 16, 16)
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_gbw5v"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_kprwo")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_kems3")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[node name="GrayKeycard" instance=ExtResource("1_0bwjc")]
|
||||
LootTable = [ExtResource("3_0bwjc")]
|
||||
|
||||
[node name="AnimatedSprite2D" parent="." index="1"]
|
||||
sprite_frames = SubResource("SpriteFrames_gbw5v")
|
||||
frame = 0
|
||||
frame_progress = 0.0
|
||||
|
|
@ -1,36 +1,17 @@
|
|||
[gd_scene load_steps=32 format=3 uid="uid://bf1kqr3o6r6d4"]
|
||||
[gd_scene load_steps=13 format=3 uid="uid://bf1kqr3o6r6d4"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://doxmbokehw8ci" path="res://Scripts/GameManager.cs" id="1_wbqvu"]
|
||||
[ext_resource type="PackedScene" uid="uid://c4pr2707hbeph" path="res://Scenes/Actors/fsm_player.tscn" id="2_3fyis"]
|
||||
[ext_resource type="Resource" uid="uid://6ek4lmtuij4t" path="res://Resources/Maps/Roguelite.tres" id="2_k5t51"]
|
||||
[ext_resource type="Script" uid="uid://bt2qjgnf1wc2r" path="res://Scripts/Controllers/RogueliteRoomManager.cs" id="4_jtlua"]
|
||||
[ext_resource type="Resource" uid="uid://b5x83li01qrav" path="res://Resources/RogueliteMaps/TestRGMap.tres" id="5_gwtv6"]
|
||||
[ext_resource type="Resource" uid="uid://ryfk7g1wqypk" path="res://Resources/RogueliteMaps/TestRGMapLong.tres" id="5_pfafs"]
|
||||
[ext_resource type="Resource" uid="uid://ly8l7asedjpx" path="res://Resources/RogueliteMaps/TestRGMap2.tres" id="6_gwtv6"]
|
||||
[ext_resource type="Resource" uid="uid://dn3ai56rrxfnk" path="res://Resources/RogueliteMaps/Beginner1.tres" id="7_wbqvu"]
|
||||
[ext_resource type="Resource" uid="uid://cgac12krx7vbf" path="res://Resources/RogueliteMaps/Boss1.tres" id="8_3fyis"]
|
||||
[ext_resource type="Script" uid="uid://cfya7sndh7vy2" path="res://Scenes/CameraController.gd" id="8_y651a"]
|
||||
[ext_resource type="Resource" uid="uid://bv0mr43vcfrdh" path="res://Resources/RogueliteMaps/BigMap.tres" id="9_go1yg"]
|
||||
[ext_resource type="Script" uid="uid://c5nxsq3tyxcx6" path="res://Scripts/InventoryManager.cs" id="9_vhvs2"]
|
||||
[ext_resource type="PackedScene" uid="uid://dkwi1hu1bixoe" path="res://Scenes/HUD/HUD.tscn" id="10_6gk3e"]
|
||||
[ext_resource type="Script" uid="uid://bdshph801ac2i" path="res://Scenes/CameraTarget.gd" id="11_4gy5m"]
|
||||
[ext_resource type="Resource" uid="uid://cjtcksew0qy6d" path="res://Resources/RogueliteMaps/TestRGMapLarge.tres" id="11_68lig"]
|
||||
[ext_resource type="Resource" uid="uid://cmgiqsmujujss" path="res://Resources/RogueliteMaps/TestMapLongX3.tres" id="12_83bvc"]
|
||||
[ext_resource type="Script" uid="uid://cnkipcolyj61w" path="res://Scripts/AlarmManager.cs" id="12_eoca5"]
|
||||
[ext_resource type="PackedScene" uid="uid://b3tyacxxw88lx" path="res://Scenes/Utils/StreamPlayerWithName.tscn" id="13_4n7t6"]
|
||||
[ext_resource type="Resource" uid="uid://n6nb5yco60gi" path="res://Resources/RogueliteMaps/BigLarge.tres" id="13_y651a"]
|
||||
[ext_resource type="Resource" uid="uid://do11fodskgasi" path="res://Resources/RogueliteMaps/RGTestRoom1.tres" id="14_vhvs2"]
|
||||
[ext_resource type="Resource" uid="uid://cur433g6oevmd" path="res://Resources/RogueliteMaps/RGLongAcidWalk.tres" id="15_6gk3e"]
|
||||
[ext_resource type="Resource" uid="uid://cc53bb6th33hi" path="res://Resources/RogueliteMaps/RGHorizontal1x1.tres" id="16_4gy5m"]
|
||||
[ext_resource type="Script" uid="uid://3v6q0p5krqn7" path="res://Scripts/UI/Minimap.cs" id="16_pfafs"]
|
||||
[ext_resource type="Resource" uid="uid://bew4cuec4pbms" path="res://Resources/RogueliteMaps/KeyRoom1.tres" id="17_td7hx"]
|
||||
[ext_resource type="Resource" uid="uid://cwtma7mxged8a" path="res://Resources/RogueliteMaps/ShopRoom1.tres" id="18_2lxq3"]
|
||||
[ext_resource type="Resource" uid="uid://crqgvauqarfaq" path="res://Resources/RogueliteMaps/TreasureRoom1.tres" id="19_6ahuq"]
|
||||
[ext_resource type="Resource" uid="uid://bo4efv7rwowuh" path="res://Resources/RogueliteMaps/SecretRoom1.tres" id="20_xrp0h"]
|
||||
[ext_resource type="Resource" uid="uid://cb7gk278lmicd" path="res://Resources/RogueliteMaps/Lab2x1_1.tres" id="21_2lxq3"]
|
||||
[ext_resource type="Resource" uid="uid://char0yv78vtty" path="res://Resources/RogueliteMaps/BigTest2.tres" id="22_6ahuq"]
|
||||
[ext_resource type="Resource" uid="uid://bxvv82vno8ub1" path="res://Resources/RogueliteMaps/1x1_1.tres" id="23_xrp0h"]
|
||||
[ext_resource type="Resource" uid="uid://d01146n5uo0gd" path="res://Resources/RogueliteMaps/1x2_1.tres" id="24_e0fjr"]
|
||||
[ext_resource type="Resource" uid="uid://cw6868vuvuynh" path="res://Resources/RogueliteMaps/Factory_Theme.tres" id="25_7gtqx"]
|
||||
|
||||
[node name="GameScene" type="Node2D"]
|
||||
process_mode = 3
|
||||
|
|
@ -45,7 +26,7 @@ SpawnMarkers = Dictionary[int, NodePath]({
|
|||
process_mode = 1
|
||||
y_sort_enabled = true
|
||||
script = ExtResource("4_jtlua")
|
||||
Rooms = Array[Object]([ExtResource("5_gwtv6"), ExtResource("6_gwtv6"), ExtResource("7_wbqvu"), ExtResource("8_3fyis"), ExtResource("9_go1yg"), ExtResource("5_pfafs"), ExtResource("11_68lig"), ExtResource("12_83bvc"), ExtResource("13_y651a"), ExtResource("14_vhvs2"), ExtResource("15_6gk3e"), ExtResource("16_4gy5m"), ExtResource("17_td7hx"), ExtResource("18_2lxq3"), ExtResource("19_6ahuq"), ExtResource("20_xrp0h"), ExtResource("21_2lxq3"), ExtResource("22_6ahuq"), ExtResource("23_xrp0h"), ExtResource("24_e0fjr")])
|
||||
MapTheme = ExtResource("25_7gtqx")
|
||||
DungeonLength = 3
|
||||
MaxBranchLength = 2
|
||||
MaxKeys = 2
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
[gd_scene load_steps=10 format=4 uid="uid://cadjkf73yep12"]
|
||||
[gd_scene load_steps=8 format=4 uid="uid://cadjkf73yep12"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b2j00riayxkit" path="res://Scripts/Controllers/RogueliteRoom.cs" id="1_3j8r8"]
|
||||
[ext_resource type="Resource" uid="uid://bew4cuec4pbms" path="res://Resources/RogueliteMaps/KeyRoom1.tres" id="2_3j8r8"]
|
||||
[ext_resource type="PackedScene" uid="uid://l84on3kv2s52" path="res://Scenes/Door_Horizontal.tscn" id="3_t6hxp"]
|
||||
[ext_resource type="PackedScene" uid="uid://bc64lr3vlwchq" path="res://Scenes/Door_Vertical.tscn" id="4_3j8r8"]
|
||||
[ext_resource type="PackedScene" uid="uid://b0k2grrc8xp1l" path="res://Scenes/Props/BigTank.tscn" id="4_hfso4"]
|
||||
[ext_resource type="TileSet" uid="uid://6k28roiljylj" path="res://Tilesets/factory_tileset.tres" id="5_3o7os"]
|
||||
[ext_resource type="PackedScene" uid="uid://mtn26qwp4yqy" path="res://Scenes/Items/Gray_Keycard.tscn" id="5_7qdwd"]
|
||||
[ext_resource type="Script" uid="uid://krean0uywtms" path="res://Scripts/TilemapAvoidance.cs" id="6_sn1r1"]
|
||||
|
||||
[sub_resource type="NavigationPolygon" id="NavigationPolygon_rlq0q"]
|
||||
|
|
@ -22,9 +20,6 @@ size = Vector2(272, 85)
|
|||
process_mode = 1
|
||||
script = ExtResource("1_3j8r8")
|
||||
RoomResource = ExtResource("2_3j8r8")
|
||||
DoorPrefab = ExtResource("3_t6hxp")
|
||||
VerticalDoorPrefab = ExtResource("4_3j8r8")
|
||||
WallPrefab = ExtResource("4_hfso4")
|
||||
|
||||
[node name="Tilemaps" type="Node2D" parent="." groups=["navigation_polygon_source_geometry_group"]]
|
||||
|
||||
|
|
@ -50,6 +45,9 @@ metadata/_edit_lock_ = true
|
|||
[node name="Actors" type="Node2D" parent="Tilemaps"]
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="GrayKeycard" parent="Tilemaps/Actors" instance=ExtResource("5_7qdwd")]
|
||||
position = Vector2(159, 93)
|
||||
|
||||
[node name="EnemySpawners" type="Node2D" parent="."]
|
||||
|
||||
[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."]
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ public partial class ActivationProvider : Area2D
|
|||
_errorSound?.Play();
|
||||
return true;
|
||||
};
|
||||
bool success = selected.Activate();
|
||||
bool success = selected.Activate(ActivationType.Use);
|
||||
|
||||
if (success)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||
using System.Linq;
|
||||
using Cirno.Scripts.Components.FSM.Enemy;
|
||||
using Cirno.Scripts.Enums;
|
||||
using Cirno.Scripts.Interactables;
|
||||
using Cirno.Scripts.Resources;
|
||||
using Cirno.Scripts.Resources.Roguelite;
|
||||
using Godot;
|
||||
|
|
@ -14,6 +15,8 @@ namespace Cirno.Scripts.Controllers;
|
|||
public partial class RogueliteRoom : Node2D
|
||||
{
|
||||
[Export] public RogueliteRoomResource RoomResource { get; set; }
|
||||
|
||||
public RogueliteMapTheme MapTheme { get; set; }
|
||||
|
||||
public Vector2I GridPosition { get; set; } // Set by dungeon manager
|
||||
|
||||
|
|
@ -39,11 +42,6 @@ public partial class RogueliteRoom : Node2D
|
|||
};
|
||||
}
|
||||
|
||||
[Export] public PackedScene DoorPrefab { get; private set; }
|
||||
|
||||
[Export] public PackedScene VerticalDoorPrefab { get; private set; }
|
||||
[Export] public PackedScene WallPrefab { get; private set; }
|
||||
|
||||
private static readonly Godot.Collections.Dictionary<string, Vector2I> DirectionMap = new()
|
||||
{
|
||||
{ "North", new Vector2I(0, -1) },
|
||||
|
|
@ -157,14 +155,16 @@ public partial class RogueliteRoom : Node2D
|
|||
|
||||
var door = this.CreateChildOf<Door>(marker, marker.Direction switch
|
||||
{
|
||||
DoorDirections.North => DoorPrefab,
|
||||
DoorDirections.South => DoorPrefab,
|
||||
DoorDirections.East => VerticalDoorPrefab,
|
||||
DoorDirections.West => VerticalDoorPrefab,
|
||||
DoorDirections.North => MapTheme.HorizontalDoorPrefab,
|
||||
DoorDirections.South => MapTheme.HorizontalDoorPrefab,
|
||||
DoorDirections.East => MapTheme.VerticalDoorPrefab,
|
||||
DoorDirections.West => MapTheme.VerticalDoorPrefab,
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
}, marker.GlobalPosition);
|
||||
|
||||
door.State = DoorState.Closed;
|
||||
door.Close();
|
||||
|
||||
// door.State = DoorState.Closed;
|
||||
if (connected)
|
||||
{
|
||||
_doors.Add(door);
|
||||
|
|
@ -172,6 +172,21 @@ public partial class RogueliteRoom : Node2D
|
|||
if (doorEdge == connection.From)
|
||||
{
|
||||
connection.FromDoor = door;
|
||||
|
||||
// Spawn lock if locked
|
||||
if (connection.IsLocked)
|
||||
{
|
||||
var doorLock = door.CreateChild<RogueliteDoorLock>(MapTheme.DoorLockPrefab);
|
||||
|
||||
doorLock.Connection = connection;
|
||||
|
||||
doorLock.ZIndex += 2;
|
||||
|
||||
//doorLock.Targets.Add(door);
|
||||
//doorLock.Targets.Add(connection.ToDoor);
|
||||
doorLock.ActivationType = ActivationType.Open;
|
||||
}
|
||||
|
||||
}
|
||||
else if (doorEdge == connection.To)
|
||||
{
|
||||
|
|
@ -184,6 +199,9 @@ public partial class RogueliteRoom : Node2D
|
|||
}
|
||||
|
||||
_connections.Add(connection);
|
||||
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -229,8 +247,14 @@ public partial class RogueliteRoom : Node2D
|
|||
{
|
||||
foreach (var connection in _connections)
|
||||
{
|
||||
connection.FromDoor?.Open();
|
||||
connection.ToDoor?.Open();
|
||||
if(!connection.IsLocked)
|
||||
{
|
||||
connection.FromDoor?.Open();
|
||||
}
|
||||
if(!connection.IsLocked)
|
||||
{
|
||||
connection.ToDoor?.Open();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -238,8 +262,14 @@ public partial class RogueliteRoom : Node2D
|
|||
{
|
||||
foreach (var connection in _connections)
|
||||
{
|
||||
connection.FromDoor?.Close();
|
||||
connection.ToDoor?.Close();
|
||||
if(!connection.IsLocked)
|
||||
{
|
||||
connection.FromDoor?.Close();
|
||||
}
|
||||
if(!connection.IsLocked)
|
||||
{
|
||||
connection.ToDoor?.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Cirno.Scripts.Enums;
|
||||
using Cirno.Scripts.Resources;
|
||||
using Cirno.Scripts.Resources.Roguelite;
|
||||
using Cirno.Scripts.Utils;
|
||||
using Godot;
|
||||
|
|
@ -12,9 +13,9 @@ namespace Cirno.Scripts.Controllers;
|
|||
|
||||
public partial class RogueliteRoomManager : Node2D
|
||||
{
|
||||
[Export] public Array<RogueliteRoomResource> Rooms { get; set; }
|
||||
|
||||
[Export] public Node2D SceneContainer { get; set; }
|
||||
//[Export] public Array<RogueliteRoomResource> Rooms { get; set; }
|
||||
|
||||
[Export] public RogueliteMapTheme MapTheme { get; set; }
|
||||
|
||||
//private Godot.Collections.Dictionary<Vector2I, RogueliteRoomResource> _grid = new();
|
||||
private Godot.Collections.Dictionary<Vector2I, RogueliteRoom> _roomGrid = new();
|
||||
|
|
@ -69,8 +70,8 @@ public partial class RogueliteRoomManager : Node2D
|
|||
{
|
||||
for (int j = 0; j < 10; j++)
|
||||
{
|
||||
var roomIndex = GD.RandRange(0, Rooms.Count - 1);
|
||||
var room = Rooms[roomIndex];
|
||||
var roomIndex = GD.RandRange(0, MapTheme.Rooms.Count - 1);
|
||||
var room = MapTheme.Rooms[roomIndex];
|
||||
//SpawnRoom(room, origin + (room.Size * new Vector2(i, j) * tileSize));
|
||||
}
|
||||
}
|
||||
|
|
@ -78,15 +79,15 @@ public partial class RogueliteRoomManager : Node2D
|
|||
//CallDeferred(MethodName.RebakeNavigationDeferred);
|
||||
}
|
||||
|
||||
private IEnumerable<RogueliteRoomResource> StarterRooms => Rooms.Where(x => x.Type is RoomType.Starter);
|
||||
private IEnumerable<RogueliteRoomResource> StarterRooms => MapTheme.Rooms.Where(x => x.Type is RoomType.Starter);
|
||||
|
||||
private IEnumerable<RogueliteRoomResource> RegularRooms => Rooms.Where(x =>
|
||||
private IEnumerable<RogueliteRoomResource> RegularRooms => MapTheme.Rooms.Where(x =>
|
||||
x.Type is RoomType.Regular && x.HasDoors(DoorDirections.North | DoorDirections.South));
|
||||
|
||||
private IEnumerable<RogueliteRoomResource> OffshootRooms => Rooms.Where(x =>
|
||||
private IEnumerable<RogueliteRoomResource> OffshootRooms => MapTheme.Rooms.Where(x =>
|
||||
x.Type is RoomType.Regular && x.HasDoors(DoorDirections.East | DoorDirections.West));
|
||||
|
||||
private IEnumerable<RogueliteRoomResource> BossRooms => Rooms.Where(x => x.Type is RoomType.Boss);
|
||||
private IEnumerable<RogueliteRoomResource> BossRooms => MapTheme.Rooms.Where(x => x.Type is RoomType.Boss);
|
||||
|
||||
private List<RoomConnection> _connections = new();
|
||||
|
||||
|
|
@ -100,7 +101,7 @@ public partial class RogueliteRoomManager : Node2D
|
|||
}
|
||||
|
||||
Vector2I origin = Vector2I.Zero;
|
||||
var starterRoom = Rooms.Where(r => r.Type == RoomType.Starter).PickRandom();
|
||||
var starterRoom = MapTheme.Rooms.Where(r => r.Type == RoomType.Starter).PickRandom();
|
||||
SpawnRoom(starterRoom, origin, out var spawnedBeginRoom);
|
||||
|
||||
var randomRoomsList = RegularRooms.Shuffle(MaxRooms * 4).ToList();
|
||||
|
|
@ -372,7 +373,7 @@ public partial class RogueliteRoomManager : Node2D
|
|||
// Spawn final room
|
||||
// var finalRoomToSpawn = Rooms.Where(x => x.Type == offshootTypeToSpawn).PickRandom();
|
||||
|
||||
var spawnedFinalRoom = TrySpawnRoom(Rooms.Where(x => x.Type == offshootTypeToSpawn).ToList(),
|
||||
var spawnedFinalRoom = TrySpawnRoom(MapTheme.Rooms.Where(x => x.Type == offshootTypeToSpawn).ToList(),
|
||||
lastSpawnedOffshootRoom, direction);
|
||||
|
||||
if (spawnedFinalRoom is null)
|
||||
|
|
@ -406,6 +407,7 @@ public partial class RogueliteRoomManager : Node2D
|
|||
var roomScene = GD.Load<PackedScene>(room.ScenePath);
|
||||
var spawnedScene = this.CreateChild<RogueliteRoom>(roomScene, position);
|
||||
|
||||
spawnedScene.MapTheme = MapTheme;
|
||||
spawnedScene.GridPosition = gridPos;
|
||||
|
||||
spawnedScene.Name = room.RoomName.ToString().Replace(" ", "_");
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ public partial class Door : Activable
|
|||
|
||||
public virtual void Open()
|
||||
{
|
||||
if (State == DoorState.Open) return;
|
||||
// _animatedSprite.Play("Opening");
|
||||
State = DoorState.Open;
|
||||
CallDeferred(MethodName.DeferredDisableCollision, true);
|
||||
|
|
@ -55,6 +56,7 @@ public partial class Door : Activable
|
|||
|
||||
public virtual void Close()
|
||||
{
|
||||
if (State == DoorState.Closed) return;
|
||||
// _animatedSprite.Play("Closing");
|
||||
State = DoorState.Closed;
|
||||
CallDeferred(MethodName.DeferredDisableCollision, false);
|
||||
|
|
|
|||
24
Scripts/Interactables/RogueliteDoorLock.cs
Normal file
24
Scripts/Interactables/RogueliteDoorLock.cs
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
using Cirno.Scripts.Controllers;
|
||||
|
||||
namespace Cirno.Scripts.Interactables;
|
||||
|
||||
public partial class RogueliteDoorLock : Switch
|
||||
{
|
||||
public RoomConnection Connection { get; set; }
|
||||
|
||||
public override bool Activate(ActivationType activationType = ActivationType.Toggle)
|
||||
{
|
||||
base.Activate(activationType);
|
||||
|
||||
if (!MeetsRequirements()) return false;
|
||||
|
||||
Connection.FromDoor.Activate(activationType);
|
||||
Connection.ToDoor.Activate(activationType);
|
||||
|
||||
InventoryManager.Instance.RemoveItem("GRAY_KEY", 1);
|
||||
|
||||
this.QueueFree();
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
1
Scripts/Interactables/RogueliteDoorLock.cs.uid
Normal file
1
Scripts/Interactables/RogueliteDoorLock.cs.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://6n7duf35c52l
|
||||
|
|
@ -25,15 +25,25 @@ public partial class Switch : Interactable
|
|||
|
||||
public override bool Activate(ActivationType activationType = ActivationType.Toggle)
|
||||
{
|
||||
ActivationType activationTypeToUse;
|
||||
if (activationType is ActivationType.Use)
|
||||
{
|
||||
activationTypeToUse = ActivationType;
|
||||
}
|
||||
else
|
||||
{
|
||||
activationTypeToUse = activationType;
|
||||
}
|
||||
|
||||
if (!MeetsRequirements()) return false;
|
||||
_activationSound?.Play();
|
||||
|
||||
EmitSignal(SignalName.OnActivated, (int)activationType);
|
||||
EmitSignal(SignalName.OnActivated, (int)activationTypeToUse);
|
||||
|
||||
// Compatibility for old single system
|
||||
bool success = ActivateTarget(Target, activationType);
|
||||
bool success = ActivateTarget(Target, activationTypeToUse);
|
||||
|
||||
return Targets.Aggregate(success, (current, target) => ActivateTarget(target, activationType) | success);
|
||||
return Targets.Aggregate(success, (current, target) => ActivateTarget(target, activationTypeToUse) | success);
|
||||
}
|
||||
|
||||
private bool ActivateTarget(Node2D target, ActivationType activationType = ActivationType.Toggle)
|
||||
|
|
|
|||
18
Scripts/Resources/RogueliteMapTheme.cs
Normal file
18
Scripts/Resources/RogueliteMapTheme.cs
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
using Cirno.Scripts.Resources.Roguelite;
|
||||
using Godot;
|
||||
using Godot.Collections;
|
||||
|
||||
namespace Cirno.Scripts.Resources;
|
||||
|
||||
[GlobalClass]
|
||||
public partial class RogueliteMapTheme : Resource
|
||||
{
|
||||
[Export] public PackedScene HorizontalDoorPrefab { get; set; }
|
||||
[Export] public PackedScene HorizontalWallPrefab { get; set; }
|
||||
[Export] public PackedScene VerticalDoorPrefab { get; set; }
|
||||
[Export] public PackedScene VerticalWallPrefab { get; set; }
|
||||
[Export] public PackedScene DoorLockPrefab { get; set; }
|
||||
[Export] public PackedScene KeyCardPrefab { get; set; }
|
||||
|
||||
[Export] public Array<RogueliteRoomResource> Rooms { get; set; }
|
||||
}
|
||||
1
Scripts/Resources/RogueliteMapTheme.cs.uid
Normal file
1
Scripts/Resources/RogueliteMapTheme.cs.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://bwtif3if3ea0u
|
||||
BIN
Sprites/Items/GrayKeycard_Small.aseprite
(Stored with Git LFS)
Normal file
BIN
Sprites/Items/GrayKeycard_Small.aseprite
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Sprites/Items/GrayKeycard_Small.gif
Normal file
BIN
Sprites/Items/GrayKeycard_Small.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 263 B |
BIN
Sprites/Items/GrayKeycard_Small.png
(Stored with Git LFS)
Normal file
BIN
Sprites/Items/GrayKeycard_Small.png
(Stored with Git LFS)
Normal file
Binary file not shown.
34
Sprites/Items/GrayKeycard_Small.png.import
Normal file
34
Sprites/Items/GrayKeycard_Small.png.import
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://liwkh6rv1m41"
|
||||
path="res://.godot/imported/GrayKeycard_Small.png-78c37a83db89e8ab4ee0abe72365176d.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Sprites/Items/GrayKeycard_Small.png"
|
||||
dest_files=["res://.godot/imported/GrayKeycard_Small.png-78c37a83db89e8ab4ee0abe72365176d.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
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/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue