Upgrade structure of code base

This commit is contained in:
h z
2024-07-03 12:20:08 +08:00
parent d382481cd4
commit 42e06a0d0c
82 changed files with 864 additions and 116 deletions

View File

@@ -0,0 +1,10 @@
using Nocturnis.DataStructures;
using Skeleton.DataStructure;
namespace Nocturnis.Enigmos.Ports.DataPorts.Directions;
public interface IDataInPort : IDataPort
{
DataCache GetData { get; }
new IDataOutPort? ConnectedPort { get; set; }
}

View File

@@ -0,0 +1,13 @@
using Nocturnis.DataStructures;
using Nocturnis.Enigmos.Modules;
using Nocturnis.Enigmos.Modules.ComputationalModules;
using Skeleton.DataStructure;
namespace Nocturnis.Enigmos.Ports.DataPorts.Directions;
public interface IDataOutPort : IDataPort
{
new IDataInPort? ConnectedPort { get; set; }
new IComputationalModule Module { get; set; }
DataCache OutData { get; set; }
}

View File

@@ -0,0 +1,6 @@
namespace Nocturnis.Enigmos.Ports.DataPorts;
public class EDataPort
{
}

View File

@@ -0,0 +1,10 @@
using Godot;
namespace Nocturnis.Enigmos.Ports.DataPorts;
public interface IDataPort : IBasePort
{
new IDataPort? ConnectedPort { get; set; }
StringName? DataType { get; set; }
void SetDataType(StringName type);
}

View File

@@ -0,0 +1,67 @@
using Godot;
using Nocturnis.Enigmos.Cables;
using Nocturnis.Inventories.Items.Items;
using VirtualChemistry.Chemistry.Mixtures.Implements;
namespace Nocturnis.Enigmos.Ports;
public static class EBasePort
{
public static void FixWith(this IBasePort p, IBaseChemicalItem c)
{
if (c.ContentMaterial.Amount == 0)
return;
HeterogeneousMixture material = c.ContentMaterial;
double s = 1; //material.LayerOrder.Last.Value.CayleyValue();
double u = 1;//material.LayerOrder.Last.Value.EuclidValue();
double usedAmount = Math.Min(1d, material.LayerOrder.Last.Value.Amount);
double dCond = usedAmount * (p.Module!.MaintenanceAlpha * s - p.Module.MaintenanceBeta * u);
double dQuality = usedAmount * (Math.Pow(p.Module.MaintenanceBeta, 2) * s - p.Module.MaintenanceAlpha * u);
c.ConsumeFromBottom(usedAmount);
p.Condition = Mathf.FloorToInt(Math.Max(0, Math.Min(100, p.Condition + dCond)));
p.Quality = Mathf.FloorToInt(Math.Max(0, Math.Min(20000, p.Quality + dQuality)));
}
public static void Connect(this IBasePort p)
{
if(p.Connected)
p.Disconnect();
if (p.Module!.Board!.ConnectPending == null)
{
p.SetStatusPending();
p.Module.Board.ConnectPending = p;
return;
}
if (p.Module.Board.ConnectPending.IsMatch(p))
{
p.ConnectedPort = p.Module.Board.ConnectPending;
p.Module.Board.ConnectPending.ConnectedPort = p;
IBaseCable cable = p.MakeCable(p.Module.Board.ConnectPending);
p.Module.Board.CablePairing[p] = cable;
p.Module.Board.CablePairing[p.Module.Board.ConnectPending] = cable;
p.Module.Board.AddCable(cable);
cable.LineUpdate();
p.SetStatusConnected();
p.Module.Board.ConnectPending.SetStatusConnected();
p.Module.Board.ConnectPending = null;
return;
}
p.Module.Board.ConnectPending.SetStatusNormal();
p.Module.Board.ConnectPending = null;
}
public static void Disconnect(this IBasePort p)
{
if (!p.Connected)
return;
IBaseCable cable = p.Module!.Board!.CablePairing[p];
p.Module.Board.CablePairing.Remove(p.ConnectedPort!);
p.Module.Board.FocusedCables.Remove(p.Module.Board.CablePairing[p]);
p.Module.Board.CablePairing.Remove(p);
cable.Free();
p.ConnectedPort!.SetStatusNormal();
p.ConnectedPort.ConnectedPort = null;
p.SetStatusNormal();
p.ConnectedPort = null;
}
}

View File

@@ -1,13 +1,13 @@
using Godot;
using Nocturnis.Enigmos.Cables;
using Nocturnis.Enigmos.Modules;
using Nocturnis.Inventories.Items.Items;
namespace Nocturnis.Enigmos.Ports;
public interface IBasePort
{
bool Connected { get; }
IBaseModule Module { get; set; }
IBaseModule? Module { get; set; }
bool IsMatch(IBasePort oth);
IBasePort? ConnectedPort { get; set; }
void SetStatusConnected();
@@ -16,5 +16,7 @@ public interface IBasePort
StringName Name { get; set; }
int Condition { get; set; }
int Quality { get; set; }
void FixWith(IBaseChemicalItem item);
}
//void FixWith(IBaseChemicalItem item);
void Init();
IBaseCable MakeCable(IBasePort port);
}

View File

@@ -1,9 +0,0 @@
using Nocturnis.DataStructures;
using Nocturnis.Enigmos.Modules;
namespace Nocturnis.Enigmos.Ports;
public interface IDataInPort : IDataPort
{
IDataPackage GetData(IRootModule root);
}

View File

@@ -1,8 +0,0 @@
using Nocturnis.DataStructures;
namespace Nocturnis.Enigmos.Ports;
public interface IDataOutPort : IDataPort
{
IDataPackage ResultData { get; set; }
}

View File

@@ -1,6 +0,0 @@
namespace Nocturnis.Enigmos.Ports;
public interface IDataPort : IBasePort
{
}

View File

@@ -1,6 +1,6 @@
using Nocturnis.Enigmos.Modules;
namespace Nocturnis.Enigmos.Ports;
namespace Nocturnis.Enigmos.Ports.SignalPorts.Directions;
public interface ISignalInPort : ISignalPort
{

View File

@@ -1,9 +1,11 @@
using Nocturnis.Enigmos.Modules;
namespace Nocturnis.Enigmos.Ports;
namespace Nocturnis.Enigmos.Ports.SignalPorts.Directions;
public interface ISignalOutPort : ISignalPort
{
new IControllingModule Module { get; set; }
new IRoutingModule Module { get; set; }
new ISignalInPort? ConnectedPort { get; set; }
void Route();
}

View File

@@ -1,4 +1,4 @@
namespace Nocturnis.Enigmos.Ports;
namespace Nocturnis.Enigmos.Ports.SignalPorts;
public interface ISignalPort : IBasePort
{