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

AutoMiningScript

【SpaceEngineer】全自动挖矿脚本

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Collections.Generic;
using System.Reflection;
using System.Runtime.Remoting;
using Sandbox.ModAPI.Ingame;
using VRageMath;
using Xunit;
using P=AutoMiningScript.Program;

namespace AutoMiningScript.Tests
{
    public class DockMotionWindowTests
    {
        static T Field<T>(object value,string name)
        {return (T)value.GetType().GetField(name,BindingFlags.Instance|BindingFlags.NonPublic).GetValue(value);}

        [Fact]
        public void ConnectorImpulseIsFilteredButSustainedAccelerationAndActualVelocityRemainVisible()
        {
            var r=new FleetStateTests.Rig(1,false);Vector3D velocity=Vector3D.Zero;
            var controller=Field<IMyShipController>(r.Fleet,"controller");
            ((Stub<IMyShipController>)RemotingServices.GetRealProxy(controller)).Method("GetShipVelocities",a=>new MyShipVelocities(velocity,Vector3D.Zero));
            var frames=Field<Dictionary<long,P.DockFrame>>(r.Fleet,"frames");
            r.Tick(2);Assert.True(frames[100].IsWindow(r.Program.Config,r.Program.Now));
            velocity=Vector3D.Right*.015;r.Tick(1);
            Assert.Equal(velocity,frames[100].PointVelocity(frames[100].Position));
            Assert.InRange(frames[100].Acceleration.Length(),.02,.04);
            Assert.True(frames[100].IsWindow(r.Program.Config,r.Program.Now));
            for(int n=0;n<5;n++){velocity+=Vector3D.Right*.05;r.Tick(1);}
            Assert.True(frames[100].Acceleration.Length()>.1);
            Assert.False(frames[100].IsWindow(r.Program.Config,r.Program.Now));
            velocity=Vector3D.Right*6;r.Tick(1);
            Assert.Equal(6,frames[100].PointVelocity(frames[100].Position).Length());
            Assert.False(frames[100].IsWindow(r.Program.Config,r.Program.Now));
        }
    }
}