Files
DanhengServer-OpenSource/Common/Data/Config/FloorInfo.cs
Somebody e514af7678 Feature: Better Chess Rogue Room & Fix Bugs
- The room in chess rogue will be more
- Fix a res bug ( recommend to use Andy's res )
2024-07-07 17:15:21 +08:00

108 lines
3.4 KiB
C#

using EggLink.DanhengServer.Enums.Scene;
using EggLink.DanhengServer.Util;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace EggLink.DanhengServer.Data.Config
{
public class FloorInfo
{
public int FloorID { get; set; }
public int StartGroupIndex { get; set; }
public int StartAnchorID { get; set; }
public List<FloorGroupInfo> GroupInstanceList { get; set; } = [];
public List<FloorSavedValueInfo> SavedValues { get; set; } = [];
public List<FloorCustomValueInfo> CustomValues { get; set; } = [];
[JsonIgnore]
public bool Loaded = false;
[JsonIgnore]
public Dictionary<int, GroupInfo> Groups = [];
[JsonIgnore]
public Dictionary<int, PropInfo> CachedTeleports = [];
[JsonIgnore]
public List<PropInfo> UnlockedCheckpoints = [];
[JsonIgnore]
public int StartGroupID { get; set; }
public AnchorInfo? GetAnchorInfo(int groupId, int anchorId)
{
Groups.TryGetValue(groupId, out GroupInfo? group);
if (group == null) return null;
return group.AnchorList.Find(info => info.ID == anchorId);
}
public void OnLoad()
{
if (Loaded) return;
StartGroupID = GroupInstanceList[StartGroupIndex].ID;
// Cache anchors
foreach (var group in Groups.Values)
{
foreach (var prop in group.PropList)
{
// Check if prop can be teleported to
if (prop.AnchorID > 0)
{
// Put inside cached teleport list to send to client when they request map info
CachedTeleports.TryAdd(prop.MappingInfoID, prop);
UnlockedCheckpoints.Add(prop);
// Force prop to be in the unlocked state
prop.State = PropStateEnum.CheckPointEnable;
}
else if (!string.IsNullOrEmpty(prop.InitLevelGraph))
{
string json = prop.InitLevelGraph;
// Hacky way to setup prop triggers
if (json.Contains("Maze_GroupProp_OpenTreasure_WhenMonsterDie"))
{
//prop.Trigger = new TriggerOpenTreasureWhenMonsterDie(group.Id);
}
else if (json.Contains("Common_Console"))
{
//prop.CommonConsole = true;
}
// Clear for garbage collection
prop.ValueSource = null;
prop.InitLevelGraph = null;
}
}
}
Loaded = true;
}
}
public class FloorGroupInfo
{
public string GroupPath { get; set; } = "";
public bool IsDelete { get; set; }
public int ID { get; set; }
public string Name { get; set; } = "";
}
public class FloorSavedValueInfo
{
public int ID { get; set; }
public string Name { get; set; } = string.Empty;
public int DefaultValue { get; set; }
}
public class FloorCustomValueInfo
{
public int ID { get; set; }
public string Name { get; set; } = string.Empty;
public string DefaultValue { get; set; } = string.Empty;
}
}