Browse Source

Fix block color and group

tags/v2.0.0
NorbiPeti 3 years ago
parent
commit
4f0645492c
Signed by: NorbiPeti <szatmari.norbert.peter@gmail.com> GPG Key ID: DBA4C4549A927E56
4 changed files with 30 additions and 6 deletions
  1. +4
    -4
      TechbloxModdingAPI/Block.cs
  2. +1
    -1
      TechbloxModdingAPI/Blocks/BlockColor.cs
  3. +23
    -1
      TechbloxModdingAPI/Blocks/PlacementEngine.cs
  4. +2
    -0
      TechbloxModdingAPI/Tests/TechbloxModdingAPIPluginTest.cs

+ 4
- 4
TechbloxModdingAPI/Block.cs View File

@@ -195,7 +195,7 @@ namespace TechbloxModdingAPI
if (value.y < 4e-5) value.y = uscale;
if (value.z < 4e-5) value.z = uscale;
BlockEngine.GetBlockInfo<ScalingEntityStruct>(this).scale = value;
BlockEngine.GetBlockInfo<GridScaleStruct>(this).gridScale = value - (int3) value + 1;
//BlockEngine.GetBlockInfo<GridScaleStruct>(this).gridScale = value - (int3) value + 1;
if (!Exists) return; //UpdateCollision needs the block to exist
ScalingEngine.UpdateCollision(Id);
BlockEngine.UpdateDisplayedBlock(Id);
@@ -225,7 +225,7 @@ namespace TechbloxModdingAPI
get => BlockEngine.GetBlockInfo<ScalingEntityStruct>(this).scale.x < 0;
set
{
var st = BlockEngine.GetBlockInfo<ScalingEntityStruct>(this);
ref var st = ref BlockEngine.GetBlockInfo<ScalingEntityStruct>(this);
st.scale.x = math.abs(st.scale.x) * (value ? -1 : 1);
BlockEngine.UpdatePrefab(this, (ushort) Type, (byte) Material, value);
}
@@ -256,7 +256,7 @@ namespace TechbloxModdingAPI
set
{
//TODO: Check if setting to 255 works
var color = BlockEngine.GetBlockInfo<ColourParameterEntityStruct>(this);
ref var color = ref BlockEngine.GetBlockInfo<ColourParameterEntityStruct>(this);
color.indexInPalette = value.Index;
color.hasNetworkChange = true;
color.paletteColour = BlockEngine.ConvertBlockColor(color.indexInPalette);
@@ -311,7 +311,7 @@ namespace TechbloxModdingAPI
private BlockGroup blockGroup;
/// <summary>
/// Returns the block group this block is a part of. Block groups can also be placed using blueprints.
/// Returns null if not part of a group.<br />
/// Returns null if not part of a group, although all blocks should have their own by default.<br />
/// Setting the group after the block has been initialized will not update everything properly,
/// so you can only set this property on blocks newly placed by your code.<br />
/// To set it for existing blocks, you can use the Copy() method and set the property on the resulting block


+ 1
- 1
TechbloxModdingAPI/Blocks/BlockColor.cs View File

@@ -26,7 +26,7 @@ namespace TechbloxModdingAPI.Blocks
{
if (darkness > 9)
throw new ArgumentOutOfRangeException(nameof(darkness), "Darkness must be 0-9 where 0 is default.");
if (color > BlockColors.Red) //Last valid color
if (color > BlockColors.Red && color != BlockColors.Default) //Last valid color
throw new ArgumentOutOfRangeException(nameof(color), "Invalid color!");
Index = (byte) (darkness * 10 + (byte) color);
}


+ 23
- 1
TechbloxModdingAPI/Blocks/PlacementEngine.cs View File

@@ -2,6 +2,7 @@ using System;
using System.Reflection;

using DataLoader;
using Gamecraft.Blocks.BlockGroups;
using Gamecraft.Wires;
using HarmonyLib;
using RobocraftX.Blocks;
@@ -40,6 +41,7 @@ namespace TechbloxModdingAPI.Blocks

public EntitiesDB entitiesDB { get; set; }
private static BlockEntityFactory _blockEntityFactory; //Injected from PlaceSingleBlockEngine
private static IEntityFactory _entityFactory;

public EntityInitializer PlaceBlock(BlockIDs block, float3 position, Player player, bool autoWire)
{ //It appears that only the non-uniform scale has any visible effect, but if that's not given here it will be set to the uniform one
@@ -78,6 +80,25 @@ namespace TechbloxModdingAPI.Blocks
placedBy = playerId,
triggerAutoWiring = autoWire && structInitializer.Has<BlockPortsStruct>()
});
/*structInitializer.Init(new OverrideStaticComponent()
{ //TODO
staticIfUnconnected = true
});*/
int nextFilterId = BlockGroupUtility.NextFilterId;
structInitializer.Init(new BlockGroupEntityComponent
{
currentBlockGroup = nextFilterId
});
_entityFactory.BuildEntity<BlockGroupEntityDescriptor>((uint) nextFilterId,
BlockGroupExclusiveGroups.BlockGroupEntityGroup)
.Init(new BlockGroupTransformEntityComponent
{
blockGroupGridRotation = quaternion.identity,
blockGroupGridPosition = position
});

foreach (var group in CharacterExclusiveGroups.AllCharacters)
{
@@ -98,9 +119,10 @@ namespace TechbloxModdingAPI.Blocks
[HarmonyPatch]
public class FactoryObtainerPatch
{
static void Postfix(BlockEntityFactory blockEntityFactory)
static void Postfix(BlockEntityFactory blockEntityFactory, IEntityFactory entityFactory)
{
_blockEntityFactory = blockEntityFactory;
_entityFactory = entityFactory;
Logging.MetaDebugLog("Block entity factory injected.");
}



+ 2
- 0
TechbloxModdingAPI/Tests/TechbloxModdingAPIPluginTest.cs View File

@@ -181,6 +181,8 @@ namespace TechbloxModdingAPI.Tests
.Action((float x, float y, float z) =>
{
var block = Block.PlaceNew(BlockIDs.Cube, new float3(x, y, z));
block.Scale *= 2;
new Block(BlockIDs.Cube, new float3(x + 1, y, z)).Scale *= 2;
Logging.CommandLog("Block placed with type: " + block.Type);
})
.Build();


Loading…
Cancel
Save