Added support for setting default color/material and static blocks
Also fixed setting game name/description When setting the block color or material to default it will look up the default value to use Blocks can now be set to be static so they don't fall or move at all
This commit is contained in:
parent
06cb911ea3
commit
c1c226ef2a
5 changed files with 41 additions and 28 deletions
|
@ -92,7 +92,7 @@ namespace TechbloxModdingAPI.App
|
||||||
{
|
{
|
||||||
if (!ExistsGameInfo(id)) return false;
|
if (!ExistsGameInfo(id)) return false;
|
||||||
GetGameInfo(id).GameName.Set(name);
|
GetGameInfo(id).GameName.Set(name);
|
||||||
//GetGameViewInfo(id).MyGamesSlotComponent.GameName = StringUtil.SanitiseString(name); - TODO: Input field struct
|
GetGameViewInfo(id).MyGamesSlotComponent.GameName = StringUtil.SanitiseString(name);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ namespace TechbloxModdingAPI.App
|
||||||
{
|
{
|
||||||
if (!ExistsGameInfo(id)) return false;
|
if (!ExistsGameInfo(id)) return false;
|
||||||
GetGameInfo(id).GameDescription.Set(name);
|
GetGameInfo(id).GameDescription.Set(name);
|
||||||
//GetGameViewInfo(id).MyGamesSlotComponent.GameDescription = StringUtil.SanitiseString(name); - TODO
|
GetGameViewInfo(id).MyGamesSlotComponent.GameDescription = StringUtil.SanitiseString(name);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,21 +114,14 @@ namespace TechbloxModdingAPI.App
|
||||||
return ref GetComponent<MyGameDataEntityStruct>(id);
|
return ref GetComponent<MyGameDataEntityStruct>(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*public ref MyGamesSlotEntityViewStruct GetGameViewInfo(EGID id)
|
public dynamic GetGameViewInfo(EGID id)
|
||||||
{
|
{
|
||||||
EntityCollection<MyGamesSlotEntityViewStruct> entities =
|
dynamic structOptional = AccessTools.Method("TechbloxModdingAPI.Utility.NativeApiExtensions:QueryEntityOptional", new []{typeof(EntitiesDB), typeof(EGID)})
|
||||||
entitiesDB.QueryEntities<MyGamesSlotEntityViewStruct>(MyGamesScreenExclusiveGroups.GameSlotGuiEntities);
|
.MakeGenericMethod(AccessTools.TypeByName("RobocraftX.GUI.MyGamesScreen.MyGamesSlotEntityViewStruct"))
|
||||||
var entitiesB = entities.ToBuffer().buffer;
|
.Invoke(null, new object[] {entitiesDB, new EGID(id.entityID, MyGamesScreenExclusiveGroups.GameSlotGuiEntities)});
|
||||||
for (int i = 0; i < entities.count; i++)
|
if (structOptional == null) throw new Exception("Could not get game slot entity");
|
||||||
{
|
return structOptional ? structOptional : null;
|
||||||
if (entitiesB[i].ID.entityID == id.entityID)
|
|
||||||
{
|
|
||||||
return ref entitiesB[i];
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
MyGamesSlotEntityViewStruct[] defRef = new MyGamesSlotEntityViewStruct[1];
|
|
||||||
return ref defRef[0]; - TODO: The struct is internal now
|
|
||||||
}*/
|
|
||||||
|
|
||||||
public ref T GetComponent<T>(EGID id) where T: unmanaged, IEntityComponent
|
public ref T GetComponent<T>(EGID id) where T: unmanaged, IEntityComponent
|
||||||
{
|
{
|
||||||
|
|
|
@ -248,11 +248,14 @@ namespace TechbloxModdingAPI
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
//TODO: Check if setting to 255 works
|
if (value.Color == BlockColors.Default)
|
||||||
|
value = new BlockColor(FullGameFields._dataDb.TryGetValue((int) Type, out CubeListData cld)
|
||||||
|
? cld.DefaultColour
|
||||||
|
: throw new BlockTypeException("Unknown block type! Could not set default color."));
|
||||||
ref var color = ref BlockEngine.GetBlockInfo<ColourParameterEntityStruct>(this);
|
ref var color = ref BlockEngine.GetBlockInfo<ColourParameterEntityStruct>(this);
|
||||||
color.indexInPalette = value.Index;
|
color.indexInPalette = value.Index;
|
||||||
color.hasNetworkChange = true;
|
color.hasNetworkChange = true;
|
||||||
color.paletteColour = BlockEngine.ConvertBlockColor(color.indexInPalette);
|
color.paletteColour = BlockEngine.ConvertBlockColor(color.indexInPalette); //Setting to 255 results in black
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -282,10 +285,15 @@ namespace TechbloxModdingAPI
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (!FullGameFields._dataDb.ContainsKey<MaterialPropertiesData>((byte) value))
|
byte val = (byte) value;
|
||||||
|
if (value == BlockMaterial.Default)
|
||||||
|
val = FullGameFields._dataDb.TryGetValue((int) Type, out CubeListData cld)
|
||||||
|
? cld.DefaultMaterialID
|
||||||
|
: throw new BlockTypeException("Unknown block type! Could not set default material.");
|
||||||
|
if (!FullGameFields._dataDb.ContainsKey<MaterialPropertiesData>(val))
|
||||||
throw new BlockException($"Block material {value} does not exist!");
|
throw new BlockException($"Block material {value} does not exist!");
|
||||||
BlockEngine.GetBlockInfo<CubeMaterialStruct>(this).materialId = (byte) value;
|
BlockEngine.GetBlockInfo<CubeMaterialStruct>(this).materialId = val;
|
||||||
BlockEngine.UpdatePrefab(this, (byte) value, Flipped); //TODO: Test default
|
BlockEngine.UpdatePrefab(this, val, Flipped); //The default causes the screen to go black
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -336,6 +344,15 @@ namespace TechbloxModdingAPI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether the block should be static in simulation. If set, it cannot be moved. The effect is temporary, it will not be saved with the block.
|
||||||
|
/// </summary>
|
||||||
|
public bool Static
|
||||||
|
{
|
||||||
|
get => BlockEngine.GetBlockInfo<OverrideStaticComponent>(this).staticIfUnconnected;
|
||||||
|
set => BlockEngine.GetBlockInfo<OverrideStaticComponent>(this).staticIfUnconnected = value;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Whether the block exists. The other properties will return a default value if the block doesn't exist.
|
/// Whether the block exists. The other properties will return a default value if the block doesn't exist.
|
||||||
/// If the block was just placed, then this will also return false but the properties will work correctly.
|
/// If the block was just placed, then this will also return false but the properties will work correctly.
|
||||||
|
|
|
@ -77,12 +77,6 @@ namespace TechbloxModdingAPI.Blocks.Engines
|
||||||
triggerAutoWiring = autoWire && structInitializer.Has<BlockPortsStruct>()
|
triggerAutoWiring = autoWire && structInitializer.Has<BlockPortsStruct>()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
/*structInitializer.Init(new OverrideStaticComponent()
|
|
||||||
{ //TODO
|
|
||||||
staticIfUnconnected = true
|
|
||||||
});*/
|
|
||||||
|
|
||||||
int nextFilterId = BlockGroupUtility.NextFilterId;
|
int nextFilterId = BlockGroupUtility.NextFilterId;
|
||||||
structInitializer.Init(new BlockGroupEntityComponent
|
structInitializer.Init(new BlockGroupEntityComponent
|
||||||
{
|
{
|
||||||
|
|
|
@ -24,7 +24,7 @@ namespace TechbloxModdingAPI.Interface.IMGUI
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Best-effort imitation of Techblox's UI style.
|
/// Best-effort imitation of Techblox's UI style.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static GUISkin Default //TODO: Update to Techblox style
|
public static GUISkin Default
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
|
|
@ -194,6 +194,15 @@ namespace TechbloxModdingAPI.Tests
|
||||||
Game.CurrentGame().ToggleTimeMode();
|
Game.CurrentGame().ToggleTimeMode();
|
||||||
}).Build();
|
}).Build();
|
||||||
|
|
||||||
|
CommandBuilder.Builder("testColorBlock", "Tests coloring a block to default color")
|
||||||
|
.Action(() => Player.LocalPlayer.GetBlockLookedAt().Color = BlockColors.Default).Build();
|
||||||
|
CommandBuilder.Builder("testMaterialBlock", "Tests materialing a block to default material")
|
||||||
|
.Action(() => Player.LocalPlayer.GetBlockLookedAt().Material = BlockMaterial.Default).Build();
|
||||||
|
CommandBuilder.Builder("testGameName", "Tests changing the game name")
|
||||||
|
.Action(() => Game.CurrentGame().Name = "Test").Build();
|
||||||
|
CommandBuilder.Builder("makeBlockStatic", "Makes a block you look at static")
|
||||||
|
.Action(() => Player.LocalPlayer.GetBlockLookedAt().Static = true).Build();
|
||||||
|
|
||||||
Game.AddPersistentDebugInfo("InstalledMods", InstalledMods);
|
Game.AddPersistentDebugInfo("InstalledMods", InstalledMods);
|
||||||
Block.Placed += (sender, args) =>
|
Block.Placed += (sender, args) =>
|
||||||
Logging.MetaDebugLog("Placed block " + args.Block);
|
Logging.MetaDebugLog("Placed block " + args.Block);
|
||||||
|
|
Loading…
Reference in a new issue