First commit

This commit is contained in:
Greg Burri 2023-09-08 23:45:14 +02:00
commit 1d890b728a
24 changed files with 1814 additions and 0 deletions

57
BaseMiner/BaseApp.csproj Normal file
View 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>

View 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);
}
}
}

View 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>

View 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
View 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;
}
}
}
}
}