From 4807c1238722af3c688798baadd8a67691f9df0a Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Thu, 13 May 2021 00:13:31 +0200 Subject: [PATCH] Fix placing blocks Most of the removed initialitzers are actually important Also, the prefab ID was not calculated correctly Also, the category is 1, not sure why but it is --- TechbloxModdingAPI/Blocks/PlacementEngine.cs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/TechbloxModdingAPI/Blocks/PlacementEngine.cs b/TechbloxModdingAPI/Blocks/PlacementEngine.cs index 5e1b97c..b7b46d1 100644 --- a/TechbloxModdingAPI/Blocks/PlacementEngine.cs +++ b/TechbloxModdingAPI/Blocks/PlacementEngine.cs @@ -9,6 +9,7 @@ using RobocraftX.Blocks.Scaling; using RobocraftX.Character; using RobocraftX.Common; using RobocraftX.CR.MachineEditing; +using RobocraftX.Rendering; using Svelto.ECS; using Svelto.ECS.EntityStructs; using Unity.Mathematics; @@ -55,12 +56,23 @@ namespace TechbloxModdingAPI.Blocks DBEntityStruct dbEntity = new DBEntityStruct {DBID = block}; EntityInitializer structInitializer = _blockEntityFactory.Build(CommonExclusiveGroups.nextBlockEntityID, block); //The ghost block index is only used for triggers - uint prefabId = PrefabsID.GetOrCreatePrefabID(block, (byte) BlockMaterial.SteelBodywork, 0, false); + uint prefabAssetID = structInitializer.Has() + ? structInitializer.Get().prefabAssetID + : throw new BlockException("Prefab asset ID not found!"); //Set by the game + uint prefabId = PrefabsID.GetOrCreatePrefabID((ushort) prefabAssetID, (byte) BlockMaterial.SteelBodywork, 1, false); structInitializer.Init(new GFXPrefabEntityStructGPUI(prefabId)); - structInitializer.Init(new PhysicsPrefabEntityStruct(prefabId)); structInitializer.Init(dbEntity); structInitializer.Init(new PositionEntityStruct {position = position}); - structInitializer.Init(new BlockPlacementInfoStruct() + structInitializer.Init(new RotationEntityStruct {rotation = quaternion.identity}); + structInitializer.Init(new ScalingEntityStruct {scale = new float3(1, 1, 1)}); + structInitializer.Init(new GridRotationStruct + { + position = position, + rotation = quaternion.identity + }); + structInitializer.Init(new UniformBlockScaleEntityStruct {scaleFactor = 1}); + structInitializer.Get().materialId = (byte) BlockMaterial.SteelBodywork; + structInitializer.Init(new BlockPlacementInfoStruct() //TODO: Grid scale { loadedFromDisk = false, placedBy = playerId,