Initial commit
This commit is contained in:
+80
@@ -0,0 +1,80 @@
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Placement handler for repositioning an already-placed block.
|
||||
/// </summary>
|
||||
public class ExistingBlockPlacementHandler : IPlacementHandler
|
||||
{
|
||||
private readonly CommandHandler _commandHandler;
|
||||
|
||||
public ExistingBlockPlacementHandler(CommandHandler commandHandler)
|
||||
{
|
||||
_commandHandler = commandHandler;
|
||||
Debug.Log("initialize the ExistingBlockPlacement");
|
||||
}
|
||||
|
||||
public void Commit(BlockEditContext ctx)
|
||||
{
|
||||
if (ctx.SourceObject == null) return;
|
||||
|
||||
_commandHandler.moveBlock(
|
||||
ctx.SourceObject.GetComponent<Block>().getBlockId(),
|
||||
ctx.OriginalPosition,
|
||||
ctx.GhostTransform.position,
|
||||
ctx.OriginalRotation,
|
||||
ctx.GhostTransform.rotation);
|
||||
// ensure the correct positionning after commiting
|
||||
RestoreObject(ctx, ctx.GhostTransform.position, ctx.GhostTransform.rotation);
|
||||
}
|
||||
|
||||
public void Cancel(BlockEditContext ctx)
|
||||
{
|
||||
if (ctx.SourceObject == null) return;
|
||||
RestoreObject(ctx, ctx.OriginalPosition, ctx.OriginalRotation);
|
||||
}
|
||||
|
||||
private void RestoreObject(BlockEditContext ctx, Vector3 pos, Quaternion rot)
|
||||
{
|
||||
ctx.SourceObject.transform.SetPositionAndRotation(pos, rot);
|
||||
RestoreMaterialAlphaAndColor(ctx.SourceObject);
|
||||
SetLayerRecursively(ctx.SourceObject, LayerMask.NameToLayer("Interactable"));
|
||||
ctx.SourceObject.SetActive(true);
|
||||
}
|
||||
|
||||
private void RestoreMaterialAlphaAndColor(GameObject obj)
|
||||
{
|
||||
foreach (var r in obj.GetComponentsInChildren<Renderer>())
|
||||
{
|
||||
if (r.gameObject.layer == LayerMask.NameToLayer("Gizmos")) continue;
|
||||
|
||||
foreach (var mat in r.materials)
|
||||
{
|
||||
if (mat.HasProperty("_Color"))
|
||||
{
|
||||
mat.color = new Color(1f, 1f, 1f, 1f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void SetLayerRecursively(GameObject obj, int layer, System.Func<Transform, bool> Method)
|
||||
{
|
||||
if (Method(obj.transform))
|
||||
obj.layer = layer;
|
||||
foreach (Transform child in obj.transform)
|
||||
SetLayerRecursively(child.gameObject, layer, Method);
|
||||
}
|
||||
|
||||
private void SetLayerRecursively(GameObject obj, int layer)
|
||||
{
|
||||
SetLayerRecursively(obj, layer, x =>
|
||||
{
|
||||
return x.gameObject.layer != LayerMask.NameToLayer("Gizmos");
|
||||
});
|
||||
}
|
||||
|
||||
public void Debugln()
|
||||
{
|
||||
Debug.Log("Hi I'm Existing");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user