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); }
protected override void StartInit() { base.StartInit(); view.SetInitialModel(BlockVisualBase.Model.NodeDeadend); view.onRefresh += () => { view.VisualBase.Select(BindMatrix.GetOutBindsCount(this) == 0 ? BlockVisualBase.Model.NodeDeadend : BlockVisualBase.Model.NodePipe); view.SecondaryPainter.NumInPalette = logic.HasPulse ? 3 : CheckerboardColor; }; view.SetDirty(); }
void OnPulseDeadEnd(Block from) { if (from == null || BindMatrix.GetOutBindsCount(this) != 0) { return; } var dir = Utils.DirFromCoords(logic.Position - from.logic.Position); var root = Roots.Root[rootId].block; root.soundsPlayer.Play(dir); PixelDriver.Add(PixelRoad.Circle(root.view.PrimaryPainter.palette.GetColor(dir), 2f, 3f, 0.05f, 0.5f, logic.X, logic.Y).SetWeight(0.3f)); }
protected override void OnEnable() { logic.onTap += e => { if (BindMatrix.GetOutBindsCount(this) == 0) { var v = logic.Position + Utils.CoordsFromDir(rootId % 4); NodeBlock.Create(Mathf.RoundToInt(v.x), Mathf.RoundToInt(v.y), this); } else { logic.ReceivePulse(); } }; view.onRefresh += () => view.SecondaryPainter.NumInPalette = logic.HasPulse ? 3 : 2; logic.stepNumber = 0; }