Get wire looked at, block class generation
This commit is contained in:
parent
ece71c45a6
commit
49c3b60963
11 changed files with 1471 additions and 3 deletions
68
CodeGenerator/BlockClassGenerator.cs
Normal file
68
CodeGenerator/BlockClassGenerator.cs
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
using System.CodeDom;
|
||||||
|
using System.CodeDom.Compiler;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using RobocraftX.Common;
|
||||||
|
|
||||||
|
namespace CodeGenerator
|
||||||
|
{
|
||||||
|
public class BlockClassGenerator
|
||||||
|
{
|
||||||
|
public void Generate(string name, string group)
|
||||||
|
{
|
||||||
|
if (group is null)
|
||||||
|
{
|
||||||
|
group = GetGroup(name) + "_BLOCK_GROUP";
|
||||||
|
if (typeof(CommonExclusiveGroups).GetFields().All(field => field.Name != group))
|
||||||
|
group = GetGroup(name) + "_BLOCK_BUILD_GROUP";
|
||||||
|
}
|
||||||
|
|
||||||
|
var codeUnit = new CodeCompileUnit();
|
||||||
|
var ns = new CodeNamespace("TechbloxModdingAPI.Blocks");
|
||||||
|
ns.Imports.Add(new CodeNamespaceImport("RobocraftX.Common"));
|
||||||
|
ns.Imports.Add(new CodeNamespaceImport("Svelto.ECS"));
|
||||||
|
var cl = new CodeTypeDeclaration(name);
|
||||||
|
cl.Members.Add(new CodeConstructor
|
||||||
|
{
|
||||||
|
Parameters = {new CodeParameterDeclarationExpression("EGID", "egid")},
|
||||||
|
Comments = { new CodeCommentStatement($"{name} constructor", true)}
|
||||||
|
});
|
||||||
|
cl.Members.Add(new CodeConstructor
|
||||||
|
{
|
||||||
|
Parameters =
|
||||||
|
{
|
||||||
|
new CodeParameterDeclarationExpression(typeof(uint), "id")
|
||||||
|
},
|
||||||
|
Comments = {new CodeCommentStatement($"{name} constructor", true)},
|
||||||
|
BaseConstructorArgs =
|
||||||
|
{
|
||||||
|
new CodeObjectCreateExpression("EGID", new CodeVariableReferenceExpression("id"),
|
||||||
|
new CodeFieldReferenceExpression(new CodeTypeReferenceExpression("CommonExclusiveGroups"),
|
||||||
|
group))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
ns.Types.Add(cl);
|
||||||
|
codeUnit.Namespaces.Add(ns);
|
||||||
|
|
||||||
|
var provider = CodeDomProvider.CreateProvider("CSharp");
|
||||||
|
using (var sw = new StreamWriter($"{name}.cs"))
|
||||||
|
{
|
||||||
|
provider.GenerateCodeFromCompileUnit(codeUnit, sw, new CodeGeneratorOptions {BracingStyle = "C"});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string GetGroup(string name)
|
||||||
|
{
|
||||||
|
var ret = "";
|
||||||
|
foreach (var ch in name)
|
||||||
|
{
|
||||||
|
if (char.IsUpper(ch) && ret.Length > 0)
|
||||||
|
ret += "_" + ch;
|
||||||
|
else
|
||||||
|
ret += char.ToUpper(ch);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1176
CodeGenerator/CodeGenerator.csproj
Normal file
1176
CodeGenerator/CodeGenerator.csproj
Normal file
File diff suppressed because it is too large
Load diff
16
CodeGenerator/Program.cs
Normal file
16
CodeGenerator/Program.cs
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
using System.CodeDom;
|
||||||
|
using System.CodeDom.Compiler;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace CodeGenerator
|
||||||
|
{
|
||||||
|
internal class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
var bcg = new BlockClassGenerator();
|
||||||
|
bcg.Generate("TestBlock", "TEST_BLOCK");
|
||||||
|
bcg.Generate("Engine", null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
35
CodeGenerator/Properties/AssemblyInfo.cs
Normal file
35
CodeGenerator/Properties/AssemblyInfo.cs
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("CodeGenerator")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("CodeGenerator")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © ExMods 2021")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("0EBB6400-95A7-4A3D-B2ED-BF31E364CC10")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -5,6 +5,8 @@ VisualStudioVersion = 16.0.29411.108
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TechbloxModdingAPI", "TechbloxModdingAPI\TechbloxModdingAPI.csproj", "{7FD5A7D8-4F3E-426A-B07D-7DC70442A4DF}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TechbloxModdingAPI", "TechbloxModdingAPI\TechbloxModdingAPI.csproj", "{7FD5A7D8-4F3E-426A-B07D-7DC70442A4DF}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeGenerator", "CodeGenerator\CodeGenerator.csproj", "{0EBB6400-95A7-4A3D-B2ED-BF31E364CC10}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
@ -18,6 +20,12 @@ Global
|
||||||
{7FD5A7D8-4F3E-426A-B07D-7DC70442A4DF}.Release|Any CPU.Build.0 = Release|Any CPU
|
{7FD5A7D8-4F3E-426A-B07D-7DC70442A4DF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{7FD5A7D8-4F3E-426A-B07D-7DC70442A4DF}.Test|Any CPU.ActiveCfg = Test|Any CPU
|
{7FD5A7D8-4F3E-426A-B07D-7DC70442A4DF}.Test|Any CPU.ActiveCfg = Test|Any CPU
|
||||||
{7FD5A7D8-4F3E-426A-B07D-7DC70442A4DF}.Test|Any CPU.Build.0 = Test|Any CPU
|
{7FD5A7D8-4F3E-426A-B07D-7DC70442A4DF}.Test|Any CPU.Build.0 = Test|Any CPU
|
||||||
|
{0EBB6400-95A7-4A3D-B2ED-BF31E364CC10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{0EBB6400-95A7-4A3D-B2ED-BF31E364CC10}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{0EBB6400-95A7-4A3D-B2ED-BF31E364CC10}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{0EBB6400-95A7-4A3D-B2ED-BF31E364CC10}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{0EBB6400-95A7-4A3D-B2ED-BF31E364CC10}.Test|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{0EBB6400-95A7-4A3D-B2ED-BF31E364CC10}.Test|Any CPU.Build.0 = Debug|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using HarmonyLib;
|
|
||||||
|
|
||||||
using RobocraftX;
|
|
||||||
using RobocraftX.Common;
|
using RobocraftX.Common;
|
||||||
using RobocraftX.Schedulers;
|
using RobocraftX.Schedulers;
|
||||||
using RobocraftX.SimulationModeState;
|
using RobocraftX.SimulationModeState;
|
||||||
|
|
16
TechbloxModdingAPI/Blocks/LogicGate.cs
Normal file
16
TechbloxModdingAPI/Blocks/LogicGate.cs
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
using RobocraftX.Common;
|
||||||
|
using Svelto.ECS;
|
||||||
|
|
||||||
|
namespace TechbloxModdingAPI.Blocks
|
||||||
|
{
|
||||||
|
public class LogicGate : SignalingBlock
|
||||||
|
{
|
||||||
|
public LogicGate(EGID id) : base(id)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public LogicGate(uint id) : base(new EGID(id, CommonExclusiveGroups.LOGIC_BLOCK_GROUP))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
50
TechbloxModdingAPI/Blocks/Piston.cs
Normal file
50
TechbloxModdingAPI/Blocks/Piston.cs
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
using RobocraftX.Blocks;
|
||||||
|
using Svelto.ECS;
|
||||||
|
using Unity.Mathematics;
|
||||||
|
|
||||||
|
using TechbloxModdingAPI.Utility;
|
||||||
|
using RobocraftX.Common;
|
||||||
|
|
||||||
|
namespace TechbloxModdingAPI.Blocks
|
||||||
|
{
|
||||||
|
public class Piston : SignalingBlock
|
||||||
|
{
|
||||||
|
public Piston(EGID id) : base(id)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public Piston(uint id) : base(new EGID(id, CommonExclusiveGroups.PISTON_BLOCK_GROUP))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// custom piston properties
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The piston's max extension distance.
|
||||||
|
/// </summary>
|
||||||
|
public float MaximumExtension
|
||||||
|
{
|
||||||
|
get => BlockEngine.GetBlockInfo<PistonReadOnlyStruct>(this).maxDeviation;
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
BlockEngine.GetBlockInfo<PistonReadOnlyStruct>(this).maxDeviation = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The piston's max extension force.
|
||||||
|
/// </summary>
|
||||||
|
public float MaximumForce
|
||||||
|
{
|
||||||
|
get => BlockEngine.GetBlockInfo<PistonReadOnlyStruct>(this).pistonVelocity;
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
BlockEngine.GetBlockInfo<PistonReadOnlyStruct>(this).pistonVelocity = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
71
TechbloxModdingAPI/Blocks/Servo.cs
Normal file
71
TechbloxModdingAPI/Blocks/Servo.cs
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
using RobocraftX.Blocks;
|
||||||
|
using RobocraftX.Common;
|
||||||
|
using Svelto.ECS;
|
||||||
|
|
||||||
|
namespace TechbloxModdingAPI.Blocks
|
||||||
|
{
|
||||||
|
public class Servo : SignalingBlock
|
||||||
|
{
|
||||||
|
public Servo(EGID id) : base(id)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public Servo(uint id) : base(new EGID(id, CommonExclusiveGroups.SERVO_BLOCK_GROUP))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// custom servo properties
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The servo's minimum angle.
|
||||||
|
/// </summary>
|
||||||
|
public float MinimumAngle
|
||||||
|
{
|
||||||
|
get => BlockEngine.GetBlockInfo<ServoReadOnlyStruct>(this).minDeviation;
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
BlockEngine.GetBlockInfo<ServoReadOnlyStruct>(this).minDeviation = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The servo's maximum angle.
|
||||||
|
/// </summary>
|
||||||
|
public float MaximumAngle
|
||||||
|
{
|
||||||
|
get => BlockEngine.GetBlockInfo<ServoReadOnlyStruct>(this).maxDeviation;
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
BlockEngine.GetBlockInfo<ServoReadOnlyStruct>(this).maxDeviation = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The servo's maximum force.
|
||||||
|
/// </summary>
|
||||||
|
public float MaximumForce
|
||||||
|
{
|
||||||
|
get => BlockEngine.GetBlockInfo<ServoReadOnlyStruct>(this).servoVelocity;
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
BlockEngine.GetBlockInfo<ServoReadOnlyStruct>(this).servoVelocity = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The servo's direction.
|
||||||
|
/// </summary>
|
||||||
|
public bool Reverse
|
||||||
|
{
|
||||||
|
get => BlockEngine.GetBlockInfo<ServoReadOnlyStruct>(this).reverse;
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
BlockEngine.GetBlockInfo<ServoReadOnlyStruct>(this).reverse = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ using RobocraftX.Character.Movement;
|
||||||
using Unity.Mathematics;
|
using Unity.Mathematics;
|
||||||
using RobocraftX.Common;
|
using RobocraftX.Common;
|
||||||
using RobocraftX.Common.Players;
|
using RobocraftX.Common.Players;
|
||||||
|
using RobocraftX.GUI.Wires;
|
||||||
using RobocraftX.Physics;
|
using RobocraftX.Physics;
|
||||||
using Svelto.ECS;
|
using Svelto.ECS;
|
||||||
using Techblox.BuildingDrone;
|
using Techblox.BuildingDrone;
|
||||||
|
@ -432,6 +433,7 @@ namespace TechbloxModdingAPI
|
||||||
{
|
{
|
||||||
var egid = playerEngine.GetThingLookedAt(Id, maxDistance);
|
var egid = playerEngine.GetThingLookedAt(Id, maxDistance);
|
||||||
return egid != EGID.Empty && egid.groupID != CommonExclusiveGroups.SIMULATION_BODIES_GROUP
|
return egid != EGID.Empty && egid.groupID != CommonExclusiveGroups.SIMULATION_BODIES_GROUP
|
||||||
|
&& egid.groupID != WiresGUIExclusiveGroups.WireGroup
|
||||||
? Block.New(egid)
|
? Block.New(egid)
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
@ -449,6 +451,19 @@ namespace TechbloxModdingAPI
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the wire the player is currently looking at in build mode.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="maxDistance">The maximum distance from the player (default is the player's building reach)</param>
|
||||||
|
/// <returns>The wire or null if not found</returns>
|
||||||
|
public Wire GetWireLookedAt(float maxDistance = -1f)
|
||||||
|
{
|
||||||
|
var egid = playerEngine.GetThingLookedAt(Id, maxDistance);
|
||||||
|
return egid != EGID.Empty && egid.groupID == WiresGUIExclusiveGroups.WireGroup
|
||||||
|
? new Wire(egid)
|
||||||
|
: null;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns the blocks that are in the player's current selection.
|
/// Returns the blocks that are in the player's current selection.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -312,6 +312,21 @@ namespace TechbloxModdingAPI.Tests
|
||||||
|
|
||||||
Loop().RunOn(Scheduler.leanRunner);
|
Loop().RunOn(Scheduler.leanRunner);
|
||||||
}).Build();
|
}).Build();
|
||||||
|
|
||||||
|
CommandBuilder.Builder("importAssetBundle")
|
||||||
|
.Action(() =>
|
||||||
|
{
|
||||||
|
Logging.CommandLog("Importing asset bundle...");
|
||||||
|
var ab = AssetBundle.LoadFromFile(
|
||||||
|
@"filepath");
|
||||||
|
Logging.CommandLog("Imported asset bundle: " + ab);
|
||||||
|
var assets = ab.LoadAllAssets();
|
||||||
|
Logging.CommandLog("Loaded " + assets.Length + " assets");
|
||||||
|
foreach (var asset in assets)
|
||||||
|
{
|
||||||
|
Logging.CommandLog(asset);
|
||||||
|
}
|
||||||
|
}).Build();
|
||||||
#if TEST
|
#if TEST
|
||||||
TestRoot.RunTests();
|
TestRoot.RunTests();
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue