Ejemplo n.º 1
0
 public CounterSheet(int id, CounterSheetProperties properties, List <Piece> pieceList) : base(id)
 {
     this.properties = properties;
     base.Name       = properties.Name;
     counterSections = new CounterSection[properties.CounterSections.Length + properties.CardSections.Length];
     for (int i = 0; i < properties.CounterSections.Length; ++i)
     {
         counterSections[i] = new CounterSection(this, properties.CounterSections[i], pieceList);
     }
     for (int i = 0; i < properties.CardSections.Length; ++i)
     {
         counterSections[properties.CounterSections.Length + i] = new CounterSection(this, properties.CardSections[i], pieceList);
     }
 }
Ejemplo n.º 2
0
Archivo: Game.cs Proyecto: jimu/ZunTzu
        /// <summary>Saves the current game.</summary>
        /// <param name="outputStream">The stream to write this game data to.</param>
        /// <param name="indented">True to write indentation.</param>
        public void Save(Stream outputStream, bool indented)
        {
            XmlTextWriter writer = null;

            try {
                writer = new XmlTextWriter(outputStream, Encoding.GetEncoding("windows-1252"));
                if (indented)
                {
                    writer.Formatting  = Formatting.Indented;
                    writer.IndentChar  = '	';
                    writer.Indentation = 1;
                }
                writer.WriteStartDocument(true);

                writer.WriteStartElement("game");
                //writer.WriteAttributeString("version", "1.0");

                writer.WriteAttributeString("game-box", gameBox.Reference.Name);
                writer.WriteAttributeString("hash", Convert.ToBase64String(gameBox.Reference.Hash));

                writer.WriteAttributeString("scenario-name", scenarioName);
                if (scenarioDescription != null && scenarioDescription != "")
                {
                    writer.WriteAttributeString("scenario-description", scenarioDescription);
                }
                if (scenarioCopyright != null && scenarioCopyright != "")
                {
                    writer.WriteAttributeString("scenario-copyright", scenarioCopyright);
                }

                if (mode != Mode.Default)
                {
                    writer.WriteAttributeString("mode", mode.ToString());
                }
                if (!stackingEnabled)
                {
                    writer.WriteAttributeString("stacking", "disabled");
                }

                foreach (Board board in boards)
                {
                    writer.WriteStartElement("layout");
                    if (board is Map)
                    {
                        MapProperties mapProperties = ((Map)board).Properties;
                        if (mapProperties != null)
                        {
                            writer.WriteAttributeString("board", mapProperties.Name);
                            if (mapProperties.Name != board.Name)
                            {
                                writer.WriteAttributeString("tab", board.Name);
                            }
                        }
                        else
                        {
                            writer.WriteAttributeString("tab", board.Name);
                        }
                    }
                    else
                    {
                        CounterSheetProperties counterSheetProperties = ((CounterSheet)board).Properties;
                        writer.WriteAttributeString("board", counterSheetProperties.Name);
                        if (counterSheetProperties.Name != board.Name)
                        {
                            writer.WriteAttributeString("tab", board.Name);
                        }
                    }
                    writer.WriteAttributeString("left", board.VisibleArea.Left.ToString("F2", NumberFormatInfo.InvariantInfo));
                    writer.WriteAttributeString("top", board.VisibleArea.Top.ToString("F2", NumberFormatInfo.InvariantInfo));
                    writer.WriteAttributeString("right", board.VisibleArea.Right.ToString("F2", NumberFormatInfo.InvariantInfo));
                    writer.WriteAttributeString("bottom", board.VisibleArea.Bottom.ToString("F2", NumberFormatInfo.InvariantInfo));
                    if (board is CounterSheet && ((CounterSheet)board).Side == Side.Back)
                    {
                        writer.WriteAttributeString("side", Side.Back.ToString());
                    }
                    if (board == visibleBoard)
                    {
                        writer.WriteAttributeString("visible", "true");
                    }
                    if (board.Owner != Guid.Empty)
                    {
                        writer.WriteAttributeString("owner", board.Owner.ToString());
                    }

                    foreach (Stack stack in board.Stacks)
                    {
                        if (!stack.AttachedToCounterSection)
                        {
                            if (stack.Pieces.Length == 1)
                            {
                                Piece piece = (Piece)stack.Pieces[0];
                                writer.WriteStartElement("counter");
                                writer.WriteAttributeString("id", XmlConvert.ToString(piece.Id));
                                if (piece.Side == Side.Back)
                                {
                                    writer.WriteAttributeString("side", Side.Back.ToString());
                                }
                                writer.WriteAttributeString("x", stack.Position.X.ToString("F2", NumberFormatInfo.InvariantInfo));
                                writer.WriteAttributeString("y", stack.Position.Y.ToString("F2", NumberFormatInfo.InvariantInfo));
                                if (piece.RotationAngle != 0.0f)
                                {
                                    writer.WriteAttributeString("rot", (piece.RotationAngle * (180.0f / (float)Math.PI)).ToString("F0", NumberFormatInfo.InvariantInfo));
                                }
                                writer.WriteEndElement();
                            }
                            else
                            {
                                writer.WriteStartElement("stack");
                                writer.WriteAttributeString("x", stack.Position.X.ToString("F2", NumberFormatInfo.InvariantInfo));
                                writer.WriteAttributeString("y", stack.Position.Y.ToString("F2", NumberFormatInfo.InvariantInfo));
                                for (int i = 0; i < stack.Pieces.Length; ++i)
                                {
                                    Piece piece = (Piece)stack.Pieces[i];
                                    writer.WriteStartElement("counter");
                                    writer.WriteAttributeString("id", XmlConvert.ToString(piece.Id));
                                    if (piece.Side == Side.Back)
                                    {
                                        writer.WriteAttributeString("side", Side.Back.ToString());
                                    }
                                    if (piece.RotationAngle != 0.0f)
                                    {
                                        writer.WriteAttributeString("rot", (piece.RotationAngle * (180.0f / (float)Math.PI)).ToString("F0", NumberFormatInfo.InvariantInfo));
                                    }
                                    writer.WriteEndElement();
                                }
                                writer.WriteEndElement();
                            }
                        }
                    }
                    writer.WriteEndElement();
                }

                foreach (KeyValuePair <Guid, PlayerHand> playerHand in playerHands)
                {
                    writer.WriteStartElement("hand");
                    writer.WriteAttributeString("owner", playerHand.Key.ToString());
                    if (playerHand.Value.Count > 0)
                    {
                        foreach (Piece piece in playerHand.Value.Pieces)
                        {
                            writer.WriteStartElement("counter");
                            writer.WriteAttributeString("id", XmlConvert.ToString(piece.Id));
                            if (piece.Side == Side.Back)
                            {
                                writer.WriteAttributeString("side", Side.Back.ToString());
                            }
                            if (piece.RotationAngle != 0.0f)
                            {
                                writer.WriteAttributeString("rot", (piece.RotationAngle * (180.0f / (float)Math.PI)).ToString("F0", NumberFormatInfo.InvariantInfo));
                            }
                            writer.WriteEndElement();
                        }
                    }
                    writer.WriteEndElement();
                }

                writer.WriteEndElement();

                writer.WriteEndDocument();
            } finally {
                if (writer != null)
                {
                    writer.Close();
                }
            }
        }