Exemple #1
0
        void OnChange(Virus.Id id, Position from, Position to)
        {
            var changed = VirusFromId(id).First();

            changed.VirusPosition = to;

            // Pull up
            if (1 < to.Y && to.Y < from.Y)
            {
                Where(to.WithY(to.Y + 1), downer => Change.Invoke(downer.VirusId, downer.VirusPosition, to));
            }

            // Place
            if (1 < to.Y && from == Position.Hand())
            {
                Where(to.WithY(to.Y - 1), upper => {
                    if (!(
                            (upper.VirusGrade == Virus.Grade.Big && changed.VirusGrade == Virus.Grade.Mid) ||
                            (upper.VirusGrade == Virus.Grade.Mid && changed.VirusGrade == Virus.Grade.Tiny)
                            ))
                    {
                        return;
                    }
                    Absorb.Invoke(upper.VirusId, changed.VirusId);
                });
            }
        }
Exemple #2
0
    void OnBreak(Ruling.Virus.Id id)
    {
        var v   = viruses[id];
        var pos = v.transform.position;

        Destroy(v.gameObject);
        StartCoroutine(GenerateBursts(pos));
    }
Exemple #3
0
    void OnAbsorb(Ruling.Virus.Id eaterId, Ruling.Virus.Id eatenId)
    {
        var eater = viruses[eaterId];

        eater.Apply(eater.gameObject.transform.position, true);
        viruses[eatenId].Apply(eater.gameObject.transform.position, false);
        StartCoroutine(AbsorbWork(eatenId));
    }
Exemple #4
0
 public IEnumerable <Virus> VirusFromId(Virus.Id id)
 {
     foreach (var v in crowd)
     {
         if (v.VirusId == id)
         {
             yield return(v);
         }
     }
 }
Exemple #5
0
        void OnAbsorb(Virus.Id eaterId, Virus.Id eatenId)
        {
            var eaten = VirusFromId(eatenId).First();

            crowd.Remove(eaten);

            var eater = VirusFromId(eaterId).First();

            if (eater.isCracked || eaten.isCracked)
            {
                Break.Invoke(eaterId);
            }
            eater.isCracked = true;
        }
Exemple #6
0
    void OnMove(Ruling.Virus.Id id, Ruling.Position from, Ruling.Position to)
    {
        var v = viruses[id];

        foreach (var found in board.VirusFromId(id))
        {
            var dst = From(to);
            if (to.IsHand)
            {
                heldId = id;
                dst    = new Vector3(positioner.CurrentPos(), 0, 1);
            }
            v.Apply(dst, found.isCracked);
        }
    }
Exemple #7
0
        void OnBreak(Virus.Id brokenId)
        {
            var broken    = VirusFromId(brokenId).First();
            var brokenPos = broken.VirusPosition;

            if (1 < brokenPos.Y)
            {
                Where(brokenPos.WithY(brokenPos.Y - 1), upper => {
                    if (upper.VirusGrade == broken.VirusGrade)
                    {
                        var chain = Chain(upper.VirusId);
                    }
                });
            }
            if (1 < brokenPos.X)
            {
                Where(brokenPos.WithX(brokenPos.X - 1), lefter => {
                    if (lefter.VirusGrade == broken.VirusGrade)
                    {
                        var chain = Chain(lefter.VirusId);
                    }
                });
            }
            if (brokenPos.X < Width)
            {
                Where(brokenPos.WithX(brokenPos.X + 1), righter => {
                    if (righter.VirusGrade == broken.VirusGrade)
                    {
                        var chain = Chain(righter.VirusId);
                    }
                });
            }
            Where(brokenPos.WithY(brokenPos.Y + 1), downer =>
                  Change.Invoke(downer.VirusId, downer.VirusPosition, brokenPos)
                  );

            crowd.Remove(broken);
        }
Exemple #8
0
 void Point(Ruling.Virus.Id _id)
 {
     score       += 10;
     display.text = "SCORE " + score;
 }
Exemple #9
0
    IEnumerator AbsorbWork(Ruling.Virus.Id eatenId)
    {
        yield return(new WaitForSeconds(0.2f));

        Destroy(viruses[eatenId].gameObject);
    }
Exemple #10
0
        async Task Chain(Virus.Id toBreak)
        {
            await Task.Delay(130);

            Break.Invoke(toBreak);
        }