XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

AutoMiningScript

【SpaceEngineer】全自动挖矿脚本

公开
关注 0 Fork 0 Star 0
UTF-8
using Sandbox.ModAPI.Ingame;
using VRageMath;
using Xunit;
using P=AutoMiningScript.Program;

namespace AutoMiningScript.Tests
{
    public class MinerDockReasonTests
    {
        [Theory]
        [InlineData("lane")]
        [InlineData("berth")]
        [InlineData("window")]
        public void FleetWaitingReasonIsVisibleUntilAFreshGrantStartsTheApproach(string kind)
        {
            var rig=new MinerStateTests.MinerRig();rig.PrepareDeparture("");
            rig.Connector.Set("Status",MyShipConnectorStatus.Unconnected);
            rig.State(P.FlightState.Holding);
            var problem=kind=="lane"?P.L.F(P.L.FleetLaneBlocked,"深空工业2号"):
                kind=="berth"?P.L.FleetNoFreeDock:P.L.FleetDockWindowWait;
            var dock=new P.DockFrame {BaseId=rig.Program.Config.BaseId,Owner=rig.Program.Config.Id,ConnectorId=51,GridId=50,
                WaitingLocal=new Vector3D(0,4,-80),Problem=problem};
            rig.Position=Vector3D.Transform(dock.WaitingLocal,dock.Predicted(rig.Program.Now));

            rig.Miner.Receive(new P.Packet {Kind="DOCKPOSE",From=rig.Program.Config.BaseId,Source=5000,Body=dock.ToIni()});
            rig.Miner.Tick(.1);

            Assert.Equal(P.FlightState.Holding,rig.StateNow);
            Assert.Contains(problem,Assert.Single(rig.Miner.GetTelemetry()).Reason);
            Assert.Contains(problem,rig.Miner.Diagnostics);
            Assert.DoesNotContain(P.L.MinerDockGrantMissing,rig.Miner.Diagnostics);

            rig.Program.Now+=.1;dock.Token="fresh-docking-lease";dock.Problem="";
            rig.Miner.Receive(new P.Packet {Kind="DOCK_GRANT",From=rig.Program.Config.BaseId,Source=5000,Body=dock.ToIni()});
            rig.Miner.Tick(.1);

            Assert.Equal(P.FlightState.DockAlign,rig.StateNow);
            Assert.DoesNotContain(problem,Assert.Single(rig.Miner.GetTelemetry()).Reason);
            Assert.DoesNotContain(problem,rig.Miner.Diagnostics);
            Assert.Contains(P.L.MinerDockOuterEntry,Assert.Single(rig.Miner.GetTelemetry()).Reason);
            Assert.Contains(P.L.F(P.L.MinerDockPermitDiagnostics,P.L.MinerDockGrantValid),rig.Miner.Diagnostics);
        }
    }
}