First commit
This commit is contained in:
commit
1d890b728a
24 changed files with 1814 additions and 0 deletions
135
.gitignore
vendored
Normal file
135
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
|
||||
.vs
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.sln.docstates
|
||||
|
||||
# Build results
|
||||
|
||||
[Dd]ebug/
|
||||
[Rr]elease/
|
||||
x64/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_i.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.log
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.Publish.xml
|
||||
*.pubxml
|
||||
*.azurePubxml
|
||||
|
||||
# NuGet Packages Directory
|
||||
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
|
||||
packages/
|
||||
## TODO: If the tool you use requires repositories.config, also uncomment the next line
|
||||
!packages/repositories.config
|
||||
|
||||
# Windows Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Windows Store app package directory
|
||||
AppPackages/
|
||||
|
||||
# Others
|
||||
sql/
|
||||
*.Cache
|
||||
ClientBin/
|
||||
[Ss]tyle[Cc]op.*
|
||||
![Ss]tyle[Cc]op.targets
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.[Pp]ublish.xml
|
||||
|
||||
*.publishsettings
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file to a newer
|
||||
# Visual Studio version. Backup files are not needed, because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
|
||||
# SQL Server files
|
||||
App_Data/*.mdf
|
||||
App_Data/*.ldf
|
||||
|
||||
# =========================
|
||||
# Windows detritus
|
||||
# =========================
|
||||
|
||||
# Windows image file caches
|
||||
Thumbs.db
|
||||
ehthumbs.db
|
||||
|
||||
# Folder config file
|
||||
Desktop.ini
|
||||
|
||||
# Recycle Bin used on file shares
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# Mac desktop service store files
|
||||
.DS_Store
|
||||
|
||||
_NCrunch*
|
||||
59
AutoPilot/AutoPilot.csproj
Normal file
59
AutoPilot/AutoPilot.csproj
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{141E1804-F644-48F8-A3D8-BEFEEE66ECBA}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>IngameScript</RootNamespace>
|
||||
<AssemblyName>AutoPilot</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
<LangVersion>6</LangVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="netstandard" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<Import Project="MDK/MDK.options.props" />
|
||||
<Import Project="MDK/MDK.paths.props" Condition="exists('MDK/MDK.paths.props')" />
|
||||
<ItemGroup>
|
||||
<Compile Include="MDK\Bootstrapper.cs" />
|
||||
<AdditionalFiles Include="MDK\MDK.options.props">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</AdditionalFiles>
|
||||
<AdditionalFiles Include="MDK\MDK.paths.props">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</AdditionalFiles>
|
||||
<Compile Include="Program.cs" />
|
||||
<AdditionalFiles Include="Instructions.readme" />
|
||||
<AdditionalFiles Include="thumb.png" />
|
||||
<AdditionalFiles Include="MDK\whitelist.cache" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\SECommon\SECommon.projitems" Label="Shared" />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Target Name="AfterBuild">
|
||||
<Copy SourceFiles="MDK\MDK.options.props" DestinationFolder="$(TargetDir)\MDK" />
|
||||
<Copy SourceFiles="MDK\MDK.paths.props" DestinationFolder="$(TargetDir)\MDK" />
|
||||
</Target>
|
||||
</Project>
|
||||
27
AutoPilot/MDK/Bootstrapper.cs
Normal file
27
AutoPilot/MDK/Bootstrapper.cs
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
using Malware.MDKUtilities;
|
||||
|
||||
namespace IngameScript.MDK
|
||||
{
|
||||
public class TestBootstrapper
|
||||
{
|
||||
// All the files in this folder, as well as all files containing the file ".debug.", will be excluded
|
||||
// from the build process. You can use this to create utilites for testing your scripts directly in
|
||||
// Visual Studio.
|
||||
|
||||
static TestBootstrapper()
|
||||
{
|
||||
// Initialize the MDK utility framework
|
||||
MDKUtilityFramework.Load();
|
||||
}
|
||||
|
||||
public static void Main()
|
||||
{
|
||||
// In order for your program to actually run, you will need to provide a mockup of all the facilities
|
||||
// your script uses from the game, since they're not available outside of the game.
|
||||
|
||||
// Create and configure the desired program.
|
||||
var program = MDKFactory.CreateProgram<Program>();
|
||||
MDKFactory.Run(program);
|
||||
}
|
||||
}
|
||||
}
|
||||
18
AutoPilot/MDK/MDK.options.props
Normal file
18
AutoPilot/MDK/MDK.options.props
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<!--
|
||||
Contains basic settings that should be included in code repositories
|
||||
-->
|
||||
<MDKVersion>1.5.17</MDKVersion>
|
||||
<MDKTrimTypes>
|
||||
<Enabled>no</Enabled>
|
||||
</MDKTrimTypes>
|
||||
<MDKMinify>
|
||||
<Level>None</Level>
|
||||
</MDKMinify>
|
||||
<MDKIgnore>
|
||||
<Folder>mdk</Folder>
|
||||
</MDKIgnore>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
81
AutoPilot/MDK/MDK.paths.props
Normal file
81
AutoPilot/MDK/MDK.paths.props
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<!--
|
||||
You can safely exclude this file from code repositories and use different
|
||||
user settings per machine.
|
||||
-->
|
||||
<MDKVersion>1.5.17</MDKVersion>
|
||||
<MDKUseGameBinPath>no</MDKUseGameBinPath>
|
||||
<MDKGameBinPath>G:\SteamLibrary\SteamApps\common\SpaceEngineers\Bin64</MDKGameBinPath>
|
||||
<MDKInstallPath>c:\users\lyssmetal\appdata\local\microsoft\visualstudio\17.0_6c02a30d\extensions\bnnd2422.thc</MDKInstallPath>
|
||||
<MDKOutputPath>C:\Users\LyssMetal\AppData\Roaming\SpaceEngineers\IngameScripts\local</MDKOutputPath>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System.Collections.Immutable">
|
||||
<HintPath>$(MDKGameBinPath)\System.Collections.Immutable.dll</HintPath>
|
||||
<Private>false</Private>
|
||||
</Reference>
|
||||
<Reference Include="Sandbox.Common">
|
||||
<HintPath>$(MDKGameBinPath)\Sandbox.Common.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Sandbox.Game">
|
||||
<HintPath>$(MDKGameBinPath)\Sandbox.Game.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Sandbox.Graphics">
|
||||
<HintPath>$(MDKGameBinPath)\Sandbox.Graphics.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="SpaceEngineers.Game">
|
||||
<HintPath>$(MDKGameBinPath)\SpaceEngineers.Game.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="SpaceEngineers.ObjectBuilders">
|
||||
<HintPath>$(MDKGameBinPath)\SpaceEngineers.ObjectBuilders.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Audio">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Audio.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Game">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Game.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Input">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Input.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Library">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Library.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Math">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Math.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Render">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Render.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Render11">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Render11.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Scripting">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Scripting.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="MDKUtilities">
|
||||
<HintPath>$(MDKInstallPath)\MDKUtilities.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Analyzer Include="$(MDKInstallPath)\Analyzers\MDKAnalyzer.dll" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
283
AutoPilot/Program.cs
Normal file
283
AutoPilot/Program.cs
Normal file
|
|
@ -0,0 +1,283 @@
|
|||
/*
|
||||
* API index: https://github.com/malware-dev/MDK-SE/wiki/Api-Index
|
||||
* Vector transformation: https://github.com/malware-dev/MDK-SE/wiki/Vector-Transformations-with-World-Matrices
|
||||
* How to get rotation/position: https://forum.keenswh.com/threads/how-do-i-get-the-world-position-and-rotation-of-a-ship.7363867/
|
||||
*
|
||||
*/
|
||||
|
||||
using Sandbox.Game.EntityComponents;
|
||||
using Sandbox.ModAPI.Ingame;
|
||||
using Sandbox.ModAPI.Interfaces;
|
||||
|
||||
using SpaceEngineers.Game.ModAPI.Ingame;
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
using VRage;
|
||||
using VRage.Collections;
|
||||
using VRage.Game;
|
||||
using VRage.Game.Components;
|
||||
using VRage.Game.GUI.TextPanel;
|
||||
using VRage.Game.ModAPI.Ingame;
|
||||
using VRage.Game.ModAPI.Ingame.Utilities;
|
||||
using VRage.Game.ObjectBuilders.Definitions;
|
||||
|
||||
using VRageMath;
|
||||
using VRageMath.Spatial;
|
||||
|
||||
namespace IngameScript
|
||||
{
|
||||
partial class Program : MyGridProgram
|
||||
{
|
||||
const int CONSOLE_NB_LINES = 9;
|
||||
const float MAX_SPEED = 0.15f; // In rad per second.
|
||||
const int NB_OF_GYRO = 1000; // To limit the number of gyros set to overdrive.
|
||||
|
||||
enum State
|
||||
{
|
||||
NORMAL, // Normal state: Manual commands.
|
||||
AUTO_STABILIZATION,
|
||||
AUTO_DOCKING,
|
||||
}
|
||||
|
||||
State state = State.NORMAL;
|
||||
|
||||
readonly Output output;
|
||||
|
||||
IMyRemoteControl remoteController;
|
||||
IMyCubeGrid grid;
|
||||
readonly List<IMyGyro> gyros = new List<IMyGyro>();
|
||||
|
||||
IMyBroadcastListener connnectorMinerPositionListener;
|
||||
MatrixD connectorMinerPosition;
|
||||
|
||||
public Program()
|
||||
{
|
||||
this.grid = this.Me.CubeGrid;
|
||||
|
||||
var cockpits = new List<IMyCockpit>();
|
||||
this.GridTerminalSystem.GetBlocksOfType(cockpits);
|
||||
IMyCockpit cockpit = null;
|
||||
foreach (var c in cockpits)
|
||||
{
|
||||
if (c.CubeGrid == this.grid)
|
||||
{
|
||||
cockpit = c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (cockpit == null)
|
||||
{
|
||||
this.Echo("Can't find a cockpit");
|
||||
return;
|
||||
}
|
||||
|
||||
this.output = new Output(cockpit, CONSOLE_NB_LINES);
|
||||
|
||||
this.output.Print("Intializing navigation control...");
|
||||
|
||||
var remoteControls = new List<IMyRemoteControl>();
|
||||
this.GridTerminalSystem.GetBlocksOfType(remoteControls);
|
||||
foreach (var rc in remoteControls)
|
||||
{
|
||||
if (rc.CubeGrid == this.grid)
|
||||
{
|
||||
this.remoteController = rc;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
this.GridTerminalSystem.GetBlocksOfType(
|
||||
this.gyros,
|
||||
(IMyGyro gyro) => gyro.CubeGrid == this.grid
|
||||
);
|
||||
|
||||
if (this.remoteController == null)
|
||||
{
|
||||
this.output.Print("Can't find a remote controller");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
this.connnectorMinerPositionListener = this.IGC.RegisterBroadcastListener("POSITION_CONNECTOR_MINER");
|
||||
|
||||
/*
|
||||
var sensor = this.GridTerminalSystem.GetBlockWithName("Sensor") as IMySensorBlock;
|
||||
var entities = new List<MyDetectedEntityInfo>();
|
||||
sensor.DetectedEntities(entities);
|
||||
foreach (var entity in entities)
|
||||
{
|
||||
entity.
|
||||
this.output.Print(entity.Name);
|
||||
}*/
|
||||
|
||||
this.Runtime.UpdateFrequency = UpdateFrequency.Update10;
|
||||
|
||||
this.output.Print("Navigation control initializing complete");
|
||||
}
|
||||
|
||||
public void Save()
|
||||
{
|
||||
}
|
||||
|
||||
void UpdateStateAutoStabilization()
|
||||
{
|
||||
//var pos = this.remoteController.Position;
|
||||
var gravity = this.remoteController.GetNaturalGravity().Normalized();
|
||||
|
||||
if (!Vector3D.IsZero(gravity))
|
||||
{
|
||||
var worldMatrix = this.remoteController.WorldMatrix;
|
||||
var up = worldMatrix.Up;
|
||||
var forward = worldMatrix.Forward;
|
||||
var left = worldMatrix.Left;
|
||||
|
||||
//this.Print(gravity.ToString());
|
||||
//gravity.ToString();
|
||||
this.output.Display(
|
||||
$"Gravity: {gravity.ToString("f2")}\n" +
|
||||
$"Up: {up.ToString("f2")}\n" +
|
||||
$"Foward: {forward.ToString("f2")}\n" +
|
||||
$"Left: {left.ToString("f2")}\n",
|
||||
1
|
||||
);
|
||||
|
||||
var alpha = (float)Math.Asin(up.Dot(gravity));
|
||||
var beta = (float)Math.Asin(left.Dot(gravity));
|
||||
|
||||
this.output.Display(
|
||||
$"Alpha: {alpha}\n" +
|
||||
$"Beta: {beta}\n" +
|
||||
$"Is under control: {this.remoteController.IsUnderControl}",
|
||||
2
|
||||
);
|
||||
|
||||
for (int i = 0; i < NB_OF_GYRO && i < this.gyros.Count; i++)
|
||||
{
|
||||
var gyro = this.gyros[i];
|
||||
gyro.Pitch = MathHelper.Clamp(-alpha, -MAX_SPEED, MAX_SPEED);
|
||||
gyro.Roll = MathHelper.Clamp(beta, -MAX_SPEED, MAX_SPEED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateStateAutoDocking()
|
||||
{
|
||||
if (this.connnectorMinerPositionListener.HasPendingMessage)
|
||||
this.connectorMinerPosition = this.connnectorMinerPositionListener.AcceptMessage().As<MatrixD>();
|
||||
|
||||
if (this.connectorMinerPosition.IsValid())
|
||||
{
|
||||
this.output.Display($"Connector position:\n{this.connectorMinerPosition}", 3);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.output.Display($"NOPE", 3);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateState()
|
||||
{
|
||||
switch (this.state)
|
||||
{
|
||||
case State.AUTO_STABILIZATION:
|
||||
this.UpdateStateAutoStabilization();
|
||||
break;
|
||||
case State.AUTO_DOCKING:
|
||||
this.UpdateStateAutoDocking();
|
||||
break;
|
||||
case State.NORMAL:
|
||||
break; // Nothing.
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateStateMachine(State newState)
|
||||
{
|
||||
if (this.state == newState)
|
||||
return;
|
||||
|
||||
if (newState == State.NORMAL)
|
||||
{
|
||||
switch (this.state)
|
||||
{
|
||||
case State.AUTO_STABILIZATION:
|
||||
foreach (var gyro in this.gyros)
|
||||
gyro.GyroOverride = false;
|
||||
this.state = State.NORMAL;
|
||||
this.output.Print("Auto stabilization disabled");
|
||||
break;
|
||||
case State.AUTO_DOCKING:
|
||||
this.state = State.NORMAL;
|
||||
this.output.Print("Auto docking disabled");
|
||||
break;
|
||||
case State.NORMAL:
|
||||
break; // Nothing.
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.UpdateStateMachine(State.NORMAL);
|
||||
switch (newState)
|
||||
{
|
||||
case State.AUTO_STABILIZATION:
|
||||
for (int i = 0; i < NB_OF_GYRO && i < this.gyros.Count; i++)
|
||||
{
|
||||
var gyro = this.gyros[i];
|
||||
gyro.GyroOverride = true;
|
||||
gyro.Yaw = 0f;
|
||||
gyro.Pitch = 0f;
|
||||
gyro.Roll = 0f;
|
||||
}
|
||||
|
||||
this.state = State.AUTO_STABILIZATION;
|
||||
this.output.Print("Auto stabilization enabled");
|
||||
break;
|
||||
case State.AUTO_DOCKING:
|
||||
this.state = State.AUTO_DOCKING;
|
||||
this.output.Print("Auto docking enabled");
|
||||
break;
|
||||
case State.NORMAL:
|
||||
break; // Nothing.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Main(string argument, UpdateType updateSource)
|
||||
{
|
||||
if ((updateSource & UpdateType.Update10) != 0)
|
||||
{
|
||||
this.UpdateState();
|
||||
}
|
||||
else if ((updateSource & (UpdateType.Terminal | UpdateType.Trigger)) != 0)
|
||||
{
|
||||
switch (argument)
|
||||
{
|
||||
case "SWITCH_AUTO_STABILIZATION":
|
||||
if (this.state != State.AUTO_STABILIZATION)
|
||||
this.UpdateStateMachine(State.AUTO_STABILIZATION);
|
||||
else
|
||||
this.UpdateStateMachine(State.NORMAL);
|
||||
break;
|
||||
|
||||
case "SWITCH_AUTO_DOCKING":
|
||||
if (this.state != State.AUTO_DOCKING)
|
||||
this.UpdateStateMachine(State.AUTO_DOCKING);
|
||||
else
|
||||
this.UpdateStateMachine(State.NORMAL);
|
||||
break;
|
||||
|
||||
default:
|
||||
this.output.Print($"Uknown command: {argument}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
AutoPilot/thumb.png
Normal file
BIN
AutoPilot/thumb.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 385 KiB |
57
BaseMiner/BaseApp.csproj
Normal file
57
BaseMiner/BaseApp.csproj
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{22A83955-FE9B-4EBA-8980-D9DE01353C4C}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>IngameScript</RootNamespace>
|
||||
<AssemblyName>BaseApp</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
<LangVersion>6</LangVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="netstandard" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<Import Project="MDK/MDK.options.props" />
|
||||
<Import Project="MDK/MDK.paths.props" Condition="exists('MDK/MDK.paths.props')" />
|
||||
<ItemGroup>
|
||||
<Compile Include="MDK\Bootstrapper.cs" />
|
||||
<AdditionalFiles Include="MDK\MDK.options.props">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</AdditionalFiles>
|
||||
<AdditionalFiles Include="MDK\MDK.paths.props">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</AdditionalFiles>
|
||||
<Compile Include="Program.cs" />
|
||||
<AdditionalFiles Include="MDK\whitelist.cache" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\SECommon\SECommon.projitems" Label="Shared" />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Target Name="AfterBuild">
|
||||
<Copy SourceFiles="MDK\MDK.options.props" DestinationFolder="$(TargetDir)\MDK" />
|
||||
<Copy SourceFiles="MDK\MDK.paths.props" DestinationFolder="$(TargetDir)\MDK" />
|
||||
</Target>
|
||||
</Project>
|
||||
27
BaseMiner/MDK/Bootstrapper.cs
Normal file
27
BaseMiner/MDK/Bootstrapper.cs
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
using Malware.MDKUtilities;
|
||||
|
||||
namespace IngameScript.MDK
|
||||
{
|
||||
public class TestBootstrapper
|
||||
{
|
||||
// All the files in this folder, as well as all files containing the file ".debug.", will be excluded
|
||||
// from the build process. You can use this to create utilites for testing your scripts directly in
|
||||
// Visual Studio.
|
||||
|
||||
static TestBootstrapper()
|
||||
{
|
||||
// Initialize the MDK utility framework
|
||||
MDKUtilityFramework.Load();
|
||||
}
|
||||
|
||||
public static void Main()
|
||||
{
|
||||
// In order for your program to actually run, you will need to provide a mockup of all the facilities
|
||||
// your script uses from the game, since they're not available outside of the game.
|
||||
|
||||
// Create and configure the desired program.
|
||||
var program = MDKFactory.CreateProgram<Program>();
|
||||
MDKFactory.Run(program);
|
||||
}
|
||||
}
|
||||
}
|
||||
18
BaseMiner/MDK/MDK.options.props
Normal file
18
BaseMiner/MDK/MDK.options.props
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<!--
|
||||
Contains basic settings that should be included in code repositories
|
||||
-->
|
||||
<MDKVersion>1.5.17</MDKVersion>
|
||||
<MDKTrimTypes>
|
||||
<Enabled>no</Enabled>
|
||||
</MDKTrimTypes>
|
||||
<MDKMinify>
|
||||
<Level>None</Level>
|
||||
</MDKMinify>
|
||||
<MDKIgnore>
|
||||
<Folder>mdk</Folder>
|
||||
</MDKIgnore>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
81
BaseMiner/MDK/MDK.paths.props
Normal file
81
BaseMiner/MDK/MDK.paths.props
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<!--
|
||||
You can safely exclude this file from code repositories and use different
|
||||
user settings per machine.
|
||||
-->
|
||||
<MDKVersion>1.5.17</MDKVersion>
|
||||
<MDKUseGameBinPath>no</MDKUseGameBinPath>
|
||||
<MDKGameBinPath>G:\SteamLibrary\SteamApps\common\SpaceEngineers\Bin64</MDKGameBinPath>
|
||||
<MDKInstallPath>c:\users\lyssmetal\appdata\local\microsoft\visualstudio\17.0_6c02a30d\extensions\bnnd2422.thc</MDKInstallPath>
|
||||
<MDKOutputPath>C:\Users\LyssMetal\AppData\Roaming\SpaceEngineers\IngameScripts\local</MDKOutputPath>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System.Collections.Immutable">
|
||||
<HintPath>$(MDKGameBinPath)\System.Collections.Immutable.dll</HintPath>
|
||||
<Private>false</Private>
|
||||
</Reference>
|
||||
<Reference Include="Sandbox.Common">
|
||||
<HintPath>$(MDKGameBinPath)\Sandbox.Common.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Sandbox.Game">
|
||||
<HintPath>$(MDKGameBinPath)\Sandbox.Game.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Sandbox.Graphics">
|
||||
<HintPath>$(MDKGameBinPath)\Sandbox.Graphics.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="SpaceEngineers.Game">
|
||||
<HintPath>$(MDKGameBinPath)\SpaceEngineers.Game.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="SpaceEngineers.ObjectBuilders">
|
||||
<HintPath>$(MDKGameBinPath)\SpaceEngineers.ObjectBuilders.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Audio">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Audio.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Game">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Game.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Input">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Input.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Library">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Library.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Math">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Math.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Render">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Render.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Render11">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Render11.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Scripting">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Scripting.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="MDKUtilities">
|
||||
<HintPath>$(MDKInstallPath)\MDKUtilities.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Analyzer Include="$(MDKInstallPath)\Analyzers\MDKAnalyzer.dll" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
198
BaseMiner/Program.cs
Normal file
198
BaseMiner/Program.cs
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
using Sandbox.Game.EntityComponents;
|
||||
using Sandbox.ModAPI.Ingame;
|
||||
using Sandbox.ModAPI.Interfaces;
|
||||
|
||||
using SpaceEngineers.Game.ModAPI.Ingame;
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
using VRage;
|
||||
using VRage.Collections;
|
||||
using VRage.Game;
|
||||
using VRage.Game.Components;
|
||||
using VRage.Game.GUI.TextPanel;
|
||||
using VRage.Game.ModAPI.Ingame;
|
||||
using VRage.Game.ModAPI.Ingame.Utilities;
|
||||
using VRage.Game.ObjectBuilders.Definitions;
|
||||
|
||||
using VRageMath;
|
||||
|
||||
namespace IngameScript
|
||||
{
|
||||
partial class Program : MyGridProgram
|
||||
{
|
||||
const int CONSOLE_NB_LINES = 7;
|
||||
const string GRID_PREFIX = "[Base]";
|
||||
|
||||
const float PISTON_SPEED = 0.05f;
|
||||
enum State
|
||||
{
|
||||
NORMAL,
|
||||
MINING,
|
||||
STOPPING_MINING,
|
||||
}
|
||||
|
||||
const float EPSILON = 0.05f;
|
||||
|
||||
State currentState = State.NORMAL;
|
||||
|
||||
readonly Output output;
|
||||
|
||||
List<IMyExtendedPistonBase> pistons = new List<IMyExtendedPistonBase>();
|
||||
|
||||
IMyLandingGear magneticPlate;
|
||||
List<IMyShipDrill> drills = new List<IMyShipDrill>();
|
||||
|
||||
IMySoundBlock soundAlert;
|
||||
List<IMyLightingBlock> rotatingLights = new List<IMyLightingBlock>();
|
||||
|
||||
IMyShipConnector minerConnector;
|
||||
|
||||
public Program()
|
||||
{
|
||||
var output = this.Me.GetSurface(0);
|
||||
this.output = new Output(output, CONSOLE_NB_LINES);
|
||||
|
||||
this.output.Print("Base mining system starting...");
|
||||
|
||||
this.GridTerminalSystem.GetBlocksOfType(
|
||||
this.drills,
|
||||
(IMyShipDrill drill) => drill.CustomName.StartsWith(GRID_PREFIX)
|
||||
);
|
||||
|
||||
this.output.Print($"Nb of drills: {this.drills.Count}");
|
||||
|
||||
this.GridTerminalSystem.GetBlocksOfType(
|
||||
this.pistons,
|
||||
(IMyExtendedPistonBase piston) => piston.CustomName.StartsWith(GRID_PREFIX) && piston.CustomName.Contains("Miner")
|
||||
);
|
||||
|
||||
this.output.Print($"Nb of pistons: {this.pistons.Count}");
|
||||
|
||||
this.magneticPlate = this.GridTerminalSystem.GetBlockWithName("[Base] Magnetic Plate Miner") as IMyLandingGear;
|
||||
|
||||
this.soundAlert = this.GridTerminalSystem.GetBlockWithName("[Base] Sound Block Miner") as IMySoundBlock;
|
||||
if (this.soundAlert == null)
|
||||
this.output.Print($"Error: sound alert system not found");
|
||||
|
||||
this.GridTerminalSystem.GetBlocksOfType(
|
||||
this.rotatingLights,
|
||||
(IMyLightingBlock light) => light.CustomName.StartsWith(GRID_PREFIX) && light.CustomName.Contains("Miner")
|
||||
);
|
||||
|
||||
this.output.Print($"Nb of rotating lights: {this.rotatingLights.Count}");
|
||||
|
||||
this.minerConnector = this.GridTerminalSystem.GetBlockWithName("[Base] Connector Miner") as IMyShipConnector;
|
||||
if (this.minerConnector == null)
|
||||
this.output.Print($"Error: miner connector not found");
|
||||
|
||||
this.Runtime.UpdateFrequency = UpdateFrequency.Update100;
|
||||
|
||||
this.output.Print("base Mining system has started");
|
||||
}
|
||||
|
||||
public void Save()
|
||||
{
|
||||
}
|
||||
|
||||
void UpdateState()
|
||||
{
|
||||
if (this.currentState == State.STOPPING_MINING)
|
||||
{
|
||||
bool finished = true;
|
||||
|
||||
foreach (var d in this.drills)
|
||||
{
|
||||
d.Enabled = false;
|
||||
}
|
||||
|
||||
foreach (var p in this.pistons)
|
||||
{
|
||||
var distanceDocked = 0.0;
|
||||
|
||||
if (p.CustomName == "[Base] Piston Miner 02")
|
||||
distanceDocked = 0.1;
|
||||
|
||||
if (p.CurrentPosition > distanceDocked + EPSILON)
|
||||
{
|
||||
finished = false;
|
||||
p.Velocity = 5 * -PISTON_SPEED;
|
||||
}
|
||||
else
|
||||
{
|
||||
p.Velocity = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
if (finished)
|
||||
{
|
||||
foreach (var p in this.pistons)
|
||||
p.Enabled = false;
|
||||
|
||||
foreach (var l in this.rotatingLights)
|
||||
l.Enabled = false;
|
||||
|
||||
this.soundAlert.Stop();
|
||||
|
||||
this.output.Print("Drills parked, operation terminated");
|
||||
this.currentState = State.NORMAL;
|
||||
}
|
||||
}
|
||||
else if (this.currentState == State.MINING)
|
||||
{
|
||||
this.magneticPlate.Unlock();
|
||||
|
||||
foreach (var p in this.pistons)
|
||||
{
|
||||
p.Enabled = true;
|
||||
p.Velocity = PISTON_SPEED;
|
||||
}
|
||||
|
||||
foreach (var d in this.drills)
|
||||
{
|
||||
d.Enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Send miner connector position.
|
||||
this.IGC.SendBroadcastMessage("POSITION_CONNECTOR_MINER", this.minerConnector.WorldMatrix);
|
||||
}
|
||||
|
||||
public void Main(string argument, UpdateType updateSource)
|
||||
{
|
||||
if ((updateSource & UpdateType.Update100) != 0)
|
||||
{
|
||||
this.UpdateState();
|
||||
}
|
||||
else if ((updateSource & (UpdateType.Terminal | UpdateType.Trigger)) != 0)
|
||||
{
|
||||
switch (argument)
|
||||
{
|
||||
case "STOP_MINING":
|
||||
this.output.Print("Stopping mining...");
|
||||
this.currentState = State.STOPPING_MINING;
|
||||
break;
|
||||
|
||||
case "START_MINING":
|
||||
this.soundAlert.Play();
|
||||
foreach (var l in this.rotatingLights)
|
||||
l.Enabled = true;
|
||||
|
||||
this.output.Print("Mining in progress...");
|
||||
this.currentState = State.MINING;
|
||||
break;
|
||||
|
||||
default:
|
||||
this.output.Print($"Uknown command: {argument}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
5
MiningRover/Instructions.readme
Normal file
5
MiningRover/Instructions.readme
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
R e a d m e
|
||||
-----------
|
||||
|
||||
In this file you can include any instructions or other comments you want to have injected onto the
|
||||
top of your final script. You can safely delete this file if you do not want any such comments.
|
||||
27
MiningRover/MDK/Bootstrapper.cs
Normal file
27
MiningRover/MDK/Bootstrapper.cs
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
using Malware.MDKUtilities;
|
||||
|
||||
namespace IngameScript.MDK
|
||||
{
|
||||
public class TestBootstrapper
|
||||
{
|
||||
// All the files in this folder, as well as all files containing the file ".debug.", will be excluded
|
||||
// from the build process. You can use this to create utilites for testing your scripts directly in
|
||||
// Visual Studio.
|
||||
|
||||
static TestBootstrapper()
|
||||
{
|
||||
// Initialize the MDK utility framework
|
||||
MDKUtilityFramework.Load();
|
||||
}
|
||||
|
||||
public static void Main()
|
||||
{
|
||||
// In order for your program to actually run, you will need to provide a mockup of all the facilities
|
||||
// your script uses from the game, since they're not available outside of the game.
|
||||
|
||||
// Create and configure the desired program.
|
||||
var program = MDKFactory.CreateProgram<Program>();
|
||||
MDKFactory.Run(program);
|
||||
}
|
||||
}
|
||||
}
|
||||
18
MiningRover/MDK/MDK.options.props
Normal file
18
MiningRover/MDK/MDK.options.props
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<!--
|
||||
Contains basic settings that should be included in code repositories
|
||||
-->
|
||||
<MDKVersion>1.5.17</MDKVersion>
|
||||
<MDKTrimTypes>
|
||||
<Enabled>no</Enabled>
|
||||
</MDKTrimTypes>
|
||||
<MDKMinify>
|
||||
<Level>None</Level>
|
||||
</MDKMinify>
|
||||
<MDKIgnore>
|
||||
<Folder>mdk</Folder>
|
||||
</MDKIgnore>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
81
MiningRover/MDK/MDK.paths.props
Normal file
81
MiningRover/MDK/MDK.paths.props
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<!--
|
||||
You can safely exclude this file from code repositories and use different
|
||||
user settings per machine.
|
||||
-->
|
||||
<MDKVersion>1.5.17</MDKVersion>
|
||||
<MDKUseGameBinPath>no</MDKUseGameBinPath>
|
||||
<MDKGameBinPath>G:\SteamLibrary\SteamApps\common\SpaceEngineers\Bin64</MDKGameBinPath>
|
||||
<MDKInstallPath>c:\users\lyssmetal\appdata\local\microsoft\visualstudio\17.0_6c02a30d\extensions\bnnd2422.thc</MDKInstallPath>
|
||||
<MDKOutputPath>C:\Users\LyssMetal\AppData\Roaming\SpaceEngineers\IngameScripts\local</MDKOutputPath>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System.Collections.Immutable">
|
||||
<HintPath>$(MDKGameBinPath)\System.Collections.Immutable.dll</HintPath>
|
||||
<Private>false</Private>
|
||||
</Reference>
|
||||
<Reference Include="Sandbox.Common">
|
||||
<HintPath>$(MDKGameBinPath)\Sandbox.Common.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Sandbox.Game">
|
||||
<HintPath>$(MDKGameBinPath)\Sandbox.Game.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Sandbox.Graphics">
|
||||
<HintPath>$(MDKGameBinPath)\Sandbox.Graphics.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="SpaceEngineers.Game">
|
||||
<HintPath>$(MDKGameBinPath)\SpaceEngineers.Game.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="SpaceEngineers.ObjectBuilders">
|
||||
<HintPath>$(MDKGameBinPath)\SpaceEngineers.ObjectBuilders.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Audio">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Audio.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Game">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Game.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Input">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Input.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Library">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Library.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Math">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Math.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Render">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Render.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Render11">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Render11.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="VRage.Scripting">
|
||||
<HintPath>$(MDKGameBinPath)\VRage.Scripting.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="MDKUtilities">
|
||||
<HintPath>$(MDKInstallPath)\MDKUtilities.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Analyzer Include="$(MDKInstallPath)\Analyzers\MDKAnalyzer.dll" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
85
MiningRover/MiningRover.csproj
Normal file
85
MiningRover/MiningRover.csproj
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{DBCD62FE-F7AA-4A03-9241-0A4BE6952664}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>IngameScript</RootNamespace>
|
||||
<AssemblyName>MiningRover</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<TargetFrameworkProfile />
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
<Install>true</Install>
|
||||
<InstallFrom>Disk</InstallFrom>
|
||||
<UpdateEnabled>false</UpdateEnabled>
|
||||
<UpdateMode>Foreground</UpdateMode>
|
||||
<UpdateInterval>7</UpdateInterval>
|
||||
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||
<UpdatePeriodically>false</UpdatePeriodically>
|
||||
<UpdateRequired>false</UpdateRequired>
|
||||
<MapFileExtensions>true</MapFileExtensions>
|
||||
<ApplicationRevision>0</ApplicationRevision>
|
||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
<LangVersion>6</LangVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="netstandard" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<Import Project="MDK/MDK.options.props" />
|
||||
<Import Project="MDK/MDK.paths.props" Condition="exists('MDK/MDK.paths.props')" />
|
||||
<ItemGroup>
|
||||
<Compile Include="MDK\Bootstrapper.cs" />
|
||||
<AdditionalFiles Include="MDK\MDK.options.props">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</AdditionalFiles>
|
||||
<AdditionalFiles Include="MDK\MDK.paths.props">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</AdditionalFiles>
|
||||
<Compile Include="Program.cs" />
|
||||
<AdditionalFiles Include="Instructions.readme" />
|
||||
<AdditionalFiles Include="thumb.png" />
|
||||
<AdditionalFiles Include="MDK\whitelist.cache" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include=".NETFramework,Version=v4.8">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>Microsoft .NET Framework 4.8 %28x86 and x64%29</ProductName>
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Target Name="AfterBuild">
|
||||
<Copy SourceFiles="MDK\MDK.options.props" DestinationFolder="$(TargetDir)\MDK" />
|
||||
<Copy SourceFiles="MDK\MDK.paths.props" DestinationFolder="$(TargetDir)\MDK" />
|
||||
</Target>
|
||||
</Project>
|
||||
445
MiningRover/Program.cs
Normal file
445
MiningRover/Program.cs
Normal file
|
|
@ -0,0 +1,445 @@
|
|||
using Sandbox.Game.EntityComponents;
|
||||
using Sandbox.ModAPI.Ingame;
|
||||
using Sandbox.ModAPI.Interfaces;
|
||||
|
||||
using SpaceEngineers.Game.ModAPI.Ingame;
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
using VRage;
|
||||
using VRage.Collections;
|
||||
using VRage.Game;
|
||||
using VRage.Game.Components;
|
||||
using VRage.Game.GUI.TextPanel;
|
||||
using VRage.Game.ModAPI.Ingame;
|
||||
using VRage.Game.ModAPI.Ingame.Utilities;
|
||||
using VRage.Game.ObjectBuilders.Definitions;
|
||||
|
||||
using VRageMath;
|
||||
|
||||
namespace IngameScript
|
||||
{
|
||||
partial class Program : MyGridProgram
|
||||
{
|
||||
enum State
|
||||
{
|
||||
DEFAULT,
|
||||
PACKING,
|
||||
UNPACKING,
|
||||
}
|
||||
|
||||
const float EPSILON = 0.05f;
|
||||
const float EPSILON_RAD = (float)(Math.PI / 64);
|
||||
|
||||
State currentState = State.DEFAULT;
|
||||
|
||||
IMyMotorAdvancedStator rotor01;
|
||||
IMyMotorAdvancedStator rotor02;
|
||||
IMyMotorAdvancedStator hinge01;
|
||||
IMyMotorAdvancedStator hinge02;
|
||||
IMyMotorAdvancedStator hinge03;
|
||||
IMyExtendedPistonBase piston01;
|
||||
|
||||
List<IMyExtendedPistonBase> pistons = new List<IMyExtendedPistonBase>();
|
||||
List<string> pistonsNames = new List<string> { "Piston 02", "Piston 03", "Piston 04", "Piston 05", "Piston 06", "Piston 07", };
|
||||
|
||||
IMyLandingGear magneticPlateArm;
|
||||
IMyLandingGear lockPlate;
|
||||
IMyExtendedPistonBase lockPiston;
|
||||
|
||||
IMyTextSurface output;
|
||||
|
||||
public void Print(string text)
|
||||
{
|
||||
this.output.WriteText((this.output.GetText() != "" ? Environment.NewLine : "") + text, true);
|
||||
}
|
||||
|
||||
public void PrintError(string text)
|
||||
{
|
||||
this.Print($"Error: {text}");
|
||||
}
|
||||
|
||||
public Program()
|
||||
{
|
||||
this.output = this.Me.GetSurface(0);
|
||||
this.output.ContentType = ContentType.TEXT_AND_IMAGE;
|
||||
this.output.WriteText("");
|
||||
|
||||
this.Me.CustomData = "Packing";
|
||||
|
||||
this.Print("Mining rover system starting...");
|
||||
|
||||
var stators = new List<IMyMotorAdvancedStator>();
|
||||
GridTerminalSystem.GetBlocksOfType(stators);
|
||||
|
||||
foreach (var s in stators)
|
||||
{
|
||||
if (s.DisplayNameText.Contains("Rotor 01"))
|
||||
this.rotor01 = s;
|
||||
else if (s.DisplayNameText.Contains("Rotor 02"))
|
||||
this.rotor02 = s;
|
||||
else if (s.DisplayNameText.Contains("Hinge 01"))
|
||||
this.hinge01 = s;
|
||||
else if (s.DisplayNameText.Contains("Hinge 02"))
|
||||
this.hinge02 = s;
|
||||
else if (s.DisplayNameText.Contains("Hinge 03"))
|
||||
this.hinge03 = s;
|
||||
}
|
||||
|
||||
var pistons = new List<IMyExtendedPistonBase>();
|
||||
GridTerminalSystem.GetBlocksOfType(pistons);
|
||||
|
||||
foreach (var p in pistons)
|
||||
{
|
||||
if (p.DisplayNameText.Contains("Piston 01"))
|
||||
{
|
||||
this.piston01 = p;
|
||||
}
|
||||
else if (p.DisplayNameText.Contains("Lock Piston"))
|
||||
{
|
||||
this.lockPiston = p;
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var name in pistonsNames)
|
||||
{
|
||||
if (p.DisplayNameText.Contains(name))
|
||||
{
|
||||
this.pistons.Add(p);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var magneticPlates = new List<IMyLandingGear>();
|
||||
GridTerminalSystem.GetBlocksOfType(magneticPlates);
|
||||
foreach (var magneticPlate in magneticPlates)
|
||||
{
|
||||
if (magneticPlate.DisplayNameText.Contains("Magnetic Plate arm"))
|
||||
{
|
||||
this.magneticPlateArm = magneticPlate;
|
||||
}
|
||||
else if (magneticPlate.DisplayNameText.Contains("Lock Plate"))
|
||||
{
|
||||
this.lockPlate = magneticPlate;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.rotor01 == null)
|
||||
{
|
||||
this.PrintError("Can't find 'Rotor 01'");
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.rotor02 == null)
|
||||
{
|
||||
this.PrintError("Can't find 'Rotor 02'");
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.hinge01 == null)
|
||||
{
|
||||
this.PrintError("Can't find 'Hinge 01'");
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.hinge02 == null)
|
||||
{
|
||||
this.PrintError("Can't find 'Hinge 02'");
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.magneticPlateArm == null)
|
||||
{
|
||||
this.PrintError("Can't find 'Magnetic Plate arm'");
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.lockPlate == null)
|
||||
{
|
||||
this.PrintError("Can't find 'Lock Plate'");
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.piston01 == null)
|
||||
{
|
||||
this.PrintError("Can't find 'Piston 01'");
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.lockPiston == null)
|
||||
{
|
||||
this.PrintError("Can't find 'Lock Piston'");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
this.Runtime.UpdateFrequency = UpdateFrequency.Update100;
|
||||
|
||||
this.Print("Mining rover system has started");
|
||||
}
|
||||
|
||||
public void Save()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Always returns an angle between 0 and pi/2.
|
||||
/// </summary>
|
||||
/// <param name="a1"></param>
|
||||
/// <param name="a2"></param>
|
||||
/// <returns></returns>
|
||||
float SumAngles(float a1, float a2)
|
||||
{
|
||||
var r = (float)((a1 + a2) % (2 * Math.PI));
|
||||
|
||||
if (r < 0)
|
||||
return (float)(r + 2 * Math.PI);
|
||||
else
|
||||
return r;
|
||||
}
|
||||
|
||||
// Return 'true' if the rotor is in place.
|
||||
bool SetRotorVelocity(float targetAngle, IMyMotorAdvancedStator rotor, float tolerance = (float)(Math.PI / 64))
|
||||
{
|
||||
//if (rotor.Angle)
|
||||
return false;
|
||||
}
|
||||
|
||||
void UpdateState()
|
||||
{
|
||||
if (this.currentState == State.UNPACKING)
|
||||
{
|
||||
if (!this.piston01.Enabled)
|
||||
{
|
||||
this.piston01.Enabled = true;
|
||||
foreach (var p in this.pistons)
|
||||
p.Enabled = true;
|
||||
}
|
||||
|
||||
bool finished = true;
|
||||
//bool roverLocked = false;
|
||||
|
||||
if (this.magneticPlateArm.IsLocked)
|
||||
this.magneticPlateArm.Unlock();
|
||||
|
||||
this.rotor01.TargetVelocityRPM = 0.0f;
|
||||
|
||||
if (this.lockPiston.CurrentPosition <= EPSILON)
|
||||
{
|
||||
finished = false;
|
||||
this.lockPiston.Velocity = 0.5f;
|
||||
}
|
||||
else if (this.lockPiston.CurrentPosition >= this.lockPiston.MaxLimit - EPSILON)
|
||||
{
|
||||
//roverLocked = true;
|
||||
if (!this.lockPlate.IsLocked)
|
||||
this.lockPlate.Lock();
|
||||
this.lockPiston.Velocity = 0.0f;
|
||||
}
|
||||
|
||||
if (this.hinge01.Angle <= -Math.PI / 8)
|
||||
{
|
||||
this.hinge01.TargetVelocityRPM = 0.0f;
|
||||
}
|
||||
else // if (roverLocked)
|
||||
{
|
||||
this.hinge01.TargetVelocityRPM = -1.5f;
|
||||
finished = false;
|
||||
}
|
||||
|
||||
if (this.hinge02.Angle <= -Math.PI / 3)
|
||||
{
|
||||
this.hinge02.TargetVelocityRPM = 0.0f;
|
||||
}
|
||||
else // if (roverLocked)
|
||||
{
|
||||
this.hinge02.TargetVelocityRPM = -1.5f;
|
||||
finished = false;
|
||||
}
|
||||
|
||||
if (this.piston01.CurrentPosition <= this.piston01.MaxLimit - EPSILON /*&& roverLocked*/)
|
||||
{
|
||||
this.piston01.Velocity = 1.0f;
|
||||
finished = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.piston01.Velocity = 0.0f;
|
||||
}
|
||||
|
||||
if (finished)
|
||||
{
|
||||
this.rotor01.RotorLock = false;
|
||||
this.currentState = State.DEFAULT;
|
||||
this.Print("Unpacking terminated");
|
||||
}
|
||||
}
|
||||
else if (this.currentState == State.PACKING)
|
||||
{
|
||||
bool finished = true;
|
||||
|
||||
var rotor01InPlace = this.rotor01.Angle >= 2 * Math.PI - EPSILON_RAD || this.rotor01.Angle <= EPSILON_RAD;
|
||||
if (rotor01InPlace)
|
||||
{
|
||||
this.rotor01.RotorLock = true;
|
||||
this.rotor01.TargetVelocityRPM = 0.0f;
|
||||
}
|
||||
else if (this.rotor01.Angle >= Math.PI)
|
||||
{
|
||||
this.rotor01.TargetVelocityRPM = 1.0f;
|
||||
finished = false;
|
||||
}
|
||||
else // if (this.rotor01.Angle <= Math.PI)
|
||||
{
|
||||
this.rotor01.TargetVelocityRPM = -1.0f;
|
||||
finished = false;
|
||||
}
|
||||
|
||||
//this.Print($"Hinge 01 angle: {this.hinge01.Angle}");
|
||||
if (this.hinge01.Angle <= Math.PI / 4.0 || rotor01InPlace && this.hinge01.Angle <= Math.PI / 2.0 - Math.PI / 32.0)
|
||||
{
|
||||
this.hinge01.TargetVelocityRPM = 1.5f;
|
||||
finished = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.hinge01.TargetVelocityRPM = 0f;
|
||||
}
|
||||
|
||||
if (this.hinge02.Angle <= -Math.PI / 32.0)
|
||||
{
|
||||
this.hinge02.TargetVelocityRPM = 1.5f;
|
||||
finished = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.hinge02.TargetVelocityRPM = 0f;
|
||||
}
|
||||
|
||||
if (this.piston01.CurrentPosition >= EPSILON)
|
||||
{
|
||||
this.piston01.Velocity = -1.0f;
|
||||
finished = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.piston01.Velocity = 0.0f;
|
||||
}
|
||||
|
||||
//var rotor2TargetAngle = 2 * Math.PI - Math.PI / 4; // 315°.
|
||||
|
||||
if (finished)
|
||||
{
|
||||
if (!this.magneticPlateArm.IsLocked)
|
||||
this.magneticPlateArm.Lock();
|
||||
|
||||
if (this.lockPlate.IsLocked)
|
||||
{
|
||||
this.lockPlate.Unlock();
|
||||
this.lockPiston.Velocity = -0.5f;
|
||||
}
|
||||
|
||||
this.piston01.Enabled = false;
|
||||
foreach (var p in this.pistons)
|
||||
p.Enabled = false;
|
||||
|
||||
this.currentState = State.DEFAULT;
|
||||
this.Print("Packing terminated");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
enum RotateDirection
|
||||
{
|
||||
RIGHT,
|
||||
LEFT,
|
||||
}
|
||||
|
||||
enum ElevationDirection
|
||||
{
|
||||
UP,
|
||||
DOWN,
|
||||
}
|
||||
|
||||
const double SPEED_ROTATION = 1.0;
|
||||
const double SPEED_HINGE = 1.0;
|
||||
const double SPEED_EXTEND_1 = 1.0;
|
||||
const double SPEED_EXTEND_2 = 1.0;
|
||||
|
||||
void Rotate(RotateDirection direction)
|
||||
{
|
||||
//if (this.rotor01.)
|
||||
}
|
||||
|
||||
void ChangeElevation(ElevationDirection direction)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void LockUnlock()
|
||||
{
|
||||
if (rotor01.Base)
|
||||
}*/
|
||||
|
||||
public void Main(string argument, UpdateType updateSource)
|
||||
{
|
||||
if ((updateSource & UpdateType.Update100) != 0)
|
||||
{
|
||||
this.UpdateState();
|
||||
}
|
||||
else if ((updateSource & (UpdateType.Terminal | UpdateType.Trigger)) != 0)
|
||||
{
|
||||
switch (argument)
|
||||
{
|
||||
case "UNPACK":
|
||||
this.Print("Unpacking...");
|
||||
this.currentState = State.UNPACKING;
|
||||
break;
|
||||
|
||||
case "PACK":
|
||||
this.Print("Packing...");
|
||||
this.currentState = State.PACKING;
|
||||
break;
|
||||
|
||||
case "STOP":
|
||||
this.currentState = State.DEFAULT;
|
||||
break;
|
||||
|
||||
/*
|
||||
case "LOCK OR UNLOCK":
|
||||
LockUnlock();
|
||||
break;
|
||||
|
||||
case "DOWN":
|
||||
ChangeElevation(ElevationDirection.DOWN);
|
||||
break;
|
||||
|
||||
case "UP":
|
||||
ChangeElevation(ElevationDirection.UP);
|
||||
break;
|
||||
|
||||
case "LEFT":
|
||||
Rotate(RotateDirection.LEFT);
|
||||
break;
|
||||
|
||||
case "RIGHT":
|
||||
Rotate(RotateDirection.RIGHT);
|
||||
break;*/
|
||||
|
||||
default:
|
||||
Echo($"Uknown command: {argument}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BIN
MiningRover/thumb.png
Normal file
BIN
MiningRover/thumb.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 385 KiB |
105
SECommon/Output.cs
Normal file
105
SECommon/Output.cs
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
using Sandbox.Game.EntityComponents;
|
||||
using Sandbox.ModAPI.Ingame;
|
||||
using Sandbox.ModAPI.Interfaces;
|
||||
|
||||
using SpaceEngineers.Game.ModAPI.Ingame;
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
using VRage;
|
||||
using VRage.Collections;
|
||||
using VRage.Game;
|
||||
using VRage.Game.Components;
|
||||
using VRage.Game.GUI.TextPanel;
|
||||
using VRage.Game.ModAPI.Ingame;
|
||||
using VRage.Game.ModAPI.Ingame.Utilities;
|
||||
using VRage.Game.ObjectBuilders.Definitions;
|
||||
|
||||
using VRageMath;
|
||||
|
||||
namespace IngameScript
|
||||
{
|
||||
class Output
|
||||
{
|
||||
IList<IMyTextSurface> outputs;
|
||||
int maxNbLines;
|
||||
|
||||
public Output(IList<IMyTextSurface> surfaces, int maxNbLines = 10)
|
||||
{
|
||||
foreach (var s in surfaces)
|
||||
{
|
||||
s.ContentType = ContentType.TEXT_AND_IMAGE;
|
||||
s.WriteText("");
|
||||
}
|
||||
|
||||
this.outputs = surfaces;
|
||||
this.maxNbLines = maxNbLines;
|
||||
}
|
||||
|
||||
public Output(IMyCockpit cockpit, int maxNbLines = 10)
|
||||
{
|
||||
this.outputs = new List<IMyTextSurface>();
|
||||
for (int n = 0; n < cockpit.SurfaceCount; n++)
|
||||
{
|
||||
var surface = cockpit.GetSurface(n);
|
||||
surface.ContentType = ContentType.TEXT_AND_IMAGE;
|
||||
surface.WriteText("");
|
||||
this.outputs.Add(surface);
|
||||
}
|
||||
this.maxNbLines = maxNbLines;
|
||||
}
|
||||
|
||||
public Output(IMyTextSurface surface, int maxNbLines = 10)
|
||||
: this(new List<IMyTextSurface> { surface }, maxNbLines)
|
||||
{ }
|
||||
|
||||
public void Print(string text, int outputNumber = 0)
|
||||
{
|
||||
if (this.outputs.Count() <= outputNumber)
|
||||
{
|
||||
throw new Exception($"Output number {outputNumber} doesn't exist (number of output: {this.outputs.Count()}");
|
||||
}
|
||||
else
|
||||
{
|
||||
var output = this.outputs[outputNumber];
|
||||
var currentText = output.GetText();
|
||||
var lines = currentText.Split('\n');
|
||||
if (lines.Count() >= this.maxNbLines)
|
||||
{
|
||||
output.WriteText(lines.Skip(lines.Count() - this.maxNbLines + 1).Append(text).Aggregate((a, b) => a + Environment.NewLine + b));
|
||||
}
|
||||
else if (lines.Count() == 0)
|
||||
{
|
||||
output.WriteText(text);
|
||||
}
|
||||
else
|
||||
{
|
||||
output.WriteText(Environment.NewLine + text, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void PrintError(string text, int outputNumber = 0)
|
||||
{
|
||||
this.Print($"Error: {text}", outputNumber);
|
||||
}
|
||||
|
||||
|
||||
public void Display(string text, int outputNumber = 0)
|
||||
{
|
||||
if (this.outputs.Count() <= outputNumber)
|
||||
{
|
||||
throw new Exception($"Output number {outputNumber} doesn't exist (number of output: {this.outputs.Count()}");
|
||||
}
|
||||
else
|
||||
{
|
||||
this.outputs[outputNumber].WriteText(text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
14
SECommon/SECommon.projitems
Normal file
14
SECommon/SECommon.projitems
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<MSBuildAllProjects Condition="'$(MSBuildVersion)' == '' Or '$(MSBuildVersion)' < '16.0'">$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
||||
<HasSharedItems>true</HasSharedItems>
|
||||
<SharedGUID>9e97399c-4fe6-495b-aa87-acc2213647cd</SharedGUID>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Configuration">
|
||||
<Import_RootNamespace>SECommon</Import_RootNamespace>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Output.cs" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
13
SECommon/SECommon.shproj
Normal file
13
SECommon/SECommon.shproj
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>9e97399c-4fe6-495b-aa87-acc2213647cd</ProjectGuid>
|
||||
<MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.Common.Default.props" />
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.Common.props" />
|
||||
<PropertyGroup />
|
||||
<Import Project="SECommon.projitems" Label="Shared" />
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.CSharp.targets" />
|
||||
</Project>
|
||||
37
SEScripts.sln
Normal file
37
SEScripts.sln
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.7.34024.191
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BaseApp", "BaseMiner\BaseApp.csproj", "{22A83955-FE9B-4EBA-8980-D9DE01353C4C}"
|
||||
EndProject
|
||||
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "SECommon", "SECommon\SECommon.shproj", "{9E97399C-4FE6-495B-AA87-ACC2213647CD}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutoPilot", "AutoPilot\AutoPilot.csproj", "{141E1804-F644-48F8-A3D8-BEFEEE66ECBA}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MiningRover", "MiningRover\MiningRover.csproj", "{DBCD62FE-F7AA-4A03-9241-0A4BE6952664}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{22A83955-FE9B-4EBA-8980-D9DE01353C4C}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{22A83955-FE9B-4EBA-8980-D9DE01353C4C}.Debug|x64.Build.0 = Debug|x64
|
||||
{141E1804-F644-48F8-A3D8-BEFEEE66ECBA}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{141E1804-F644-48F8-A3D8-BEFEEE66ECBA}.Debug|x64.Build.0 = Debug|x64
|
||||
{DBCD62FE-F7AA-4A03-9241-0A4BE6952664}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{DBCD62FE-F7AA-4A03-9241-0A4BE6952664}.Debug|x64.Build.0 = Debug|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {F4600B8D-80EE-4075-8A61-BE8847A00BD7}
|
||||
EndGlobalSection
|
||||
GlobalSection(SharedMSBuildProjectFiles) = preSolution
|
||||
SECommon\SECommon.projitems*{141e1804-f644-48f8-a3d8-befeee66ecba}*SharedItemsImports = 4
|
||||
SECommon\SECommon.projitems*{22a83955-fe9b-4eba-8980-d9de01353c4c}*SharedItemsImports = 4
|
||||
SECommon\SECommon.projitems*{9e97399c-4fe6-495b-aa87-acc2213647cd}*SharedItemsImports = 13
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
BIN
thumb.png
Normal file
BIN
thumb.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 385 KiB |
Loading…
Add table
Add a link
Reference in a new issue