static void DragFromTo(int fromX, int fromY, int toX, int toY) { if (!FieldMatrix.Get(fromX, fromY, out var fromBlock)) { return; } if (FieldMatrix.Get(toX, toY, out var toBlock)) { var bind = BindMatrix.GetBind(fromBlock, toBlock); var newBlockOffset = new Vector2(toX - fromX, toY - fromY); if (bind == null) { BindMatrix.AddBind(fromBlock, toBlock, newBlockOffset, Bind.BlockBindStrength); return; } if (bind.First != fromBlock) { if (!(fromBlock is RootBlock) && BindMatrix.GetOutBindsCount(fromBlock) == 0) { fromBlock.Destroy(); return; } bind.Break(); BindMatrix.AddBind(fromBlock, toBlock, newBlockOffset, Bind.BlockBindStrength); return; } return; } NodeBlock.Create(toX, toY, fromBlock); }
public static NodeBlock Create(int x, int y, Block boundWith) { var b = Create(x, y, boundWith.rootId); BindMatrix.AddBind(boundWith, b, b.logic.Position - boundWith.logic.Position, Bind.BlockBindStrength); return(b); }
public static RootBlock Create(int x, int y, int rootId = -1) { rootId = rootId == -1 ? Roots.Count : rootId; var b = Instantiate(Prefabs.Instance.rootBlock, Roots.Root[rootId].rootCanvas.transform).GetComponent <RootBlock>(); b.rootId = rootId; b.logic.SetCoords(x, y); b.transform.position = b.logic.Position; b.StartInit(); BindMatrix.AddBind(StaticAnchor.Create(b.logic.Position), b, Vector2.zero, Bind.BlockStaticBindStrength); b.view.SetDirty(); return(b); }
protected virtual void OnEnable() { logic.onBeginDrag += eventData => { if (eventData.button == PointerEventData.InputButton.Right) { BindMatrix.AddBind(this, MouseBind.Get(), Vector2.zero, Bind.MouseBindStrength); } }; logic.onEndDrag += eventData => { if (eventData.button == PointerEventData.InputButton.Right) { BindMatrix.RemoveBind(this, MouseBind.Get()); } }; }
public static NodeBlock Create(int x, int y, int rootId = 0, float startOffsetClamp = 0f) { var position = new Vector2(x, y); var startPosition = position + Vector2.ClampMagnitude(Roots.Root[rootId].block.logic.Position - position, startOffsetClamp); var b = Instantiate(Prefabs.Instance.nodeBlock, startPosition, Quaternion.identity, Roots.Root[rootId].rootCanvas.transform).GetComponent <NodeBlock>(); b.rootId = rootId; b.logic.SetCoords(x, y); b.StartInit(); var startModel = b.view.VisualBase.Current; Animator.Interpolate(0.4f, 1f, 0.4f) .PassValue(v => startModel.transform.localScale = new Vector3(v, v, 1)) .Type(InterpolationType.InvSquare).NullCheck(startModel.gameObject); BindMatrix.AddBind(StaticAnchor.Create(b.logic.Position, false), b, Vector2.zero, Bind.BlockStaticBindStrength); Roots.Root[rootId].DeadEndsSetDirty(); return(b); }
public void Deserialize() { foreach (var rb in RootBlocks) { rb.Deserialize(); } foreach (var bs in NodeBlocks) { bs.Deserialize(); } foreach (var bs in Binds) { FieldMatrix.Get(bs.FirstX, bs.FirstY, out var first); FieldMatrix.Get(bs.SecondX, bs.SecondY, out var second); var offset = new Vector2(bs.SecondX - bs.FirstX, bs.SecondY - bs.FirstY); BindMatrix.AddBind(first, second, offset, bs.Strength); } foreach (var sps in SoundsPlayers) { sps.Deserialize(); } }
protected override void StartInit() { base.StartInit(); view.SetInitialModel(BlockVisualBase.Model.Root); BindMatrix.AddBind(StaticAnchor.Create(logic.Position), this, Vector2.zero, Bind.BlockBindStrength); }