NorbiPeti
9609187cff
Removed GameState methods from block APIs Created a BlockUtility class to get the block the player is looking at Changed the return type of PlaceBlock, returning the ID of the newly placed block or null
183 lines
7.6 KiB
C#
183 lines
7.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
using Svelto.ECS;
|
|
|
|
using GamecraftModdingAPI.Utility;
|
|
|
|
namespace GamecraftModdingAPI.Blocks
|
|
{
|
|
/// <summary>
|
|
/// [EXPERIMENTAL] Common block signal operations
|
|
/// The functionality in this class only works when in a game.
|
|
/// </summary>
|
|
public static class Signals
|
|
{
|
|
// Signal constants
|
|
public static readonly float HIGH = 1.0f;
|
|
public static readonly float POSITIVE_HIGH = HIGH;
|
|
public static readonly float NEGATIVE_HIGH = -1.0f;
|
|
public static readonly float LOW = 0.0f;
|
|
|
|
private static SignalEngine signalEngine = new SignalEngine();
|
|
|
|
/// <summary>
|
|
/// Set the electric block's (first) signal value.
|
|
/// </summary>
|
|
/// <param name="blockID">The block's id.</param>
|
|
/// <param name="signal">The signal value (-1 to 1; not enforced).</param>
|
|
/// <param name="input">Whether to retrieve input IDs (true) or output IDs (false).</param>
|
|
/// <param name="owned">Whether the block is in the owned group (true) or functional group (false)</param>
|
|
public static void SetSignalByBlock(uint blockID, float signal, bool input = true, bool owned = true)
|
|
{
|
|
EGID egid = new EGID(blockID, owned ? BlockIdentifiers.OWNED_BLOCKS : BlockIdentifiers.FUNCTIONAL_BLOCK_PARTS);
|
|
if (signalEngine.IsInGame && GameState.IsSimulationMode())
|
|
{
|
|
signalEngine.SetSignal(egid, signal, out uint _, input);
|
|
}
|
|
}
|
|
|
|
public static void SetSignalByBlock(EGID blockID, float signal, bool input = true)
|
|
{
|
|
if (signalEngine.IsInGame && GameState.IsSimulationMode())
|
|
{
|
|
signalEngine.SetSignal(blockID, signal, out uint _, input);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Set the signal's value.
|
|
/// </summary>
|
|
/// <param name="signalID">The channel cluster's id.</param>
|
|
/// <param name="signal">The signal value (-1 to 1; not enforced).</param>
|
|
/// <param name="input">Whether to retrieve input IDs (true) or output IDs (false).</param>
|
|
public static void SetSignalByID(uint signalID, float signal, bool input = true)
|
|
{
|
|
if (signalEngine.IsInGame && GamecraftModdingAPI.Utility.GameState.IsSimulationMode())
|
|
{
|
|
signalEngine.SetSignal(signalID, signal, input);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Add a value to an electric block's signal.
|
|
/// </summary>
|
|
/// <param name="blockID">The block's id.</param>
|
|
/// <param name="signal">The signal value to add.</param>
|
|
/// <param name="clamp">Whether to clamp the resulting signal value between -1 and 1.</param>
|
|
/// <param name="input">Whether to retrieve input IDs (true) or output IDs (false).</param>
|
|
/// <param name="owned">Whether the block is in the owned group (true) or functional group (false)</param>
|
|
/// <returns>The signal's new value.</returns>
|
|
public static float AddSignalByBlock(uint blockID, float signal, bool clamp = true, bool input = true, bool owned = true)
|
|
{
|
|
EGID egid = new EGID(blockID, owned ? BlockIdentifiers.OWNED_BLOCKS : BlockIdentifiers.FUNCTIONAL_BLOCK_PARTS);
|
|
if (signalEngine.IsInGame && GamecraftModdingAPI.Utility.GameState.IsSimulationMode())
|
|
{
|
|
return signalEngine.AddSignal(egid, signal, out uint _, clamp, input);
|
|
}
|
|
return 0f;
|
|
}
|
|
|
|
public static float AddSignalByBlock(EGID blockID, float signal, bool clamp = true, bool input = true)
|
|
{
|
|
if (signalEngine.IsInGame && GamecraftModdingAPI.Utility.GameState.IsSimulationMode())
|
|
{
|
|
return signalEngine.AddSignal(blockID, signal, out uint _, clamp, input);
|
|
}
|
|
return 0f;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Add a value to a conductive cluster channel.
|
|
/// </summary>
|
|
/// <param name="signalID">The channel cluster's id.</param>
|
|
/// <param name="signal">The signal value to add.</param>
|
|
/// <param name="clamp">Whether to clamp the resulting signal value between -1 and 1.</param>
|
|
/// <param name="input">Whether to retrieve input IDs (true) or output IDs (false).</param>
|
|
/// <returns>The signal's new value.</returns>
|
|
public static float AddSignalByID(uint signalID, float signal, bool clamp = true, bool input = true)
|
|
{
|
|
if (signalEngine.IsInGame && GamecraftModdingAPI.Utility.GameState.IsSimulationMode())
|
|
{
|
|
return signalEngine.AddSignal(signalID, signal, clamp, input);
|
|
}
|
|
return 0f;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get a electric block's signal's (first) value.
|
|
/// </summary>
|
|
/// <param name="blockID">The block's id.</param>
|
|
/// <param name="input">Whether to retrieve input IDs (true) or output IDs (false).</param>
|
|
/// <param name="owned">Whether the block is in the owned group (true) or functional group (false)</param>
|
|
/// <returns>The signal's value.</returns>
|
|
public static float GetSignalByBlock(uint blockID, bool input = true, bool owned = true)
|
|
{
|
|
EGID egid = new EGID(blockID, owned? BlockIdentifiers.OWNED_BLOCKS : BlockIdentifiers.FUNCTIONAL_BLOCK_PARTS);
|
|
if (signalEngine.IsInGame && GamecraftModdingAPI.Utility.GameState.IsSimulationMode())
|
|
{
|
|
return signalEngine.GetSignal(egid, out uint _, input);
|
|
}
|
|
return 0f;
|
|
}
|
|
|
|
public static float GetSignalByBlock(EGID blockID, bool input = true)
|
|
{
|
|
if (signalEngine.IsInGame && GamecraftModdingAPI.Utility.GameState.IsSimulationMode())
|
|
{
|
|
return signalEngine.GetSignal(blockID, out uint _, input);
|
|
}
|
|
return 0f;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get a signal's value.
|
|
/// </summary>
|
|
/// <param name="signalID">The signal's id.</param>
|
|
/// <param name="input">Whether to retrieve input IDs (true) or output IDs (false).</param>
|
|
/// <returns>The signal's value.</returns>
|
|
public static float GetSignalByID(uint signalID, bool input = true)
|
|
{
|
|
if (signalEngine.IsInGame && GamecraftModdingAPI.Utility.GameState.IsSimulationMode())
|
|
{
|
|
return signalEngine.GetSignal(signalID, input);
|
|
}
|
|
return 0f;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get the ID of every electric block in the game world.
|
|
/// </summary>
|
|
/// <returns>The block IDs.</returns>
|
|
public static EGID[] GetElectricBlocks()
|
|
{
|
|
return signalEngine.GetElectricBlocks();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get the unique identifiers for the input wires connected to an electric block.
|
|
/// </summary>
|
|
/// <param name="blockID">The block's id.</param>
|
|
/// <param name="input">Whether to retrieve input IDs (true) or output IDs (false).</param>
|
|
/// <param name="owned">Whether the block is in the owned group (true) or functional group (false)</param>
|
|
/// <returns>The unique IDs.</returns>
|
|
public static uint[] GetSignalIDs(uint blockID, bool input = true, bool owned = true)
|
|
{
|
|
EGID egid = new EGID(blockID, owned ? BlockIdentifiers.OWNED_BLOCKS : BlockIdentifiers.FUNCTIONAL_BLOCK_PARTS);
|
|
return signalEngine.GetSignalIDs(egid, input);
|
|
}
|
|
|
|
public static uint[] GetSignalIDs(EGID blockID, bool input = true, bool owned = true)
|
|
{
|
|
return signalEngine.GetSignalIDs(blockID, input);
|
|
}
|
|
|
|
public static void Init()
|
|
{
|
|
GameEngineManager.AddGameEngine(signalEngine);
|
|
}
|
|
}
|
|
}
|