diff --git a/ColdMint.Traveler.csproj b/ColdMint.Traveler.csproj
index 81e4509..8fddecf 100644
--- a/ColdMint.Traveler.csproj
+++ b/ColdMint.Traveler.csproj
@@ -7,4 +7,7 @@
ColdMint
enable
+
+
+
\ No newline at end of file
diff --git a/prefab/entitys/Character.tscn b/prefab/entitys/Character.tscn
index e1e4d59..84a2e99 100644
--- a/prefab/entitys/Character.tscn
+++ b/prefab/entitys/Character.tscn
@@ -34,6 +34,7 @@ shape = SubResource("CapsuleShape2D_bb8wt")
debug_color = Color(0.886275, 0, 0.803922, 0.419608)
[node name="Camera2D" type="Camera2D" parent="."]
+position_smoothing_enabled = true
[node name="Area2DPickingArea" type="Area2D" parent="."]
collision_layer = 0
diff --git a/prefab/entitys/DelivererOfDarkMagic.tscn b/prefab/entitys/DelivererOfDarkMagic.tscn
index 6c6d248..1588392 100644
--- a/prefab/entitys/DelivererOfDarkMagic.tscn
+++ b/prefab/entitys/DelivererOfDarkMagic.tscn
@@ -32,7 +32,7 @@ collision_layer = 64
collision_mask = 38
script = ExtResource("1_ubaid")
metadata/CampId = "Mazoku"
-metadata/MaxHp = 99999
+metadata/MaxHp = 50
metadata/Name = "死灵法师"
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
diff --git a/prefab/roomTemplates/dungeon/horizontalCorridorWithSewer.tscn b/prefab/roomTemplates/dungeon/horizontalCorridorWithSewer.tscn
index b57c429..dcc0c6b 100644
--- a/prefab/roomTemplates/dungeon/horizontalCorridorWithSewer.tscn
+++ b/prefab/roomTemplates/dungeon/horizontalCorridorWithSewer.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=6 format=3 uid="uid://dslr5tdbp4noq"]
+[gd_scene load_steps=5 format=3 uid="uid://dslr5tdbp4noq"]
[ext_resource type="TileSet" uid="uid://c4wpp12rr44hi" path="res://tileSets/dungeon.tres" id="1_rn2om"]
@@ -8,9 +8,6 @@ size = Vector2(508.75, 191)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_o85u0"]
size = Vector2(20, 48)
-[sub_resource type="RectangleShape2D" id="RectangleShape2D_30r3c"]
-size = Vector2(20, 46)
-
[sub_resource type="RectangleShape2D" id="RectangleShape2D_x4kt2"]
size = Vector2(46, 20)
@@ -42,12 +39,6 @@ shape = SubResource("RectangleShape2D_kiih8")
position = Vector2(17, 129)
shape = SubResource("RectangleShape2D_o85u0")
-[node name="Area2D2" type="Area2D" parent="RoomSlotList"]
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Area2D2"]
-position = Vector2(498, 128)
-shape = SubResource("RectangleShape2D_30r3c")
-
[node name="Area2D3" type="Area2D" parent="RoomSlotList"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="RoomSlotList/Area2D3"]
diff --git a/scenes/game.tscn b/scenes/game.tscn
index 3c2e326..5a000bd 100644
--- a/scenes/game.tscn
+++ b/scenes/game.tscn
@@ -1,9 +1,10 @@
-[gd_scene load_steps=5 format=3 uid="uid://bnftvkj2cido7"]
+[gd_scene load_steps=6 format=3 uid="uid://bnftvkj2cido7"]
[ext_resource type="Script" path="res://scripts/loader/sceneLoader/GameSceneLoader.cs" id="1_mqdgt"]
[ext_resource type="Texture2D" uid="uid://cs6e0af876ss5" path="res://sprites/ui/HeartEmpty.png" id="2_n1yht"]
[ext_resource type="Script" path="res://scripts/inventory/HotBar.cs" id="2_owrhq"]
[ext_resource type="Script" path="res://scripts/HealthBarUi.cs" id="2_xrm3v"]
+[ext_resource type="Script" path="res://scripts/FpsLabel.cs" id="5_dis4v"]
[node name="Game" type="Node2D"]
script = ExtResource("1_mqdgt")
@@ -55,6 +56,17 @@ bbcode_enabled = true
text = "OperationTip"
fit_content = true
+[node name="FPSLabel" type="Label" parent="CanvasLayer/Control"]
+layout_mode = 1
+anchors_preset = 1
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -40.0
+offset_bottom = 25.0
+grow_horizontal = 0
+horizontal_alignment = 2
+script = ExtResource("5_dis4v")
+
[node name="ProjectileContainer" type="Node2D" parent="."]
[node name="DamageNumberContainer" type="Node2D" parent="."]
diff --git a/scripts/FpsLabel.cs b/scripts/FpsLabel.cs
new file mode 100644
index 0000000..415aed1
--- /dev/null
+++ b/scripts/FpsLabel.cs
@@ -0,0 +1,56 @@
+using Godot;
+
+namespace ColdMint.scripts;
+
+///
+/// FPSLabel
+/// FPS标签
+///
+public partial class FpsLabel : Label
+{
+ bool _enable;
+ private LabelSettings? _labelSettings;
+
+ public override void _Ready()
+ {
+ Text = null;
+ if (Config.IsDebug())
+ {
+ _labelSettings = new LabelSettings();
+ LabelSettings = _labelSettings;
+ _enable = true;
+ }
+ }
+
+ public override void _Process(double delta)
+ {
+ if (!_enable)
+ {
+ return;
+ }
+
+ var fps = Engine.GetFramesPerSecond();
+ Text = "FPS:" + fps;
+ if (_labelSettings != null)
+ {
+ //Green above 54 frames (smooth)
+ //在54帧以上为绿色(流畅)
+ if (fps > 54)
+ {
+ _labelSettings.FontColor = Colors.Green;
+ }
+ else if (fps > 48)
+ {
+ //Yellow between 48 and 54 frames (Karting)
+ //在48到54帧之间为黄色(卡顿)
+ _labelSettings.FontColor = Colors.Yellow;
+ }
+ else
+ {
+ //Red below 48 frames (lag)
+ //在48帧以下为红色(卡)
+ _labelSettings.FontColor = Colors.Red;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/scripts/debug/LogCat.cs b/scripts/debug/LogCat.cs
index 37cac34..37a572e 100644
--- a/scripts/debug/LogCat.cs
+++ b/scripts/debug/LogCat.cs
@@ -58,8 +58,15 @@ public static class LogCat
GD.Print(string.Format(HandleMessage(message).ToString(), args));
}
- public static void LogError(Exception e)
+ ///
+ /// This method is called when an exception is caught
+ /// 当捕获异常后调用此方法
+ ///
+ ///
+ public static void WhenCaughtException(Exception e)
{
+ //Log an exception here or send it to the server.
+ //请在这里记录异常或将异常发送至服务器。
GD.PrintErr(HandleMessage(e.Message).Append('\n').Append(e.StackTrace));
}
}
\ No newline at end of file
diff --git a/scripts/loader/sceneLoader/GameSceneLoader.cs b/scripts/loader/sceneLoader/GameSceneLoader.cs
index d8745f7..d48f4f3 100644
--- a/scripts/loader/sceneLoader/GameSceneLoader.cs
+++ b/scripts/loader/sceneLoader/GameSceneLoader.cs
@@ -46,8 +46,8 @@ public partial class GameSceneLoader : SceneLoaderTemplate
new RoomTemplate("res://prefab/roomTemplates/dungeon/horizontalCorridorWithSewer.tscn");
var horizontalCorridor = new RoomTemplate("res://prefab/roomTemplates/dungeon/horizontalCorridor.tscn");
roomProvider.AddRoom(initialRoom);
- roomProvider.AddRoom(horizontalCorridor);
roomProvider.AddRoom(horizontalCorridorWithSewer);
+ roomProvider.AddRoom(horizontalCorridor);
roomProvider.AddRoom(utilityRoom);
_mapGenerator.RoomProvider = roomProvider;
diff --git a/scripts/map/MapGenerator.cs b/scripts/map/MapGenerator.cs
index 5e611bd..5994ee6 100644
--- a/scripts/map/MapGenerator.cs
+++ b/scripts/map/MapGenerator.cs
@@ -70,8 +70,7 @@ public class MapGenerator : IMapGenerator
}
catch (Exception e)
{
- LogCat.LogError(e);
- throw;
+ LogCat.WhenCaughtException(e);
}
}
diff --git a/scripts/map/MapGeneratorConfig.cs b/scripts/map/MapGeneratorConfig.cs
index f83bbec..e81be61 100644
--- a/scripts/map/MapGeneratorConfig.cs
+++ b/scripts/map/MapGeneratorConfig.cs
@@ -1,4 +1,5 @@
-using ColdMint.scripts.map.interfaces;
+using ColdMint.scripts.debug;
+using ColdMint.scripts.map.interfaces;
using Godot;
namespace ColdMint.scripts.map;
@@ -9,15 +10,21 @@ public class MapGeneratorConfig : IMapGeneratorConfig
/// At least how many rooms are generated
/// 至少生成多少个房间
///
- public const int MinCount = 15;
+ public const int MinRoomCount = 15;
///
/// Maximum number of rooms generated
/// 最多生成多少个房间
///
- public const int MaxCount = 30;
+ public const int MaxRoomCount = 30;
+
+
+ public const int MinBranchCount = 3;
+
+ public const int MaxBranchCount = 5;
private int _roomCount;
+ private int _branchCount;
public MapGeneratorConfig(Node2D mapRoot, ulong seed)
{
@@ -25,11 +32,14 @@ public class MapGeneratorConfig : IMapGeneratorConfig
Seed = seed;
RandomNumberGenerator = new RandomNumberGenerator();
RandomNumberGenerator.Seed = seed;
- _roomCount = RandomNumberGenerator.RandiRange(MinCount, MaxCount);
+ _roomCount = RandomNumberGenerator.RandiRange(MinRoomCount, MaxRoomCount);
+ _branchCount = RandomNumberGenerator.RandiRange(MinBranchCount, MaxBranchCount);
+ LogCat.Log("Seed:" + seed + " RoomCount:" + _roomCount);
}
public Node2D MapRoot { get; }
public int RoomCount => _roomCount;
+ public int BranchCount => _branchCount;
public ulong Seed { get; }
public RandomNumberGenerator RandomNumberGenerator { get; }
diff --git a/scripts/map/interfaces/IBranch.cs b/scripts/map/interfaces/IBranch.cs
new file mode 100644
index 0000000..715ed9a
--- /dev/null
+++ b/scripts/map/interfaces/IBranch.cs
@@ -0,0 +1,18 @@
+namespace ColdMint.scripts.map.interfaces;
+
+///
+/// Represents a branch on the map.
+/// 表示地图上的一个分支。
+///
+public interface IBranch
+{
+ ///
+ /// Master branch or not
+ /// 是否为主分支
+ ///
+ bool IsMasterBranch
+ {
+ get;
+ set;
+ }
+}
\ No newline at end of file
diff --git a/scripts/map/interfaces/IMapGeneratorConfig.cs b/scripts/map/interfaces/IMapGeneratorConfig.cs
index 548d448..6444f97 100644
--- a/scripts/map/interfaces/IMapGeneratorConfig.cs
+++ b/scripts/map/interfaces/IMapGeneratorConfig.cs
@@ -16,6 +16,12 @@ public interface IMapGeneratorConfig
///
int RoomCount { get; }
+ ///
+ /// The number of forks in this map
+ /// 这个地图的分叉数量
+ ///
+ int BranchCount { get; }
+
///
/// seed
/// 种子
diff --git a/scripts/map/interfaces/IRoomHolder.cs b/scripts/map/interfaces/IRoomHolder.cs
index 01e749c..1185876 100644
--- a/scripts/map/interfaces/IRoomHolder.cs
+++ b/scripts/map/interfaces/IRoomHolder.cs
@@ -1,5 +1,13 @@
namespace ColdMint.scripts.map.interfaces;
+///
+/// Room holder
+/// 房间持有者
+///
+///
+///This class holds all generated and placed rooms.
+///该类保存所有已生成且已放置的房间。
+///
public interface IRoomHolder
{
bool AddRoom(IRoom room);
diff --git a/scripts/map/interfaces/IRoomProvider.cs b/scripts/map/interfaces/IRoomProvider.cs
index e80a606..ec2b8f9 100644
--- a/scripts/map/interfaces/IRoomProvider.cs
+++ b/scripts/map/interfaces/IRoomProvider.cs
@@ -1,5 +1,13 @@
namespace ColdMint.scripts.map.interfaces;
+///
+/// Room provider
+/// 房间提供者
+///
+///
+///Responsible for providing room templates for map generator.
+///负责为地图生成器提供房间模板。
+///
public interface IRoomProvider
{
///