Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
 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();
 }
Exemplo n.º 3
0
    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));
    }
Exemplo n.º 4
0
 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;
 }