Compare commits
22 commits
Author | SHA1 | Date | |
---|---|---|---|
|
ae069f6d93 | ||
|
53564b9c56 | ||
|
d761e4c16a | ||
|
89f5d9eb43 | ||
|
c3dc80fc84 | ||
|
3c00d05a3b | ||
|
0e65267e88 | ||
|
85c1342313 | ||
|
3c9c60b679 | ||
|
84fc330b12 | ||
|
d2a2ce52f0 | ||
|
742bcf25ef | ||
16f833ceda | |||
a0ab2ec9e7 | |||
30a3f5001f | |||
db5ff7223c | |||
02401f39f9 | |||
60cf8bdd67 | |||
ab169fb87c | |||
5bc0351bd1 | |||
bd813d852d | |||
|
4b35647c0b |
19 changed files with 1428 additions and 315 deletions
37
Pixi/Audio/AudioFakeImporter.cs
Normal file
37
Pixi/Audio/AudioFakeImporter.cs
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
using System;
|
||||||
|
using GamecraftModdingAPI;
|
||||||
|
using GamecraftModdingAPI.Utility;
|
||||||
|
using Pixi.Common;
|
||||||
|
|
||||||
|
namespace Pixi.Audio
|
||||||
|
{
|
||||||
|
public class AudioFakeImporter : Importer
|
||||||
|
{
|
||||||
|
public int Priority { get; } = 0;
|
||||||
|
public bool Optimisable { get; } = false;
|
||||||
|
public string Name { get; } = "AudioWarning~Spell";
|
||||||
|
public BlueprintProvider BlueprintProvider { get; } = null;
|
||||||
|
public bool Qualifies(string name)
|
||||||
|
{
|
||||||
|
return name.EndsWith(".flac", StringComparison.InvariantCultureIgnoreCase)
|
||||||
|
|| name.EndsWith(".ogg", StringComparison.InvariantCultureIgnoreCase)
|
||||||
|
|| name.EndsWith(".mp3", StringComparison.InvariantCultureIgnoreCase)
|
||||||
|
|| name.EndsWith(".wav", StringComparison.InvariantCultureIgnoreCase)
|
||||||
|
|| name.EndsWith(".aac", StringComparison.InvariantCultureIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BlockJsonInfo[] Import(string name)
|
||||||
|
{
|
||||||
|
Logging.CommandLogWarning($"Audio importing only works with MIDI (.mid) files, which '{name}' is not.\nThere are many converters online, but for best quality use a MIDI file made from a music transcription.\nFor example, musescore.com has lots of good transcriptions and they offer a 30-day free trial.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PreProcess(string name, ref ProcessedVoxelObjectNotation[] blocks)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PostProcess(string name, ref Block[] blocks)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
106
Pixi/Audio/AudioTools.cs
Normal file
106
Pixi/Audio/AudioTools.cs
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using GamecraftModdingAPI.Utility;
|
||||||
|
using Melanchall.DryWetMidi.Common;
|
||||||
|
|
||||||
|
namespace Pixi.Audio
|
||||||
|
{
|
||||||
|
public static class AudioTools
|
||||||
|
{
|
||||||
|
private static Dictionary<byte, byte> programMap = null;
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static byte TrackType(FourBitNumber channel)
|
||||||
|
{
|
||||||
|
return TrackType((byte) channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static byte TrackType(byte channel)
|
||||||
|
{
|
||||||
|
if (programMap.ContainsKey(channel)) return programMap[channel];
|
||||||
|
#if DEBUG
|
||||||
|
Logging.MetaLog($"Using default value (piano) for channel number {channel}");
|
||||||
|
#endif
|
||||||
|
return 5; // Piano
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static float VelocityToVolume(SevenBitNumber velocity)
|
||||||
|
{
|
||||||
|
// faster key hit means louder note
|
||||||
|
return 100f * velocity / ((float) SevenBitNumber.MaxValue + 1f);
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
internal static void GenerateProgramMap()
|
||||||
|
{
|
||||||
|
programMap = new Dictionary<byte, byte>
|
||||||
|
{
|
||||||
|
{0, 5 /* Piano */},
|
||||||
|
{1, 5},
|
||||||
|
{2, 5},
|
||||||
|
{3, 5},
|
||||||
|
{4, 5},
|
||||||
|
{5, 5},
|
||||||
|
{6, 5},
|
||||||
|
{7, 5},
|
||||||
|
{8, 0 /* Kick Drum */},
|
||||||
|
{9, 0},
|
||||||
|
{10, 0},
|
||||||
|
{11, 0},
|
||||||
|
{12, 0},
|
||||||
|
{13, 0},
|
||||||
|
{14, 0},
|
||||||
|
{15, 0},
|
||||||
|
{24, 6 /* Guitar 1 (Acoustic) */},
|
||||||
|
{25, 6},
|
||||||
|
{26, 6},
|
||||||
|
{27, 6},
|
||||||
|
{28, 6},
|
||||||
|
{29, 7 /* Guitar 2 (Dirty Electric) */},
|
||||||
|
{30, 7},
|
||||||
|
{32, 6},
|
||||||
|
{33, 6},
|
||||||
|
{34, 6},
|
||||||
|
{35, 6},
|
||||||
|
{36, 6},
|
||||||
|
{37, 6},
|
||||||
|
{38, 6},
|
||||||
|
{39, 6},
|
||||||
|
{56, 8 /* Trumpet */}, // basically all brass & reeds are trumpets... that's how music works right?
|
||||||
|
{57, 8},
|
||||||
|
{58, 8},
|
||||||
|
{59, 8},
|
||||||
|
{60, 8},
|
||||||
|
{61, 8},
|
||||||
|
{62, 8},
|
||||||
|
{63, 8},
|
||||||
|
{64, 8},
|
||||||
|
{65, 8},
|
||||||
|
{66, 8},
|
||||||
|
{67, 8},
|
||||||
|
{68, 8},
|
||||||
|
{69, 8}, // Nice
|
||||||
|
{70, 8},
|
||||||
|
{71, 8},
|
||||||
|
{72, 8},
|
||||||
|
{73, 8},
|
||||||
|
{74, 8},
|
||||||
|
{75, 8},
|
||||||
|
{76, 8},
|
||||||
|
{77, 8},
|
||||||
|
{78, 8},
|
||||||
|
{79, 8},
|
||||||
|
{112, 0},
|
||||||
|
{113, 0},
|
||||||
|
{114, 0},
|
||||||
|
{115, 0},
|
||||||
|
{116, 0},
|
||||||
|
{117, 4 /* Tom Drum */},
|
||||||
|
{118, 4},
|
||||||
|
{119, 3 /* Open High Hat */},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
207
Pixi/Audio/MidiImporter.cs
Normal file
207
Pixi/Audio/MidiImporter.cs
Normal file
|
@ -0,0 +1,207 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
using GamecraftModdingAPI;
|
||||||
|
using GamecraftModdingAPI.Players;
|
||||||
|
using GamecraftModdingAPI.Blocks;
|
||||||
|
using GamecraftModdingAPI.Utility;
|
||||||
|
using Melanchall.DryWetMidi.Common;
|
||||||
|
using Melanchall.DryWetMidi.Core;
|
||||||
|
using Melanchall.DryWetMidi.Devices;
|
||||||
|
using Melanchall.DryWetMidi.Interaction;
|
||||||
|
|
||||||
|
using Pixi.Common;
|
||||||
|
using Unity.Mathematics;
|
||||||
|
|
||||||
|
namespace Pixi.Audio
|
||||||
|
{
|
||||||
|
public class MidiImporter : Importer
|
||||||
|
{
|
||||||
|
public int Priority { get; } = 1;
|
||||||
|
public bool Optimisable { get; } = false;
|
||||||
|
public string Name { get; } = "Midi~Spell";
|
||||||
|
public BlueprintProvider BlueprintProvider { get; } = null;
|
||||||
|
|
||||||
|
private Dictionary<string, MidiFile> openFiles = new Dictionary<string, MidiFile>();
|
||||||
|
|
||||||
|
public static bool ThreeDee = false;
|
||||||
|
|
||||||
|
public static float Spread = 1f;
|
||||||
|
|
||||||
|
public static byte Key = 0;
|
||||||
|
|
||||||
|
public static float VolumeMultiplier = 1f;
|
||||||
|
|
||||||
|
public MidiImporter()
|
||||||
|
{
|
||||||
|
AudioTools.GenerateProgramMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Qualifies(string name)
|
||||||
|
{
|
||||||
|
return name.EndsWith(".mid", StringComparison.InvariantCultureIgnoreCase)
|
||||||
|
|| name.EndsWith(".midi", StringComparison.InvariantCultureIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BlockJsonInfo[] Import(string name)
|
||||||
|
{
|
||||||
|
MidiFile midi = MidiFile.Read(name);
|
||||||
|
openFiles[name] = midi;
|
||||||
|
Logging.MetaLog($"Found {midi.GetNotes().Count()} notes over {midi.GetDuration<MidiTimeSpan>().TimeSpan} time units");
|
||||||
|
BlockJsonInfo[] blocks = new BlockJsonInfo[(midi.GetNotes().Count() * 2) + 3];
|
||||||
|
List<BlockJsonInfo> blocksToBuild = new List<BlockJsonInfo>();
|
||||||
|
// convert Midi notes to sfx blocks
|
||||||
|
Dictionary<long, uint> breadthCache = new Dictionary<long, uint>();
|
||||||
|
Dictionary<long, uint> depthCache = new Dictionary<long, uint>();
|
||||||
|
HashSet<long> timerCache = new HashSet<long>();
|
||||||
|
//uint count = 0;
|
||||||
|
float zdepth = 0;
|
||||||
|
foreach (Note n in midi.GetNotes())
|
||||||
|
{
|
||||||
|
long microTime = n.TimeAs<MetricTimeSpan>(midi.GetTempoMap()).TotalMicroseconds;
|
||||||
|
float breadth = 0f;
|
||||||
|
if (!timerCache.Contains(microTime))
|
||||||
|
{
|
||||||
|
depthCache[microTime] = (uint)++zdepth;
|
||||||
|
breadthCache[microTime] = 1;
|
||||||
|
timerCache.Add(microTime);
|
||||||
|
blocksToBuild.Add(new BlockJsonInfo
|
||||||
|
{
|
||||||
|
name = GamecraftModdingAPI.Blocks.BlockIDs.Timer.ToString(),
|
||||||
|
position = new float[] { breadth * 0.2f * Spread, 2 * 0.2f, zdepth * 0.2f * Spread},
|
||||||
|
rotation = new float[] { 0, 0, 0},
|
||||||
|
color = new float[] { -1, -1, -1},
|
||||||
|
scale = new float[] { 1, 1, 1},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
zdepth = depthCache[microTime]; // remember the z-position of notes played at the same moment (so they can be placed adjacent to each other)
|
||||||
|
breadth += breadthCache[microTime]++; // if multiple notes exist for a given time, place them beside each other on the x-axis
|
||||||
|
}
|
||||||
|
blocksToBuild.Add(new BlockJsonInfo
|
||||||
|
{
|
||||||
|
name = GamecraftModdingAPI.Blocks.BlockIDs.SFXBlockInstrument.ToString(),
|
||||||
|
position = new float[] { breadth * 0.2f * Spread, 1 * 0.2f, zdepth * 0.2f * Spread},
|
||||||
|
rotation = new float[] { 0, 0, 0},
|
||||||
|
color = new float[] { -1, -1, -1},
|
||||||
|
scale = new float[] { 1, 1, 1},
|
||||||
|
});
|
||||||
|
/*
|
||||||
|
blocks[count] = new BlockJsonInfo
|
||||||
|
{
|
||||||
|
name = GamecraftModdingAPI.Blocks.BlockIDs.Timer.ToString(),
|
||||||
|
position = new float[] { breadth * 0.2f * Spread, 2 * 0.2f, zdepth * 0.2f * Spread},
|
||||||
|
rotation = new float[] { 0, 0, 0},
|
||||||
|
color = new float[] { -1, -1, -1},
|
||||||
|
scale = new float[] { 1, 1, 1},
|
||||||
|
};
|
||||||
|
count++;
|
||||||
|
blocks[count] = new BlockJsonInfo
|
||||||
|
{
|
||||||
|
name = GamecraftModdingAPI.Blocks.BlockIDs.SFXBlockInstrument.ToString(),
|
||||||
|
position = new float[] { breadth * 0.2f * Spread, 1 * 0.2f, zdepth * 0.2f * Spread},
|
||||||
|
rotation = new float[] { 0, 0, 0},
|
||||||
|
color = new float[] { -1, -1, -1},
|
||||||
|
scale = new float[] { 1, 1, 1},
|
||||||
|
};
|
||||||
|
count++;*/
|
||||||
|
}
|
||||||
|
// playback IO (reset & play)
|
||||||
|
blocksToBuild.Add(new BlockJsonInfo
|
||||||
|
{
|
||||||
|
name = GamecraftModdingAPI.Blocks.BlockIDs.SimpleConnector.ToString(),
|
||||||
|
position = new float[] { -0.2f, 3 * 0.2f, 0},
|
||||||
|
rotation = new float[] { 0, 0, 0},
|
||||||
|
color = new float[] { -1, -1, -1},
|
||||||
|
scale = new float[] { 1, 1, 1},
|
||||||
|
}); // play is second last (placed above stop)
|
||||||
|
blocksToBuild.Add(new BlockJsonInfo
|
||||||
|
{
|
||||||
|
name = GamecraftModdingAPI.Blocks.BlockIDs.SimpleConnector.ToString(),
|
||||||
|
position = new float[] { -0.2f, 2 * 0.2f, 0},
|
||||||
|
rotation = new float[] { 0, 0, 0},
|
||||||
|
color = new float[] { -1, -1, -1},
|
||||||
|
scale = new float[] { 1, 1, 1},
|
||||||
|
}); // stop is middle (placed above reset)
|
||||||
|
blocksToBuild.Add(new BlockJsonInfo
|
||||||
|
{
|
||||||
|
name = GamecraftModdingAPI.Blocks.BlockIDs.SimpleConnector.ToString(),
|
||||||
|
position = new float[] { -0.2f, 1 * 0.2f, 0},
|
||||||
|
rotation = new float[] { 0, 0, 0},
|
||||||
|
color = new float[] { -1, -1, -1},
|
||||||
|
scale = new float[] { 1, 1, 1},
|
||||||
|
}); // reset is last (placed below stop)
|
||||||
|
return blocksToBuild.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PreProcess(string name, ref ProcessedVoxelObjectNotation[] blocks)
|
||||||
|
{
|
||||||
|
Player p = new Player(PlayerType.Local);
|
||||||
|
float3 pos = p.Position;
|
||||||
|
for (int i = 0; i < blocks.Length; i++)
|
||||||
|
{
|
||||||
|
blocks[i].position += pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PostProcess(string name, ref Block[] blocks)
|
||||||
|
{
|
||||||
|
// playback IO
|
||||||
|
LogicGate startConnector = blocks[blocks.Length - 3].Specialise<LogicGate>();
|
||||||
|
LogicGate stopConnector = blocks[blocks.Length - 2].Specialise<LogicGate>();
|
||||||
|
LogicGate resetConnector = blocks[blocks.Length - 1].Specialise<LogicGate>();
|
||||||
|
uint count = 0;
|
||||||
|
// generate channel data
|
||||||
|
byte[] channelPrograms = new byte[16];
|
||||||
|
for (byte i = 0; i < channelPrograms.Length; i++) // init array
|
||||||
|
{
|
||||||
|
channelPrograms[i] = 5; // Piano
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (TimedEvent e in openFiles[name].GetTimedEvents())
|
||||||
|
{
|
||||||
|
if (e.Event.EventType == MidiEventType.ProgramChange)
|
||||||
|
{
|
||||||
|
ProgramChangeEvent pce = (ProgramChangeEvent) e.Event;
|
||||||
|
channelPrograms[pce.Channel] = AudioTools.TrackType(pce.ProgramNumber);
|
||||||
|
#if DEBUG
|
||||||
|
Logging.MetaLog($"Detected channel {pce.Channel} as program {pce.ProgramNumber} (index {channelPrograms[pce.Channel]})");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer t = null;
|
||||||
|
//count = 0;
|
||||||
|
foreach (Note n in openFiles[name].GetNotes())
|
||||||
|
{
|
||||||
|
while (blocks[count].Type == BlockIDs.Timer)
|
||||||
|
{
|
||||||
|
// set timing info
|
||||||
|
#if DEBUG
|
||||||
|
Logging.Log($"Handling Timer for notes at {n.TimeAs<MetricTimeSpan>(openFiles[name].GetTempoMap()).TotalMicroseconds * 0.000001f}s");
|
||||||
|
#endif
|
||||||
|
t = blocks[count].Specialise<Timer>();
|
||||||
|
t.Start = 0;
|
||||||
|
t.End = 0.01f + n.TimeAs<MetricTimeSpan>(openFiles[name].GetTempoMap()).TotalMicroseconds * 0.000001f;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
// set notes info
|
||||||
|
SfxBlock sfx = blocks[count].Specialise<SfxBlock>();
|
||||||
|
sfx.Pitch = n.NoteNumber - 60 + Key; // In MIDI, 60 is middle C, but GC uses 0 for middle C
|
||||||
|
sfx.TrackIndex = channelPrograms[n.Channel];
|
||||||
|
sfx.Is3D = ThreeDee;
|
||||||
|
sfx.Volume = AudioTools.VelocityToVolume(n.Velocity) * VolumeMultiplier;
|
||||||
|
count++;
|
||||||
|
// connect wires
|
||||||
|
if (t == null) continue; // this should never happen
|
||||||
|
t.Connect(0, sfx, 0);
|
||||||
|
startConnector.Connect(0, t, 0);
|
||||||
|
stopConnector.Connect(0, t, 1);
|
||||||
|
resetConnector.Connect(0, t, 2);
|
||||||
|
}
|
||||||
|
openFiles.Remove(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -20,7 +20,7 @@ namespace Pixi.Common
|
||||||
|
|
||||||
internal ProcessedVoxelObjectNotation Process()
|
internal ProcessedVoxelObjectNotation Process()
|
||||||
{
|
{
|
||||||
BlockIDs block = ConversionUtility.BlockIDsToEnum(name);
|
BlockIDs block = ConversionUtility.BlockIDsToEnum(name.Split('\t')[0]);
|
||||||
return new ProcessedVoxelObjectNotation
|
return new ProcessedVoxelObjectNotation
|
||||||
{
|
{
|
||||||
block = block,
|
block = block,
|
||||||
|
|
|
@ -17,7 +17,14 @@ namespace Pixi.Common
|
||||||
|
|
||||||
public static Dictionary<string, BlockJsonInfo[]> ParseBlueprintResource(string name)
|
public static Dictionary<string, BlockJsonInfo[]> ParseBlueprintResource(string name)
|
||||||
{
|
{
|
||||||
StreamReader bluemap = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(name));
|
StreamReader bluemap;
|
||||||
|
#if DEBUG
|
||||||
|
if (File.Exists(name))
|
||||||
|
bluemap = File.OpenText(name);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
bluemap = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(name));
|
||||||
|
using (bluemap)
|
||||||
return JsonConvert.DeserializeObject<Dictionary<string, BlockJsonInfo[]>>(bluemap.ReadToEnd());
|
return JsonConvert.DeserializeObject<Dictionary<string, BlockJsonInfo[]>>(bluemap.ReadToEnd());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,15 +4,22 @@ using System.Collections.Generic;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEngine.AddressableAssets;
|
||||||
|
using UnityEngine.ResourceManagement.AsyncOperations;
|
||||||
|
|
||||||
|
using GamecraftModdingAPI.App;
|
||||||
using GamecraftModdingAPI.Blocks;
|
using GamecraftModdingAPI.Blocks;
|
||||||
|
using GamecraftModdingAPI.Tasks;
|
||||||
using GamecraftModdingAPI.Utility;
|
using GamecraftModdingAPI.Utility;
|
||||||
|
using MiniJSON;
|
||||||
|
using Svelto.Tasks;
|
||||||
|
using UnityEngine.ResourceManagement.ResourceLocations;
|
||||||
|
|
||||||
namespace Pixi.Common
|
namespace Pixi.Common
|
||||||
{
|
{
|
||||||
public static class ColorSpaceUtility
|
public static class ColorSpaceUtility
|
||||||
{
|
{
|
||||||
private const float optimal_delta = 0.2f;
|
private const float optimal_delta = 0.1f;
|
||||||
|
|
||||||
private static Dictionary<BlockColor, float[]> colorMap = null;
|
private static Dictionary<BlockColor, float[]> colorMap = null;
|
||||||
|
|
||||||
|
@ -21,7 +28,7 @@ namespace Pixi.Common
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static BlockColor QuantizeToBlockColor(Color pixel)
|
public static BlockColor QuantizeToBlockColor(Color pixel)
|
||||||
{
|
{
|
||||||
if (colorMap == null) BuildColorMap();
|
//if (colorMap == null) BuildColorMap();
|
||||||
float[] closest = new float[3] { 1, 1, 1 };
|
float[] closest = new float[3] { 1, 1, 1 };
|
||||||
BlockColor c = new BlockColor
|
BlockColor c = new BlockColor
|
||||||
{
|
{
|
||||||
|
@ -43,14 +50,14 @@ namespace Pixi.Common
|
||||||
if (geometricClosest < optimal_delta)
|
if (geometricClosest < optimal_delta)
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
Logging.MetaLog($"Final delta ({closest[0]},{closest[1]},{closest[2]}) t:{geometricClosest}");
|
//Logging.MetaLog($"Final delta ({closest[0]},{closest[1]},{closest[2]}) t:{geometricClosest}");
|
||||||
#endif
|
#endif
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
Logging.MetaLog($"Final delta ({closest[0]},{closest[1]},{closest[2]}) t:{geometricClosest}");
|
//Logging.MetaLog($"Final delta ({closest[0]},{closest[1]},{closest[2]}) t:{geometricClosest}");
|
||||||
#endif
|
#endif
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
@ -79,7 +86,7 @@ namespace Pixi.Common
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static float[] UnquantizeToArray(BlockColor c)
|
public static float[] UnquantizeToArray(BlockColor c)
|
||||||
{
|
{
|
||||||
if (colorMap == null) BuildColorMap();
|
//if (colorMap == null) BuildColorMap();
|
||||||
return colorMap[c];
|
return colorMap[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,22 +117,15 @@ namespace Pixi.Common
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void LoadColorMenuEvent(object caller, MenuEventArgs info)
|
||||||
|
{
|
||||||
|
Scheduler.Schedule(new AsyncRunner());
|
||||||
|
}
|
||||||
|
|
||||||
private static void BuildColorMap()
|
private static void BuildColorMap()
|
||||||
{
|
{
|
||||||
|
// old manual version for building color map
|
||||||
colorMap = new Dictionary<BlockColor, float[]>();
|
colorMap = new Dictionary<BlockColor, float[]>();
|
||||||
// TODO create actual color map
|
|
||||||
foreach (BlockColors c in Enum.GetValues(typeof(BlockColors)))
|
|
||||||
{
|
|
||||||
for (byte d = 0; d < 10; d++)
|
|
||||||
{
|
|
||||||
BlockColor colorStruct = new BlockColor
|
|
||||||
{
|
|
||||||
Color = c,
|
|
||||||
Darkness = d,
|
|
||||||
};
|
|
||||||
colorMap[colorStruct] = new float[3] { 1f, 0f, 1f };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// this was done manually -- never again
|
// this was done manually -- never again
|
||||||
// White
|
// White
|
||||||
colorMap[new BlockColor { Color = BlockColors.White, Darkness = 0 }] = new float[3] { 1f, 1f, 1f};
|
colorMap[new BlockColor { Color = BlockColors.White, Darkness = 0 }] = new float[3] { 1f, 1f, 1f};
|
||||||
|
@ -281,5 +281,42 @@ namespace Pixi.Common
|
||||||
botColorMap[31] = new BlockColor { Color = BlockColors.Pink, Darkness = 4 };
|
botColorMap[31] = new BlockColor { Color = BlockColors.Pink, Darkness = 4 };
|
||||||
botColorMap[15] = new BlockColor { Color = BlockColors.Red, Darkness = 3 };
|
botColorMap[15] = new BlockColor { Color = BlockColors.Red, Darkness = 3 };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class AsyncRunner : ISchedulable
|
||||||
|
{
|
||||||
|
public IEnumerator<TaskContract> Run()
|
||||||
|
{
|
||||||
|
AsyncOperationHandle<TextAsset> asyncHandle = Addressables.LoadAssetAsync<TextAsset>("colours");
|
||||||
|
yield return asyncHandle.Continue();
|
||||||
|
Dictionary<string, object> colourData = Json.Deserialize(asyncHandle.Result.text) as Dictionary<string, object>;
|
||||||
|
if (colourData == null) yield break;
|
||||||
|
Client.EnterMenu -= LoadColorMenuEvent;
|
||||||
|
// Logging.MetaLog((List<object>)((colourData["Colours"] as Dictionary<string, object>)["Data"] as Dictionary<string, object>)["Slots"]);
|
||||||
|
// Generate color map
|
||||||
|
List<object> hexColors =
|
||||||
|
(((colourData["Colours"] as Dictionary<string, object>)?["Data"] as Dictionary<string, object>)?
|
||||||
|
["Slots"] as List<object>);
|
||||||
|
int count = 0;
|
||||||
|
colorMap = new Dictionary<BlockColor, float[]>();
|
||||||
|
for (byte d = 0; d < 10; d++)
|
||||||
|
{
|
||||||
|
foreach (BlockColors c in Enum.GetValues(typeof(BlockColors)))
|
||||||
|
{
|
||||||
|
if (c != BlockColors.Default)
|
||||||
|
{
|
||||||
|
BlockColor colorStruct = new BlockColor
|
||||||
|
{
|
||||||
|
Color = c,
|
||||||
|
Darkness = d,
|
||||||
|
};
|
||||||
|
Color pixel = Images.PixelUtility.PixelHex((string)hexColors[count]);
|
||||||
|
colorMap[colorStruct] = new float[] {pixel.r, pixel.g, pixel.b};
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
yield return asyncHandle.Continue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Threading;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using Unity.Mathematics;
|
using Unity.Mathematics;
|
||||||
using Svelto.ECS;
|
using Svelto.ECS;
|
||||||
|
@ -10,6 +12,7 @@ using GamecraftModdingAPI;
|
||||||
using GamecraftModdingAPI.Blocks;
|
using GamecraftModdingAPI.Blocks;
|
||||||
using GamecraftModdingAPI.Commands;
|
using GamecraftModdingAPI.Commands;
|
||||||
using GamecraftModdingAPI.Utility;
|
using GamecraftModdingAPI.Utility;
|
||||||
|
using Svelto.DataStructures;
|
||||||
|
|
||||||
namespace Pixi.Common
|
namespace Pixi.Common
|
||||||
{
|
{
|
||||||
|
@ -41,12 +44,60 @@ namespace Pixi.Common
|
||||||
|
|
||||||
public Dictionary<int, Importer[]> importers = new Dictionary<int, Importer[]>();
|
public Dictionary<int, Importer[]> importers = new Dictionary<int, Importer[]>();
|
||||||
|
|
||||||
|
public static ThreadSafeDictionary<int, bool> optimisableBlockCache = new ThreadSafeDictionary<int, bool>();
|
||||||
|
|
||||||
public const float BLOCK_SIZE = 0.2f;
|
public const float BLOCK_SIZE = 0.2f;
|
||||||
|
|
||||||
public const float DELTA = BLOCK_SIZE / 2048;
|
public const float DELTA = BLOCK_SIZE / 2048;
|
||||||
|
|
||||||
public static int OPTIMISATION_PASSES = 2;
|
public static int OPTIMISATION_PASSES = 2;
|
||||||
|
|
||||||
|
public static int GROUP_SIZE = 32;
|
||||||
|
|
||||||
|
// optimisation algorithm constants
|
||||||
|
private static float3[] cornerMultiplicands1 = new float3[8]
|
||||||
|
{
|
||||||
|
new float3(1, 1, 1),
|
||||||
|
new float3(1, 1, -1),
|
||||||
|
new float3(-1, 1, 1),
|
||||||
|
new float3(-1, 1, -1),
|
||||||
|
new float3(-1, -1, 1),
|
||||||
|
new float3(-1, -1, -1),
|
||||||
|
new float3(1, -1, 1),
|
||||||
|
new float3(1, -1, -1),
|
||||||
|
};
|
||||||
|
private static float3[] cornerMultiplicands2 = new float3[8]
|
||||||
|
{
|
||||||
|
new float3(1, 1, 1),
|
||||||
|
new float3(1, 1, -1),
|
||||||
|
new float3(1, -1, 1),
|
||||||
|
new float3(1, -1, -1),
|
||||||
|
new float3(-1, 1, 1),
|
||||||
|
new float3(-1, 1, -1),
|
||||||
|
new float3(-1, -1, 1),
|
||||||
|
new float3(-1, -1, -1),
|
||||||
|
};
|
||||||
|
private static int[][] cornerFaceMappings = new int[][]
|
||||||
|
{
|
||||||
|
new int[] {0, 1, 2, 3}, // top
|
||||||
|
new int[] {2, 3, 4, 5}, // left
|
||||||
|
new int[] {4, 5, 6, 7}, // bottom
|
||||||
|
new int[] {6, 7, 0, 1}, // right
|
||||||
|
new int[] {0, 2, 4, 6}, // back
|
||||||
|
new int[] {1, 3, 5, 7}, // front
|
||||||
|
};
|
||||||
|
private static int[][] oppositeFaceMappings = new int[][]
|
||||||
|
{
|
||||||
|
new int[] {6, 7, 4, 5}, // bottom
|
||||||
|
new int[] {0, 1, 6, 7}, // right
|
||||||
|
new int[] {2, 3, 0, 1}, // top
|
||||||
|
new int[] {4, 5, 2, 3}, // left
|
||||||
|
new int[] {1, 3, 5, 7}, // front
|
||||||
|
new int[] {0, 2, 4, 6}, // back
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public CommandRoot()
|
public CommandRoot()
|
||||||
{
|
{
|
||||||
CommandManager.AddCommand(this);
|
CommandManager.AddCommand(this);
|
||||||
|
@ -106,7 +157,7 @@ namespace Pixi.Common
|
||||||
#endif
|
#endif
|
||||||
// import blocks
|
// import blocks
|
||||||
BlockJsonInfo[] blocksInfo = magicImporter.Import(name);
|
BlockJsonInfo[] blocksInfo = magicImporter.Import(name);
|
||||||
if (blocksInfo.Length == 0)
|
if (blocksInfo == null || blocksInfo.Length == 0)
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
Logging.CommandLogError($"Importer {magicImporter.Name} didn't provide any blocks to import. Mission Aborted!");
|
Logging.CommandLogError($"Importer {magicImporter.Name} didn't provide any blocks to import. Mission Aborted!");
|
||||||
|
@ -144,7 +195,7 @@ namespace Pixi.Common
|
||||||
{
|
{
|
||||||
for (int pass = 0; pass < OPTIMISATION_PASSES; pass++)
|
for (int pass = 0; pass < OPTIMISATION_PASSES; pass++)
|
||||||
{
|
{
|
||||||
OptimiseBlocks(ref optVONs);
|
OptimiseBlocks(ref optVONs, (pass + 1) * GROUP_SIZE);
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
Logging.MetaLog($"Optimisation pass {pass} completed");
|
Logging.MetaLog($"Optimisation pass {pass} completed");
|
||||||
#endif
|
#endif
|
||||||
|
@ -166,7 +217,16 @@ namespace Pixi.Common
|
||||||
desc.color.Darkness, 1, desc.scale);
|
desc.color.Darkness, 1, desc.scale);
|
||||||
blocks[i] = b;
|
blocks[i] = b;
|
||||||
}
|
}
|
||||||
|
#if DEBUG
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Logging.LogWarning($"Found invalid block at index {i}\n\t{optVONsArr[i].ToString()}");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
// handle special block parameters
|
||||||
|
PostProcessSpecialBlocks(ref optVONsArr, ref blocks);
|
||||||
|
// post processing
|
||||||
magicImporter.PostProcess(name, ref blocks);
|
magicImporter.PostProcess(name, ref blocks);
|
||||||
if (magicImporter.Optimisable && blockCountPreOptimisation > blocks.Length)
|
if (magicImporter.Optimisable && blockCountPreOptimisation > blocks.Length)
|
||||||
{
|
{
|
||||||
|
@ -179,7 +239,66 @@ namespace Pixi.Common
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OptimiseBlocks(ref List<ProcessedVoxelObjectNotation> optVONs)
|
private void OptimiseBlocks(ref List<ProcessedVoxelObjectNotation> optVONs, int chunkSize)
|
||||||
|
{
|
||||||
|
// Reduce blocks to place to reduce lag while placing and from excessive blocks in the world.
|
||||||
|
// Blocks are reduced by grouping similar blocks that are touching (before they're placed)
|
||||||
|
// multithreaded because this is an expensive (slow) operation
|
||||||
|
int item = 0;
|
||||||
|
ProcessedVoxelObjectNotation[][] groups = new ProcessedVoxelObjectNotation[optVONs.Count / chunkSize][];
|
||||||
|
Thread[] tasks = new Thread[groups.Length];
|
||||||
|
while (item < groups.Length)
|
||||||
|
{
|
||||||
|
groups[item] = new ProcessedVoxelObjectNotation[chunkSize];
|
||||||
|
optVONs.CopyTo(item * chunkSize, groups[item], 0, chunkSize);
|
||||||
|
int tmpItem = item; // scope is dumb
|
||||||
|
tasks[item] = new Thread(() =>
|
||||||
|
{
|
||||||
|
groups[tmpItem] = groupBlocksBestEffort(groups[tmpItem], tmpItem);
|
||||||
|
});
|
||||||
|
tasks[item].Start();
|
||||||
|
item++;
|
||||||
|
}
|
||||||
|
#if DEBUG
|
||||||
|
Logging.MetaLog($"Created {groups.Length} + 1? groups");
|
||||||
|
#endif
|
||||||
|
// final group
|
||||||
|
ProcessedVoxelObjectNotation[] finalGroup = null;
|
||||||
|
Thread finalThread = null;
|
||||||
|
if (optVONs.Count > item * chunkSize)
|
||||||
|
{
|
||||||
|
//finalGroup = optVONs.GetRange(item * GROUP_SIZE, optVONs.Count - (item * GROUP_SIZE)).ToArray();
|
||||||
|
finalGroup = new ProcessedVoxelObjectNotation[optVONs.Count - (item * chunkSize)];
|
||||||
|
optVONs.CopyTo(item * chunkSize, finalGroup, 0, optVONs.Count - (item * chunkSize));
|
||||||
|
finalThread = new Thread(() =>
|
||||||
|
{
|
||||||
|
finalGroup = groupBlocksBestEffort(finalGroup, -1);
|
||||||
|
});
|
||||||
|
finalThread.Start();
|
||||||
|
}
|
||||||
|
// gather results
|
||||||
|
List<ProcessedVoxelObjectNotation> result = new List<ProcessedVoxelObjectNotation>();
|
||||||
|
for (int i = 0; i < groups.Length; i++)
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
Logging.MetaLog($"Waiting for completion of task {i}");
|
||||||
|
#endif
|
||||||
|
tasks[i].Join();
|
||||||
|
result.AddRange(groups[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (finalThread != null)
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
Logging.MetaLog($"Waiting for completion of final task");
|
||||||
|
#endif
|
||||||
|
finalThread.Join();
|
||||||
|
result.AddRange(finalGroup);
|
||||||
|
}
|
||||||
|
optVONs = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ProcessedVoxelObjectNotation[] groupBlocksBestEffort(ProcessedVoxelObjectNotation[] blocksToOptimise, int id)
|
||||||
{
|
{
|
||||||
// a really complicated algorithm to determine if two similar blocks are touching (before they're placed)
|
// a really complicated algorithm to determine if two similar blocks are touching (before they're placed)
|
||||||
// the general concept:
|
// the general concept:
|
||||||
|
@ -194,17 +313,25 @@ namespace Pixi.Common
|
||||||
// this means it's not safe to assume that block A's common face (top) can be swapped with block B's non-common opposite face (top) to get the merged block
|
// this means it's not safe to assume that block A's common face (top) can be swapped with block B's non-common opposite face (top) to get the merged block
|
||||||
//
|
//
|
||||||
// note2: this does not work with blocks which aren't cubes (i.e. any block where rotation matters)
|
// note2: this does not work with blocks which aren't cubes (i.e. any block where rotation matters)
|
||||||
// TODO multithread this expensive operation
|
try
|
||||||
int item = 0;
|
|
||||||
while (item < optVONs.Count)
|
|
||||||
{
|
{
|
||||||
|
#if DEBUG
|
||||||
|
Stopwatch timer = Stopwatch.StartNew();
|
||||||
|
#endif
|
||||||
|
FasterList<ProcessedVoxelObjectNotation> optVONs = new FasterList<ProcessedVoxelObjectNotation>(blocksToOptimise);
|
||||||
|
int item = 0;
|
||||||
|
while (item < optVONs.count - 1)
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
Logging.MetaLog($"({id}) Now grouping item {item}/{optVONs.count} ({100f * item/(float)optVONs.count}%)");
|
||||||
|
#endif
|
||||||
bool isItemUpdated = false;
|
bool isItemUpdated = false;
|
||||||
ProcessedVoxelObjectNotation itemVON = optVONs[item];
|
ProcessedVoxelObjectNotation itemVON = optVONs[item];
|
||||||
if (isOptimisableBlock(itemVON.block))
|
if (isOptimisableBlock(itemVON.block))
|
||||||
{
|
{
|
||||||
float3[] itemCorners = calculateCorners(itemVON);
|
float3[] itemCorners = calculateCorners(itemVON);
|
||||||
int seeker = item + 1; // despite this, assume that seeker goes thru the entire list (not just blocks after item)
|
int seeker = item + 1; // despite this, assume that seeker goes thru the entire list (not just blocks after item)
|
||||||
while (seeker < optVONs.Count)
|
while (seeker < optVONs.count)
|
||||||
{
|
{
|
||||||
if (seeker == item)
|
if (seeker == item)
|
||||||
{
|
{
|
||||||
|
@ -262,21 +389,23 @@ namespace Pixi.Common
|
||||||
item++;
|
item++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if DEBUG
|
||||||
|
timer.Stop();
|
||||||
|
Logging.MetaLog($"({id}) Completed best effort grouping of range in {timer.ElapsedMilliseconds}ms");
|
||||||
|
#endif
|
||||||
|
return optVONs.ToArray();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Logging.MetaLog($"({id}) Exception occured...\n{e.ToString()}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private float3[] calculateCorners(ProcessedVoxelObjectNotation von)
|
return blocksToOptimise;
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
private static float3[] calculateCorners(ProcessedVoxelObjectNotation von)
|
||||||
{
|
{
|
||||||
float3[] cornerMultiplicands = new float3[8]
|
|
||||||
{
|
|
||||||
new float3(1, 1, 1),
|
|
||||||
new float3(1, 1, -1),
|
|
||||||
new float3(-1, 1, 1),
|
|
||||||
new float3(-1, 1, -1),
|
|
||||||
new float3(-1, -1, 1),
|
|
||||||
new float3(-1, -1, -1),
|
|
||||||
new float3(1, -1, 1),
|
|
||||||
new float3(1, -1, -1),
|
|
||||||
};
|
|
||||||
float3[] corners = new float3[8];
|
float3[] corners = new float3[8];
|
||||||
Quaternion rotation = Quaternion.Euler(von.rotation);
|
Quaternion rotation = Quaternion.Euler(von.rotation);
|
||||||
float3 rotatedScale = rotation * von.scale;
|
float3 rotatedScale = rotation * von.scale;
|
||||||
|
@ -284,24 +413,14 @@ namespace Pixi.Common
|
||||||
// generate corners
|
// generate corners
|
||||||
for (int i = 0; i < corners.Length; i++)
|
for (int i = 0; i < corners.Length; i++)
|
||||||
{
|
{
|
||||||
corners[i] = trueCenter + BLOCK_SIZE * (cornerMultiplicands[i] * rotatedScale / 2);
|
corners[i] = trueCenter + BLOCK_SIZE * (cornerMultiplicands1[i] * rotatedScale / 2);
|
||||||
}
|
}
|
||||||
return corners;
|
return corners;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateVonFromCorners(float3[] corners, ref ProcessedVoxelObjectNotation von)
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
private static void updateVonFromCorners(float3[] corners, ref ProcessedVoxelObjectNotation von)
|
||||||
{
|
{
|
||||||
float3[] cornerMultiplicands = new float3[8]
|
|
||||||
{
|
|
||||||
new float3(1, 1, 1),
|
|
||||||
new float3(1, 1, -1),
|
|
||||||
new float3(1, -1, 1),
|
|
||||||
new float3(1, -1, -1),
|
|
||||||
new float3(-1, 1, 1),
|
|
||||||
new float3(-1, 1, -1),
|
|
||||||
new float3(-1, -1, 1),
|
|
||||||
new float3(-1, -1, -1),
|
|
||||||
};
|
|
||||||
float3 newCenter = sumOfFloat3Arr(corners) / corners.Length;
|
float3 newCenter = sumOfFloat3Arr(corners) / corners.Length;
|
||||||
float3 newPosition = newCenter;
|
float3 newPosition = newCenter;
|
||||||
Quaternion rot = Quaternion.Euler(von.rotation);
|
Quaternion rot = Quaternion.Euler(von.rotation);
|
||||||
|
@ -311,26 +430,9 @@ namespace Pixi.Common
|
||||||
//Logging.MetaLog($"Updated VON scale {von.scale} (absolute {rotatedScale})");
|
//Logging.MetaLog($"Updated VON scale {von.scale} (absolute {rotatedScale})");
|
||||||
}
|
}
|
||||||
|
|
||||||
private int[][] findMatchingCorners(float3[] corners1, float3[] corners2)
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
private static int[][] findMatchingCorners(float3[] corners1, float3[] corners2)
|
||||||
{
|
{
|
||||||
int[][] cornerFaceMappings = new int[][]
|
|
||||||
{
|
|
||||||
new int[] {0, 1, 2, 3}, // top
|
|
||||||
new int[] {2, 3, 4, 5}, // left
|
|
||||||
new int[] {4, 5, 6, 7}, // bottom
|
|
||||||
new int[] {6, 7, 0, 1}, // right
|
|
||||||
new int[] {0, 2, 4, 6}, // back
|
|
||||||
new int[] {1, 3, 5, 7}, // front
|
|
||||||
};
|
|
||||||
int[][] oppositeFaceMappings = new int[][]
|
|
||||||
{
|
|
||||||
new int[] {6, 7, 4, 5}, // bottom
|
|
||||||
new int[] {0, 1, 6, 7}, // right
|
|
||||||
new int[] {2, 3, 0, 1}, // top
|
|
||||||
new int[] {4, 5, 2, 3}, // left
|
|
||||||
new int[] {1, 3, 5, 7}, // front
|
|
||||||
new int[] {0, 2, 4, 6}, // back
|
|
||||||
};
|
|
||||||
float3[][] faces1 = facesFromCorners(corners1);
|
float3[][] faces1 = facesFromCorners(corners1);
|
||||||
float3[][] faces2 = facesFromCorners(corners2);
|
float3[][] faces2 = facesFromCorners(corners2);
|
||||||
for (byte i = 0; i < faces1.Length; i++)
|
for (byte i = 0; i < faces1.Length; i++)
|
||||||
|
@ -355,7 +457,8 @@ namespace Pixi.Common
|
||||||
}
|
}
|
||||||
|
|
||||||
// this assumes the corners are in the order that calculateCorners outputs
|
// this assumes the corners are in the order that calculateCorners outputs
|
||||||
private float3[][] facesFromCorners(float3[] corners)
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
private static float3[][] facesFromCorners(float3[] corners)
|
||||||
{
|
{
|
||||||
return new float3[][]
|
return new float3[][]
|
||||||
{
|
{
|
||||||
|
@ -368,7 +471,8 @@ namespace Pixi.Common
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private int[] matchFace(float3[] face1, float3[] face2)
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
private static int[] matchFace(float3[] face1, float3[] face2)
|
||||||
{
|
{
|
||||||
int[] result = new int[4];
|
int[] result = new int[4];
|
||||||
byte count = 0;
|
byte count = 0;
|
||||||
|
@ -396,7 +500,8 @@ namespace Pixi.Common
|
||||||
return new int[0];
|
return new int[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
private float3 sumOfFloat3Arr(float3[] arr)
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
private static float3 sumOfFloat3Arr(float3[] arr)
|
||||||
{
|
{
|
||||||
float3 total = float3.zero;
|
float3 total = float3.zero;
|
||||||
for (int i = 0; i < arr.Length; i++)
|
for (int i = 0; i < arr.Length; i++)
|
||||||
|
@ -408,12 +513,115 @@ namespace Pixi.Common
|
||||||
}
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
private bool isOptimisableBlock(BlockIDs block)
|
private static bool isOptimisableBlock(BlockIDs block)
|
||||||
{
|
{
|
||||||
return block.ToString().EndsWith("Cube", StringComparison.InvariantCultureIgnoreCase);
|
if (optimisableBlockCache.ContainsKey((int) block))
|
||||||
|
{
|
||||||
|
return optimisableBlockCache[(int) block];
|
||||||
}
|
}
|
||||||
|
|
||||||
private string float3ArrToString(float3[] arr)
|
bool result = block.ToString().EndsWith("Cube", StringComparison.InvariantCultureIgnoreCase);
|
||||||
|
optimisableBlockCache[(int) block] = result;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void PostProcessSpecialBlocks(ref ProcessedVoxelObjectNotation[] pVONs, ref Block[] blocks)
|
||||||
|
{
|
||||||
|
// populate block attributes using metadata field from ProcessedVoxelObjectNotation
|
||||||
|
for (int i = 0; i < pVONs.Length; i++)
|
||||||
|
{
|
||||||
|
switch (pVONs[i].block)
|
||||||
|
{
|
||||||
|
case BlockIDs.TextBlock:
|
||||||
|
string[] textSplit = pVONs[i].metadata.Split('\t');
|
||||||
|
if (textSplit.Length > 1)
|
||||||
|
{
|
||||||
|
TextBlock tb = blocks[i].Specialise<TextBlock>();
|
||||||
|
tb.Text = textSplit[1];
|
||||||
|
if (textSplit.Length > 2)
|
||||||
|
{
|
||||||
|
tb.TextBlockId = textSplit[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BlockIDs.ConsoleBlock:
|
||||||
|
string[] cmdSplit = pVONs[i].metadata.Split('\t');
|
||||||
|
if (cmdSplit.Length > 1)
|
||||||
|
{
|
||||||
|
ConsoleBlock cb = blocks[i].Specialise<ConsoleBlock>();
|
||||||
|
cb.Command = cmdSplit[1];
|
||||||
|
if (cmdSplit.Length > 2)
|
||||||
|
{
|
||||||
|
cb.Arg1 = cmdSplit[2];
|
||||||
|
if (cmdSplit.Length > 3)
|
||||||
|
{
|
||||||
|
cb.Arg1 = cmdSplit[3];
|
||||||
|
if (cmdSplit.Length > 4)
|
||||||
|
{
|
||||||
|
cb.Arg1 = cmdSplit[4];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BlockIDs.DampedSpring:
|
||||||
|
string[] springSplit = pVONs[i].metadata.Split('\t');
|
||||||
|
if (springSplit.Length > 1 && float.TryParse(springSplit[1], out float stiffness))
|
||||||
|
{
|
||||||
|
DampedSpring d = blocks[i].Specialise<DampedSpring>();
|
||||||
|
d.Stiffness = stiffness;
|
||||||
|
if (springSplit.Length > 2 && float.TryParse(springSplit[2], out float damping))
|
||||||
|
{
|
||||||
|
d.Damping = damping;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BlockIDs.ServoAxle:
|
||||||
|
case BlockIDs.ServoHinge:
|
||||||
|
case BlockIDs.PneumaticAxle:
|
||||||
|
case BlockIDs.PneumaticHinge:
|
||||||
|
string[] servoSplit = pVONs[i].metadata.Split('\t');
|
||||||
|
if (servoSplit.Length > 1 && float.TryParse(servoSplit[1], out float minAngle))
|
||||||
|
{
|
||||||
|
Servo s = blocks[i].Specialise<Servo>();
|
||||||
|
s.MinimumAngle = minAngle;
|
||||||
|
if (servoSplit.Length > 2 && float.TryParse(servoSplit[2], out float maxAngle))
|
||||||
|
{
|
||||||
|
s.MaximumAngle = maxAngle;
|
||||||
|
if (servoSplit.Length > 3 && float.TryParse(servoSplit[3], out float maxForce))
|
||||||
|
{
|
||||||
|
s.MaximumForce = maxForce;
|
||||||
|
if (servoSplit.Length > 4 && bool.TryParse(servoSplit[4], out bool reverse))
|
||||||
|
{
|
||||||
|
s.Reverse = reverse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BlockIDs.MotorM:
|
||||||
|
case BlockIDs.MotorS:
|
||||||
|
string[] motorSplit = pVONs[i].metadata.Split('\t');
|
||||||
|
if (motorSplit.Length > 1 && float.TryParse(motorSplit[1], out float topSpeed))
|
||||||
|
{
|
||||||
|
Motor m = blocks[i].Specialise<Motor>();
|
||||||
|
m.TopSpeed = topSpeed;
|
||||||
|
if (motorSplit.Length > 2 && float.TryParse(motorSplit[2], out float torque))
|
||||||
|
{
|
||||||
|
m.Torque = torque;
|
||||||
|
if (motorSplit.Length > 3 && bool.TryParse(motorSplit[3], out bool reverse))
|
||||||
|
{
|
||||||
|
m.Reverse = reverse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: break; // do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string float3ArrToString(float3[] arr)
|
||||||
{
|
{
|
||||||
string result = "[";
|
string result = "[";
|
||||||
foreach (float3 f in arr)
|
foreach (float3 f in arr)
|
||||||
|
@ -434,10 +642,11 @@ namespace Pixi.Common
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
Logging.CommandLogError("RIP\n" + e);
|
Logging.CommandLogError("RIP Pixi\n" + e);
|
||||||
#else
|
#else
|
||||||
Logging.CommandLogError("Pixi failed (reason: " + e.Message + ")");
|
Logging.CommandLogError("Pixi failed (reason: " + e.Message + ")");
|
||||||
#endif
|
#endif
|
||||||
|
Logging.LogWarning("Pixi Error\n" + e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@ namespace Pixi.Common
|
||||||
public static BlockJsonInfo JsonObject(Block block, float[] origin = null)
|
public static BlockJsonInfo JsonObject(Block block, float[] origin = null)
|
||||||
{
|
{
|
||||||
if (origin == null) origin = origin_base;
|
if (origin == null) origin = origin_base;
|
||||||
return new BlockJsonInfo
|
BlockJsonInfo jsonInfo = new BlockJsonInfo
|
||||||
{
|
{
|
||||||
name = block.Type.ToString(),
|
name = block.Type.ToString(),
|
||||||
position = new float[3] { block.Position.x - origin[0], block.Position.y - origin[1], block.Position.z - origin[2]},
|
position = new float[3] { block.Position.x - origin[0], block.Position.y - origin[1], block.Position.z - origin[2]},
|
||||||
|
@ -50,6 +50,37 @@ namespace Pixi.Common
|
||||||
color = ColorSpaceUtility.UnquantizeToArray(block.Color),
|
color = ColorSpaceUtility.UnquantizeToArray(block.Color),
|
||||||
scale = new float[3] {block.Scale.x, block.Scale.y, block.Scale.z},
|
scale = new float[3] {block.Scale.x, block.Scale.y, block.Scale.z},
|
||||||
};
|
};
|
||||||
|
// custom stats for special blocks
|
||||||
|
switch (block.Type)
|
||||||
|
{
|
||||||
|
case BlockIDs.TextBlock:
|
||||||
|
TextBlock t = block.Specialise<TextBlock>();
|
||||||
|
jsonInfo.name += "\t" + t.Text + "\t" + t.TextBlockId;
|
||||||
|
break;
|
||||||
|
case BlockIDs.ConsoleBlock:
|
||||||
|
ConsoleBlock c = block.Specialise<ConsoleBlock>();
|
||||||
|
jsonInfo.name += "\t" + c.Command + "\t" + c.Arg1 + "\t" + c.Arg2 + "\t" + c.Arg3;
|
||||||
|
break;
|
||||||
|
case BlockIDs.DampedSpring:
|
||||||
|
DampedSpring d = block.Specialise<DampedSpring>();
|
||||||
|
jsonInfo.name += "\t" + d.Stiffness + "\t" + d.Damping;
|
||||||
|
break;
|
||||||
|
case BlockIDs.ServoAxle:
|
||||||
|
case BlockIDs.ServoHinge:
|
||||||
|
case BlockIDs.PneumaticAxle:
|
||||||
|
case BlockIDs.PneumaticHinge:
|
||||||
|
Servo s = block.Specialise<Servo>();
|
||||||
|
jsonInfo.name += "\t" + s.MinimumAngle + "\t" + s.MaximumAngle + "\t" + s.MaximumForce + "\t" +
|
||||||
|
s.Reverse;
|
||||||
|
break;
|
||||||
|
case BlockIDs.MotorM:
|
||||||
|
case BlockIDs.MotorS:
|
||||||
|
Motor m = block.Specialise<Motor>();
|
||||||
|
jsonInfo.name += "\t" + m.TopSpeed + "\t" + m.Torque + "\t" + m.Reverse;
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
return jsonInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BlockIDs NameToEnum(BlockJsonInfo block)
|
public static BlockIDs NameToEnum(BlockJsonInfo block)
|
||||||
|
|
|
@ -27,6 +27,11 @@ namespace Pixi.Images
|
||||||
|
|
||||||
public BlueprintProvider BlueprintProvider { get; } = null;
|
public BlueprintProvider BlueprintProvider { get; } = null;
|
||||||
|
|
||||||
|
public ImageCanvasImporter()
|
||||||
|
{
|
||||||
|
GamecraftModdingAPI.App.Client.EnterMenu += ColorSpaceUtility.LoadColorMenuEvent;
|
||||||
|
}
|
||||||
|
|
||||||
public bool Qualifies(string name)
|
public bool Qualifies(string name)
|
||||||
{
|
{
|
||||||
//Logging.MetaLog($"Qualifies received name {name}");
|
//Logging.MetaLog($"Qualifies received name {name}");
|
||||||
|
|
374
Pixi/Pixi.csproj
374
Pixi/Pixi.csproj
|
@ -3,7 +3,7 @@
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net472</TargetFramework>
|
<TargetFramework>net472</TargetFramework>
|
||||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
<Version>1.0.0</Version>
|
<Version>1.1.0</Version>
|
||||||
<Authors>NGnius</Authors>
|
<Authors>NGnius</Authors>
|
||||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||||
<PackageProjectUrl>https://git.exmods.org/NGnius/Pixi</PackageProjectUrl>
|
<PackageProjectUrl>https://git.exmods.org/NGnius/Pixi</PackageProjectUrl>
|
||||||
|
@ -24,30 +24,6 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\IllusionPlugin.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\IllusionPlugin.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\IllusionPlugin.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\IllusionPlugin.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="JWT">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\JWT.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\JWT.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Unity.Burst.Unsafe">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Burst.Unsafe.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Burst.Unsafe.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Rewired_Core">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Rewired_Core.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Rewired_Core.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Rewired_Windows">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Rewired_Windows.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Rewired_Windows.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="mscorlib">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\mscorlib.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\mscorlib.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Accessibility">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Accessibility.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Accessibility.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Analytics">
|
<Reference Include="Analytics">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Analytics.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Analytics.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Analytics.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Analytics.dll</HintPath>
|
||||||
|
@ -64,10 +40,6 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Authentication.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Authentication.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Authentication.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Authentication.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="BlockEntityFactory">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\BlockEntityFactory.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\BlockEntityFactory.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Blocks.HUDFeedbackBlocks">
|
<Reference Include="Blocks.HUDFeedbackBlocks">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Blocks.HUDFeedbackBlocks.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Blocks.HUDFeedbackBlocks.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Blocks.HUDFeedbackBlocks.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Blocks.HUDFeedbackBlocks.dll</HintPath>
|
||||||
|
@ -76,6 +48,18 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\CommandLine.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\CommandLine.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\CommandLine.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\CommandLine.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="CommandLineCompositionRoot">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\CommandLineCompositionRoot.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\CommandLineCompositionRoot.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ConsoleBlockComposotionRoot">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\ConsoleBlockComposotionRoot.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\ConsoleBlockComposotionRoot.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ConsoleCommand">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\ConsoleCommand.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\ConsoleCommand.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="DataLoader">
|
<Reference Include="DataLoader">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\DataLoader.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\DataLoader.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\DataLoader.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\DataLoader.dll</HintPath>
|
||||||
|
@ -84,14 +68,14 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\DDNA.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\DDNA.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\DDNA.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\DDNA.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="FMODUnity">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\FMODUnity.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\FMODUnity.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Facepunch.Steamworks.Win64">
|
<Reference Include="Facepunch.Steamworks.Win64">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Facepunch.Steamworks.Win64.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Facepunch.Steamworks.Win64.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Facepunch.Steamworks.Win64.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Facepunch.Steamworks.Win64.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="FMOD">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\FMOD.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\FMOD.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="FullGame">
|
<Reference Include="FullGame">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\FullGame.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\FullGame.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\FullGame.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\FullGame.dll</HintPath>
|
||||||
|
@ -100,6 +84,14 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.AudioBlocks.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.AudioBlocks.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.AudioBlocks.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.AudioBlocks.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.BlockEntityFactory">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.BlockEntityFactory.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.BlockEntityFactory.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.BlockGroups">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.BlockGroups.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.BlockGroups.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Gamecraft.Blocks.ConsoleBlock">
|
<Reference Include="Gamecraft.Blocks.ConsoleBlock">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.ConsoleBlock.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.ConsoleBlock.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.ConsoleBlock.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.ConsoleBlock.dll</HintPath>
|
||||||
|
@ -108,10 +100,18 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.DamagingSurfaceBlock.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.DamagingSurfaceBlock.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.DamagingSurfaceBlock.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.DamagingSurfaceBlock.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.Blocks.DestructionBlocks">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.DestructionBlocks.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.DestructionBlocks.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Gamecraft.Blocks.GenericPhysicsBlocks">
|
<Reference Include="Gamecraft.Blocks.GenericPhysicsBlocks">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.GenericPhysicsBlocks.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.GenericPhysicsBlocks.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.GenericPhysicsBlocks.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.GenericPhysicsBlocks.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.Blocks.LightBlock">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.LightBlock.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.LightBlock.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Gamecraft.Blocks.LogicBlock">
|
<Reference Include="Gamecraft.Blocks.LogicBlock">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.LogicBlock.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.LogicBlock.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.LogicBlock.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.LogicBlock.dll</HintPath>
|
||||||
|
@ -120,10 +120,18 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\GameCraft.Blocks.ProjectileBlock.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\GameCraft.Blocks.ProjectileBlock.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\GameCraft.Blocks.ProjectileBlock.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\GameCraft.Blocks.ProjectileBlock.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.Blocks.TextBlock.CompositionRoot">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.TextBlock.CompositionRoot.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.TextBlock.CompositionRoot.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Gamecraft.Blocks.TimerBlock">
|
<Reference Include="Gamecraft.Blocks.TimerBlock">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.TimerBlock.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.TimerBlock.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.TimerBlock.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.TimerBlock.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.BlocksEntityDescriptors">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.BlocksEntityDescriptors.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.BlocksEntityDescriptors.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Gamecraft.CharacterVulnerability">
|
<Reference Include="Gamecraft.CharacterVulnerability">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.CharacterVulnerability.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.CharacterVulnerability.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.CharacterVulnerability.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.CharacterVulnerability.dll</HintPath>
|
||||||
|
@ -132,22 +140,94 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.CharacterVulnerabilityGui.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.CharacterVulnerabilityGui.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.CharacterVulnerabilityGui.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.CharacterVulnerabilityGui.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.ColourPalette">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.ColourPalette.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.ColourPalette.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.Damage">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Damage.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Damage.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Gamecraft.Effects">
|
<Reference Include="Gamecraft.Effects">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Effects.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Effects.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Effects.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Effects.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.ExplosionFragments">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.ExplosionFragments.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.ExplosionFragments.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.GraphicsSettings">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GraphicsSettings.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GraphicsSettings.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.GUI.BlueprintInventory">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.BlueprintInventory.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.BlueprintInventory.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.GUI.BlueprintInventoryMock">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.BlueprintInventoryMock.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.BlueprintInventoryMock.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.GUI.Blueprints">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.Blueprints.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.Blueprints.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.GUI.BlueprintSets">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.BlueprintSets.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.BlueprintSets.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Gamecraft.GUI.ConsoleBlock">
|
<Reference Include="Gamecraft.GUI.ConsoleBlock">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.ConsoleBlock.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.ConsoleBlock.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.ConsoleBlock.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.ConsoleBlock.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.GUI.GameOptionsScreen">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.GameOptionsScreen.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.GameOptionsScreen.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Gamecraft.GUI.GraphicsScreen">
|
<Reference Include="Gamecraft.GUI.GraphicsScreen">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.GraphicsScreen.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.GraphicsScreen.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.GraphicsScreen.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.GraphicsScreen.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.GUI.Hotbar.Blocks">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.Hotbar.Blocks.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.Hotbar.Blocks.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.GUI.Hotbar.Colours">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.Hotbar.Colours.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.Hotbar.Colours.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Gamecraft.GUI.HUDFeedbackBlocks">
|
<Reference Include="Gamecraft.GUI.HUDFeedbackBlocks">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.HUDFeedbackBlocks.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.HUDFeedbackBlocks.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.HUDFeedbackBlocks.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.HUDFeedbackBlocks.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.GUI.ModeBar">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.ModeBar.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.ModeBar.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.GUI.OptionsScreen">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.OptionsScreen.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.OptionsScreen.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.GUI.TabsBar.Blocks">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.TabsBar.Blocks.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.TabsBar.Blocks.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.GUI.TabsBar.Blueprints">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.TabsBar.Blueprints.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.TabsBar.Blueprints.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.GUI.TabsBar.Colours">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.TabsBar.Colours.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.TabsBar.Colours.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.GUI.TabsBar.Common">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.TabsBar.Common.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.TabsBar.Common.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.GUI.TimeModeClock">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.TimeModeClock.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.TimeModeClock.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Gamecraft.GUI.Tweaks">
|
<Reference Include="Gamecraft.GUI.Tweaks">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.Tweaks.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.Tweaks.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.Tweaks.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.Tweaks.dll</HintPath>
|
||||||
|
@ -164,14 +244,50 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.WorldSpaceGuis.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.WorldSpaceGuis.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.WorldSpaceGuis.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.WorldSpaceGuis.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.GUIs.Hotbar.BlueprintsHotbar">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUIs.Hotbar.BlueprintsHotbar.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUIs.Hotbar.BlueprintsHotbar.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.InventoryTimeRunning">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.InventoryTimeRunning.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.InventoryTimeRunning.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.JointBlocks">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.JointBlocks.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.JointBlocks.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Gamecraft.Music">
|
<Reference Include="Gamecraft.Music">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Music.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Music.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Music.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Music.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.NetStrings">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.NetStrings.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.NetStrings.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Gamecraft.PerformanceWarnings">
|
<Reference Include="Gamecraft.PerformanceWarnings">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.PerformanceWarnings.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.PerformanceWarnings.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.PerformanceWarnings.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.PerformanceWarnings.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.PickupBlck">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.PickupBlck.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.PickupBlck.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.PickupsCommon">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.PickupsCommon.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.PickupsCommon.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.PopupMessage">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.PopupMessage.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.PopupMessage.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.Projectiles">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Projectiles.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Projectiles.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.Serialization">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Serialization.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Serialization.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Gamecraft.Tweaks">
|
<Reference Include="Gamecraft.Tweaks">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Tweaks.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Tweaks.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Tweaks.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Tweaks.dll</HintPath>
|
||||||
|
@ -180,6 +296,10 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Tweaks.Mockup.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Tweaks.Mockup.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Tweaks.Mockup.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Tweaks.Mockup.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Gamecraft.VisualEffects.Decals">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.VisualEffects.Decals.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.VisualEffects.Decals.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Gamecraft.VisualEffects">
|
<Reference Include="Gamecraft.VisualEffects">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.VisualEffects.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.VisualEffects.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.VisualEffects.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.VisualEffects.dll</HintPath>
|
||||||
|
@ -188,10 +308,6 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Wires.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Wires.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Wires.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Wires.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Gamecraft.Wires.Input">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Wires.Input.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Wires.Input.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Gamecraft.Wires.Mockup">
|
<Reference Include="Gamecraft.Wires.Mockup">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Wires.Mockup.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Wires.Mockup.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Wires.Mockup.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Wires.Mockup.dll</HintPath>
|
||||||
|
@ -200,6 +316,10 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\GameState.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\GameState.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\GameState.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\GameState.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="GhostShark.Outline">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\GhostShark.Outline.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\GhostShark.Outline.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="GPUInstancer">
|
<Reference Include="GPUInstancer">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\GPUInstancer.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\GPUInstancer.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\GPUInstancer.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\GPUInstancer.dll</HintPath>
|
||||||
|
@ -224,18 +344,6 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\MultiplayerTest.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\MultiplayerTest.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\MultiplayerTest.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\MultiplayerTest.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="netstandard">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\netstandard.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\netstandard.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Newtonsoft.Json">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Newtonsoft.Json.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Newtonsoft.Json.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Novell.Directory.Ldap">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Novell.Directory.Ldap.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Novell.Directory.Ldap.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="RCX.ScreenshotTaker">
|
<Reference Include="RCX.ScreenshotTaker">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\RCX.ScreenshotTaker.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\RCX.ScreenshotTaker.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\RCX.ScreenshotTaker.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RCX.ScreenshotTaker.dll</HintPath>
|
||||||
|
@ -304,6 +412,22 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="RobocraftX.GUI.Hotbar">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.Hotbar.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.Hotbar.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="RobocraftX.GUI.Inventory.BlocksInventory">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.Inventory.BlocksInventory.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.Inventory.BlocksInventory.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="RobocraftX.GUI.Inventory.ColourInventory">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.Inventory.ColourInventory.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.Inventory.ColourInventory.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="RobocraftX.GUI.Inventory">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.Inventory.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.Inventory.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="RobocraftX.GUI.RemoveBlock">
|
<Reference Include="RobocraftX.GUI.RemoveBlock">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.RemoveBlock.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.RemoveBlock.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.RemoveBlock.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.RemoveBlock.dll</HintPath>
|
||||||
|
@ -312,6 +436,10 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.ScaleGhost.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.ScaleGhost.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.ScaleGhost.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.ScaleGhost.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="RobocraftX.GUI.TabsBar">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.TabsBar.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.TabsBar.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="RobocraftX.GUIs.WorkshopPrefabs">
|
<Reference Include="RobocraftX.GUIs.WorkshopPrefabs">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUIs.WorkshopPrefabs.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUIs.WorkshopPrefabs.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUIs.WorkshopPrefabs.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUIs.WorkshopPrefabs.dll</HintPath>
|
||||||
|
@ -340,10 +468,18 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="RobocraftX.Multiplayer.GUI">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.GUI.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.GUI.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="RobocraftX.Multiplayer.NetworkEntityStream">
|
<Reference Include="RobocraftX.Multiplayer.NetworkEntityStream">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.NetworkEntityStream.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.NetworkEntityStream.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.NetworkEntityStream.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.NetworkEntityStream.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="RobocraftX.Multiplayer.Serializers">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.Serializers.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.Serializers.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="RobocraftX.MultiplayerInput">
|
<Reference Include="RobocraftX.MultiplayerInput">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.MultiplayerInput.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.MultiplayerInput.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.MultiplayerInput.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.MultiplayerInput.dll</HintPath>
|
||||||
|
@ -388,10 +524,6 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.SaveGameDialog.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.SaveGameDialog.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.SaveGameDialog.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.SaveGameDialog.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="RobocraftX.Serializers">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Serializers.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Serializers.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="RobocraftX.Services">
|
<Reference Include="RobocraftX.Services">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Services.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Services.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Services.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Services.dll</HintPath>
|
||||||
|
@ -412,17 +544,25 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX_TextBlock.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX_TextBlock.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX_TextBlock.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX_TextBlock.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="RobocratX.SimulationCompositionRoot">
|
<Reference Include="RobocratX.SimulationMockCompositionRoot">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\RobocratX.SimulationCompositionRoot.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\RobocratX.SimulationMockCompositionRoot.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocratX.SimulationCompositionRoot.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocratX.SimulationMockCompositionRoot.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SpawningPointCompositionRoot">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\SpawningPointCompositionRoot.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\SpawningPointCompositionRoot.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SpecializedDescriptors">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\SpecializedDescriptors.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\SpecializedDescriptors.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="StringFormatter">
|
<Reference Include="StringFormatter">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\StringFormatter.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\StringFormatter.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\StringFormatter.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\StringFormatter.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Svelto.Common_3">
|
<Reference Include="Svelto.Common">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Svelto.Common_3.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Svelto.Common.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Svelto.Common_3.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Svelto.Common.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Svelto.ECS">
|
<Reference Include="Svelto.ECS">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Svelto.ECS.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Svelto.ECS.dll</HintPath>
|
||||||
|
@ -436,6 +576,10 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Svelto.Tasks.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Svelto.Tasks.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Svelto.Tasks.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Svelto.Tasks.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="UltimateDecals">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\UltimateDecals.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\UltimateDecals.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Unity.Addressables">
|
<Reference Include="Unity.Addressables">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Addressables.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Addressables.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Addressables.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Addressables.dll</HintPath>
|
||||||
|
@ -452,6 +596,10 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Collections.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Collections.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Collections.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Collections.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Unity.Collections.LowLevel.ILSupport">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Collections.LowLevel.ILSupport.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Collections.LowLevel.ILSupport.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Unity.Deformations">
|
<Reference Include="Unity.Deformations">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Deformations.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Deformations.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Deformations.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Deformations.dll</HintPath>
|
||||||
|
@ -464,6 +612,10 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Entities.Hybrid.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Entities.Hybrid.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Entities.Hybrid.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Entities.Hybrid.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Unity.InternalAPIEngineBridge.012">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.InternalAPIEngineBridge.012.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.InternalAPIEngineBridge.012.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Unity.Jobs">
|
<Reference Include="Unity.Jobs">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Jobs.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Jobs.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Jobs.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Jobs.dll</HintPath>
|
||||||
|
@ -480,6 +632,10 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Mathematics.Extensions.Hybrid.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Mathematics.Extensions.Hybrid.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Mathematics.Extensions.Hybrid.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Mathematics.Extensions.Hybrid.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Unity.MemoryProfiler">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.MemoryProfiler.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.MemoryProfiler.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Unity.Physics">
|
<Reference Include="Unity.Physics">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Physics.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Physics.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Physics.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Physics.dll</HintPath>
|
||||||
|
@ -492,10 +648,6 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Platforms.Common.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Platforms.Common.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Platforms.Common.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Platforms.Common.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Unity.Postprocessing.Runtime">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Postprocessing.Runtime.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Postprocessing.Runtime.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Unity.Properties">
|
<Reference Include="Unity.Properties">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Properties.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Properties.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Properties.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Properties.dll</HintPath>
|
||||||
|
@ -536,9 +688,9 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.ResourceManager.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.ResourceManager.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.ResourceManager.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.ResourceManager.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Unity.Scenes.Hybrid">
|
<Reference Include="Unity.Scenes">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Scenes.Hybrid.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Scenes.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Scenes.Hybrid.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Scenes.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Unity.ScriptableBuildPipeline">
|
<Reference Include="Unity.ScriptableBuildPipeline">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.ScriptableBuildPipeline.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.ScriptableBuildPipeline.dll</HintPath>
|
||||||
|
@ -564,6 +716,66 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Transforms.Hybrid.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Transforms.Hybrid.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Transforms.Hybrid.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Transforms.Hybrid.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Unity.VisualEffectGraph.Runtime">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.VisualEffectGraph.Runtime.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.VisualEffectGraph.Runtime.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="UnityEngine.UI">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UI.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UI.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="uREPL">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\uREPL.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\uREPL.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="VisualProfiler">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\VisualProfiler.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\VisualProfiler.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Accessibility">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Accessibility.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Accessibility.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Facepunch.Steamworks.Win64">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Facepunch.Steamworks.Win64.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Facepunch.Steamworks.Win64.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="JWT">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\JWT.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\JWT.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="mscorlib">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\mscorlib.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\mscorlib.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="netstandard">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\netstandard.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\netstandard.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Newtonsoft.Json">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Newtonsoft.Json.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Newtonsoft.Json.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Novell.Directory.Ldap">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Novell.Directory.Ldap.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Novell.Directory.Ldap.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Rewired_Core">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Rewired_Core.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Rewired_Core.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Rewired_Windows">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Rewired_Windows.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Rewired_Windows.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Unity.Burst.Unsafe">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Burst.Unsafe.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Burst.Unsafe.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Unity.Collections.LowLevel.ILSupport">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Collections.LowLevel.ILSupport.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Collections.LowLevel.ILSupport.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="UnityEngine.AccessibilityModule">
|
<Reference Include="UnityEngine.AccessibilityModule">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.AccessibilityModule.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.AccessibilityModule.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.AccessibilityModule.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.AccessibilityModule.dll</HintPath>
|
||||||
|
@ -732,14 +944,14 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.TLSModule.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.TLSModule.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.TLSModule.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.TLSModule.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.UI">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UI.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UI.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="UnityEngine.UIElementsModule">
|
<Reference Include="UnityEngine.UIElementsModule">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UIElementsModule.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UIElementsModule.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UIElementsModule.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UIElementsModule.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="UnityEngine.UIElementsNativeModule">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UIElementsNativeModule.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UIElementsNativeModule.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="UnityEngine.UIModule">
|
<Reference Include="UnityEngine.UIModule">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UIModule.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UIModule.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UIModule.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UIModule.dll</HintPath>
|
||||||
|
@ -796,6 +1008,10 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.VideoModule.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.VideoModule.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.VideoModule.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.VideoModule.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="UnityEngine.VirtualTexturingModule">
|
||||||
|
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.VirtualTexturingModule.dll</HintPath>
|
||||||
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.VirtualTexturingModule.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="UnityEngine.VRModule">
|
<Reference Include="UnityEngine.VRModule">
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.VRModule.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.VRModule.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.VRModule.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.VRModule.dll</HintPath>
|
||||||
|
@ -808,15 +1024,6 @@
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.XRModule.dll</HintPath>
|
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.XRModule.dll</HintPath>
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.XRModule.dll</HintPath>
|
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.XRModule.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="uREPL">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\uREPL.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\uREPL.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="VisualProfiler">
|
|
||||||
<HintPath>..\ref\Gamecraft_Data\Managed\VisualProfiler.dll</HintPath>
|
|
||||||
<HintPath>..\..\ref\Gamecraft_Data\Managed\VisualProfiler.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.CSharp" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!--End Dependencies-->
|
<!--End Dependencies-->
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -827,4 +1034,13 @@
|
||||||
<EmbeddedResource Include="cubes-id.json" />
|
<EmbeddedResource Include="cubes-id.json" />
|
||||||
<EmbeddedResource Include="blueprints.json" />
|
<EmbeddedResource Include="blueprints.json" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="ILRepack" Version="2.0.18" />
|
||||||
|
<PackageReference Include="Melanchall.DryWetMidi" Version="5.1.1" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<Target Name="StaticLinkMergeAfterBuild" AfterTargets="Build">
|
||||||
|
<Exec Command="$(PkgILRepack)\tools\ILRepack.exe /ndebug /out:bin\$(Configuration)\net472\Pixi.dll bin\$(Configuration)\net472\Pixi.dll bin\$(Configuration)\net472\Melanchall.DryWetMidi.dll" />
|
||||||
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -8,7 +8,7 @@ using Unity.Mathematics; // float3
|
||||||
|
|
||||||
using IllusionPlugin;
|
using IllusionPlugin;
|
||||||
using GamecraftModdingAPI.Utility;
|
using GamecraftModdingAPI.Utility;
|
||||||
|
using Pixi.Audio;
|
||||||
using Pixi.Common;
|
using Pixi.Common;
|
||||||
using Pixi.Images;
|
using Pixi.Images;
|
||||||
using Pixi.Robots;
|
using Pixi.Robots;
|
||||||
|
@ -47,13 +47,19 @@ namespace Pixi
|
||||||
root.Inject(new ImageTextBlockImporter());
|
root.Inject(new ImageTextBlockImporter());
|
||||||
root.Inject(new ImageCommandImporter());
|
root.Inject(new ImageCommandImporter());
|
||||||
// Robot functionality
|
// Robot functionality
|
||||||
root.Inject(new RobotInternetImporter());
|
var robot = new RobotInternetImporter();
|
||||||
|
root.Inject(robot);
|
||||||
//RobotCommands.CreateRobotCRFCommand();
|
//RobotCommands.CreateRobotCRFCommand();
|
||||||
//RobotCommands.CreateRobotFileCommand();
|
//RobotCommands.CreateRobotFileCommand();
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
// Development functionality
|
// Development functionality
|
||||||
RobotCommands.CreatePartDumpCommand();
|
RobotCommands.CreatePartDumpCommand();
|
||||||
|
((RobotBlueprintProvider) robot.BlueprintProvider).AddDebugCommands();
|
||||||
|
root.Inject(new TestImporter());
|
||||||
#endif
|
#endif
|
||||||
|
// Audio functionality
|
||||||
|
root.Inject(new MidiImporter());
|
||||||
|
root.Inject(new AudioFakeImporter());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -231,81 +231,34 @@ namespace Pixi.Robots
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
string cubeName = map[cubeId];
|
string cubeName = map[cubeId];
|
||||||
|
|
||||||
|
string gcName = cubeName.Contains("glass") || cubeName.Contains("windshield")
|
||||||
|
? "Glass"
|
||||||
|
: "Aluminium";
|
||||||
|
if (cubeName.Contains("round"))
|
||||||
|
gcName += "Rounded";
|
||||||
|
|
||||||
if (cubeName.Contains("cube"))
|
if (cubeName.Contains("cube"))
|
||||||
{
|
gcName += "Cube";
|
||||||
result.block = BlockIDs.AluminiumCube;
|
|
||||||
result.rotation = float3.zero;
|
|
||||||
}
|
|
||||||
else if (cubeName.Contains("prism") || cubeName.Contains("edge"))
|
else if (cubeName.Contains("prism") || cubeName.Contains("edge"))
|
||||||
{
|
gcName += "Slope";
|
||||||
if (cubeName.Contains("round"))
|
|
||||||
{
|
|
||||||
if (cubeName.Contains("glass") || cubeName.Contains("windshield"))
|
|
||||||
{
|
|
||||||
result.block = BlockIDs.GlassRoundedSlope;
|
|
||||||
} else
|
|
||||||
result.block = BlockIDs.AluminiumRoundedSlope;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (cubeName.Contains("glass") || cubeName.Contains("windshield"))
|
|
||||||
{
|
|
||||||
result.block = BlockIDs.GlassSlope;
|
|
||||||
} else
|
|
||||||
result.block = BlockIDs.AluminiumSlope;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (cubeName.Contains("inner"))
|
else if (cubeName.Contains("inner"))
|
||||||
{
|
gcName += "SlicedCube";
|
||||||
if (cubeName.Contains("round"))
|
|
||||||
{
|
|
||||||
if (cubeName.Contains("glass") || cubeName.Contains("windshield"))
|
|
||||||
{
|
|
||||||
result.block = BlockIDs.GlassRoundedSlicedCube;
|
|
||||||
} else
|
|
||||||
result.block = BlockIDs.AluminiumRoundedSlicedCube;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (cubeName.Contains("glass") || cubeName.Contains("windshield"))
|
|
||||||
{
|
|
||||||
result.block = BlockIDs.GlassSlicedCube;
|
|
||||||
} else
|
|
||||||
result.block = BlockIDs.AluminiumSlicedCube;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (cubeName.Contains("tetra") || cubeName.Contains("corner"))
|
else if (cubeName.Contains("tetra") || cubeName.Contains("corner"))
|
||||||
{
|
gcName += "Corner";
|
||||||
if (cubeName.Contains("round"))
|
|
||||||
{
|
|
||||||
if (cubeName.Contains("glass") || cubeName.Contains("windshield"))
|
|
||||||
{
|
|
||||||
result.block = BlockIDs.GlassRoundedCorner;
|
|
||||||
} else
|
|
||||||
result.block = BlockIDs.AluminiumRoundedCorner;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (cubeName.Contains("glass") || cubeName.Contains("windshield"))
|
|
||||||
{
|
|
||||||
result.block = BlockIDs.GlassCorner;
|
|
||||||
} else
|
|
||||||
result.block = BlockIDs.AluminiumCorner;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (cubeName.Contains("pyramid"))
|
else if (cubeName.Contains("pyramid"))
|
||||||
{
|
gcName += "PyramidSegment";
|
||||||
result.block = BlockIDs.AluminiumPyramidSegment;
|
|
||||||
}
|
|
||||||
else if (cubeName.Contains("cone"))
|
else if (cubeName.Contains("cone"))
|
||||||
{
|
gcName += "ConeSegment";
|
||||||
result.block = BlockIDs.AluminiumConeSegment;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result.block = BlockIDs.TextBlock;
|
result.block = BlockIDs.TextBlock;
|
||||||
result.name = cubeName;
|
result.name = cubeName;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BlockIDs id = VoxelObjectNotationUtility.NameToEnum(gcName);
|
||||||
|
result.block = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using Svelto.DataStructures;
|
using Svelto.DataStructures;
|
||||||
using Unity.Mathematics;
|
using Unity.Mathematics;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
using GamecraftModdingAPI.Blocks;
|
using GamecraftModdingAPI.Blocks;
|
||||||
|
using GamecraftModdingAPI.Commands;
|
||||||
using GamecraftModdingAPI.Utility;
|
using GamecraftModdingAPI.Utility;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using Pixi.Common;
|
using Pixi.Common;
|
||||||
|
|
||||||
namespace Pixi.Robots
|
namespace Pixi.Robots
|
||||||
|
@ -33,14 +35,8 @@ namespace Pixi.Robots
|
||||||
|
|
||||||
if (!botprints.ContainsKey(root.name) || RobotInternetImporter.CubeSize != 3)
|
if (!botprints.ContainsKey(root.name) || RobotInternetImporter.CubeSize != 3)
|
||||||
{
|
{
|
||||||
if (!parent.textBlockInfo.ContainsKey(name))
|
|
||||||
{
|
|
||||||
parent.textBlockInfo[name] = new FasterList<string>();
|
|
||||||
}
|
|
||||||
BlockJsonInfo copy = root;
|
BlockJsonInfo copy = root;
|
||||||
copy.name = "TextBlock";
|
copy.name = $"TextBlock\t{root.name} ({CubeUtility.CubeIdDescription(uint.Parse(root.name))})\tPixi";
|
||||||
Logging.MetaLog($"Parsing uint from '{root.name}'");
|
|
||||||
parent.textBlockInfo[name].Add(root.name + " (" + CubeUtility.CubeIdDescription(uint.Parse(root.name)) + ")");
|
|
||||||
return new BlockJsonInfo[1] {copy};
|
return new BlockJsonInfo[1] {copy};
|
||||||
}
|
}
|
||||||
BlockJsonInfo[] blueprint = botprints[root.name];
|
BlockJsonInfo[] blueprint = botprints[root.name];
|
||||||
|
@ -96,5 +92,49 @@ namespace Pixi.Robots
|
||||||
}
|
}
|
||||||
return adjustedBlueprint;
|
return adjustedBlueprint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
public void AddDebugCommands()
|
||||||
|
{
|
||||||
|
CommandBuilder.Builder("PixiReload", "Reloads the robot blueprints")
|
||||||
|
.Action(() => botprints = null).Build();
|
||||||
|
CommandBuilder.Builder("RotateBlueprint",
|
||||||
|
"Rotates a blueprint with a given ID and dumps the result to a file. 1 means 90 degrees.")
|
||||||
|
.Action<string>(RotateBlueprint).Build();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RotateBlueprint(string parameters)
|
||||||
|
{
|
||||||
|
var p = parameters.Split(' ');
|
||||||
|
string id = p[0];
|
||||||
|
var xyz = new int[3];
|
||||||
|
for (int i = 0; i < xyz.Length; i++)
|
||||||
|
xyz[i] = int.Parse(p[i + 1]) * 90;
|
||||||
|
if (botprints == null)
|
||||||
|
{
|
||||||
|
botprints = BlueprintUtility.ParseBlueprintResource("Pixi.blueprints.json");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!botprints.ContainsKey(id))
|
||||||
|
{
|
||||||
|
Logging.CommandLogWarning("Blueprint with that ID not found.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var bp = botprints[id];
|
||||||
|
var rotChange = Quaternion.Euler(xyz[0], xyz[1], xyz[2]);
|
||||||
|
for (var i = 0; i < bp.Length; i++)
|
||||||
|
{
|
||||||
|
ref var info = ref bp[i];
|
||||||
|
var pos = ConversionUtility.FloatArrayToFloat3(info.position);
|
||||||
|
info.position = ConversionUtility.Float3ToFloatArray(rotChange * pos);
|
||||||
|
var rot = Quaternion.Euler(ConversionUtility.FloatArrayToFloat3(info.rotation));
|
||||||
|
info.rotation = ConversionUtility.Float3ToFloatArray((rotChange * rot).eulerAngles);
|
||||||
|
}
|
||||||
|
|
||||||
|
File.WriteAllText(id, JsonConvert.SerializeObject(bp));
|
||||||
|
Logging.CommandLog("Blueprint rotated " + rotChange.eulerAngles + " and dumped");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -31,7 +31,9 @@ namespace Pixi.Robots
|
||||||
{
|
{
|
||||||
Player local = new Player(PlayerType.Local);
|
Player local = new Player(PlayerType.Local);
|
||||||
Block baseBlock = local.GetBlockLookedAt();
|
Block baseBlock = local.GetBlockLookedAt();
|
||||||
Block[] blocks = baseBlock.GetConnectedCubes();
|
Block[] blocks = local.GetSelectedBlocks();
|
||||||
|
if (blocks.Length == 0)
|
||||||
|
blocks = baseBlock.GetConnectedCubes();
|
||||||
bool isBaseScaled = !(baseBlock.Scale.x > 0 && baseBlock.Scale.x < 2 && baseBlock.Scale.y > 0 && baseBlock.Scale.y < 2 && baseBlock.Scale.z > 0 && baseBlock.Scale.z < 2);
|
bool isBaseScaled = !(baseBlock.Scale.x > 0 && baseBlock.Scale.x < 2 && baseBlock.Scale.y > 0 && baseBlock.Scale.y < 2 && baseBlock.Scale.z > 0 && baseBlock.Scale.z < 2);
|
||||||
if (isBaseScaled)
|
if (isBaseScaled)
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
using Svelto.DataStructures;
|
using Svelto.DataStructures;
|
||||||
using Unity.Mathematics;
|
using Unity.Mathematics;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
@ -28,8 +28,6 @@ namespace Pixi.Robots
|
||||||
|
|
||||||
public static int CubeSize = 3;
|
public static int CubeSize = 3;
|
||||||
|
|
||||||
internal readonly Dictionary<string, FasterList<string>> textBlockInfo = new Dictionary<string, FasterList<string>>();
|
|
||||||
|
|
||||||
public RobotInternetImporter()
|
public RobotInternetImporter()
|
||||||
{
|
{
|
||||||
BlueprintProvider = new RobotBlueprintProvider(this);
|
BlueprintProvider = new RobotBlueprintProvider(this);
|
||||||
|
@ -125,23 +123,27 @@ namespace Pixi.Robots
|
||||||
{
|
{
|
||||||
blocks[i].position += pos;
|
blocks[i].position += pos;
|
||||||
}
|
}
|
||||||
|
// set textblock colors (replace <color="white"> with <color=#HEX> in textblocks)
|
||||||
|
Regex pattern = new Regex("<color=((?:\"white\")|(?:white))>", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
|
||||||
|
for (int i = 0; i < blocks.Length; i++)
|
||||||
|
{
|
||||||
|
if (blocks[i].block == BlockIDs.TextBlock)
|
||||||
|
{
|
||||||
|
// TODO this blindly replaces color tags anywhere in metadata, not just ones that will go in the TextBlock's text field
|
||||||
|
#if DEBUG
|
||||||
|
Logging.MetaLog($"Replacing text field in block with colour {blocks[i].color} with #{ColorUtility.ToHtmlStringRGBA(ColorSpaceUtility.UnquantizeToColor(blocks[i].color))}");
|
||||||
|
#endif
|
||||||
|
blocks[i].metadata = pattern.Replace(
|
||||||
|
blocks[i].metadata,
|
||||||
|
$"<color=#{ColorUtility.ToHtmlStringRGBA(ColorSpaceUtility.UnquantizeToColor(blocks[i].color))}>");
|
||||||
|
// NOTE: Regex.Replace replaces the whole match string only when there's a capture group (it's dumb, idk why).
|
||||||
|
// The non-capturing groups may be messing with .NET or something
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PostProcess(string name, ref Block[] blocks)
|
public void PostProcess(string name, ref Block[] blocks)
|
||||||
{
|
{
|
||||||
int textBlockInfoIndex = 0;
|
|
||||||
for (int c = 0; c < blocks.Length; c++)
|
|
||||||
{
|
|
||||||
Block block = blocks[c];
|
|
||||||
// the goal is for this to never evaluate to true (ie all cubes are translated correctly)
|
|
||||||
if (block.Type == BlockIDs.TextBlock)
|
|
||||||
{
|
|
||||||
textBlockInfoIndex++;
|
|
||||||
block.Specialise<TextBlock>().Text = textBlockInfo[name][textBlockInfoIndex];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
textBlockInfo.Remove(name);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
52
Pixi/TestImporter.cs
Normal file
52
Pixi/TestImporter.cs
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
using System;
|
||||||
|
using GamecraftModdingAPI;
|
||||||
|
using GamecraftModdingAPI.Blocks;
|
||||||
|
using GamecraftModdingAPI.Players;
|
||||||
|
using Pixi.Common;
|
||||||
|
using Unity.Mathematics;
|
||||||
|
|
||||||
|
namespace Pixi
|
||||||
|
{
|
||||||
|
public class TestImporter : Importer
|
||||||
|
{
|
||||||
|
public int Priority { get; } = 0;
|
||||||
|
public bool Optimisable { get; } = false;
|
||||||
|
public string Name { get; } = "Test~Spell";
|
||||||
|
public BlueprintProvider BlueprintProvider { get; } = null;
|
||||||
|
public bool Qualifies(string name)
|
||||||
|
{
|
||||||
|
return name.Equals("test", StringComparison.InvariantCultureIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BlockJsonInfo[] Import(string name)
|
||||||
|
{
|
||||||
|
return new[]
|
||||||
|
{
|
||||||
|
new BlockJsonInfo
|
||||||
|
{
|
||||||
|
name = BlockIDs.TextBlock.ToString() +
|
||||||
|
"\ttext that is preserved through the whole import process and ends up in the text block\ttextblockIDs_sux",
|
||||||
|
position = new[] {0f, 0f, 0f},
|
||||||
|
rotation = new[] {0f, 0f, 0f},
|
||||||
|
color = new[] {0f, 0f, 0f},
|
||||||
|
scale = new[] {1f, 1f, 1f},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PreProcess(string name, ref ProcessedVoxelObjectNotation[] blocks)
|
||||||
|
{
|
||||||
|
Player p = new Player(PlayerType.Local);
|
||||||
|
float3 pos = p.Position;
|
||||||
|
for (int i = 0; i < blocks.Length; i++)
|
||||||
|
{
|
||||||
|
blocks[i].position += pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PostProcess(string name, ref Block[] blocks)
|
||||||
|
{
|
||||||
|
// meh
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -99,6 +99,8 @@ Robot parsing uses information from [RobocraftAssembler](https://github.com/dddo
|
||||||
|
|
||||||
Gamecraft interactions use the [GamecraftModdingAPI](https://git.exmods.org/modtainers/GamecraftModdingAPI).
|
Gamecraft interactions use the [GamecraftModdingAPI](https://git.exmods.org/modtainers/GamecraftModdingAPI).
|
||||||
|
|
||||||
|
MIDI file processing uses an integrated copy of melanchall's [DryWetMidi](https://github.com/melanchall/drywetmidi) library, licensed under the [MIT License](https://github.com/melanchall/drywetmidi/blob/develop/LICENSE).
|
||||||
|
|
||||||
Thanks to **TheGreenGoblin** and their Python app for converting images to coloured square characters, which inspired the PixiConsole and PixiText commands.
|
Thanks to **TheGreenGoblin** and their Python app for converting images to coloured square characters, which inspired the PixiConsole and PixiText commands.
|
||||||
|
|
||||||
Thanks to **Mr. Rotor** for all of the Robocraft blocks used in the PixiBot and PixiBotFile commands.
|
Thanks to **Mr. Rotor** for all of the Robocraft blocks used in the PixiBot and PixiBotFile commands.
|
||||||
|
|
Loading…
Reference in a new issue