コード例 #1
0
ファイル: Board.cs プロジェクト: CombNITNC/Hibiki
        void OnManipulate()
        {
            if (holder.HeldId == Virus.Id.Null)
            {
                var column = VirusFromPosition(pos => pos.X == holder.X).OrderByDescending(v => v.VirusPosition.Y);
                if (column.Count() < 1)
                {
                    return;
                }

                var toTake = column.First();
                holder.HeldId = toTake.VirusId;
                Change.Invoke(toTake.VirusId, toTake.VirusPosition, Position.Hand());
            }
            else
            {
                var toPlace = VirusFromId(holder.HeldId).First();
                var end     = crowd.Select(v => v.VirusPosition)
                              .Where(pos => pos.X == holder.X)
                              .OrderByDescending(pos => pos.Y)
                              .Select(pos => pos.Y + 1)
                              .DefaultIfEmpty(1)
                              .First();
                Change.Invoke(toPlace.VirusId, Position.Hand(), Position.OnBoard(holder.X, end));

                holder.HeldId = Virus.Id.Null;
            }
        }
コード例 #2
0
ファイル: Board.cs プロジェクト: CombNITNC/Hibiki
        void OnDrop()
        {
            // Shift all virus down
            foreach (var v in crowd)
            {
                if (v.VirusPosition.IsHand)
                {
                    continue;
                }
                Change.Invoke(v.VirusId,
                              v.VirusPosition,
                              v.VirusPosition.WithY(v.VirusPosition.Y + 1)
                              );
            }

            var grades = Enum.GetValues(typeof(Virus.Grade));
            var newRow = Enumerable.Range(1, Width).Select(i => {
                var v           = new Virus();
                v.VirusPosition = Position.OnBoard(i, 1);
                v.VirusGrade    = (Virus.Grade)grades.GetValue(rand.Next(grades.Length));
                return(v);
            });

            foreach (var v in newRow)
            {
                Spawn.Invoke(v);
            }
        }
コード例 #3
0
ファイル: Position.cs プロジェクト: CombNITNC/Hibiki
 public Position WithY(int newY)
 {
     return(Position.OnBoard(X, newY));
 }
コード例 #4
0
ファイル: Position.cs プロジェクト: CombNITNC/Hibiki
 public Position WithX(int newX)
 {
     return(Position.OnBoard(newX, Y));
 }