private Order ReadOrder(NetDataReader reader)
        {
            int       playerIndex = reader.GetInt();
            OrderType orderType   = (OrderType)reader.GetInt();

            var order = new Order(playerIndex, orderType);

            byte argumentCount = reader.GetByte();

            for (int i = 0; i < argumentCount; i++)
            {
                OrderArgumentType argumentType = (OrderArgumentType)reader.GetInt();

                switch (argumentType)
                {
                case OrderArgumentType.Integer:
                    order.AddIntegerArgument(reader.GetInt());
                    break;

                case OrderArgumentType.Float:
                    order.AddFloatArgument(reader.GetFloat());
                    break;

                case OrderArgumentType.Boolean:
                    order.AddBooleanArgument(reader.GetBool());
                    break;

                case OrderArgumentType.ObjectId:
                    order.AddObjectIdArgument(reader.GetUInt());
                    break;

                case OrderArgumentType.Position:
                    order.AddPositionArgument(new Vector3(reader.GetFloat(), reader.GetFloat(), reader.GetFloat()));
                    break;

                case OrderArgumentType.ScreenPosition:
                    order.AddScreenPositionArgument(new Point2D(reader.GetInt(), reader.GetInt()));
                    break;

                case OrderArgumentType.ScreenRectangle:
                    order.AddScreenRectangleArgument(new Rectangle(reader.GetInt(), reader.GetInt(),
                                                                   reader.GetInt(), reader.GetInt()));
                    break;

                default:
                    throw new NotImplementedException("We don't know the other argument types");
                }
            }

            return(order);
        }
Beispiel #2
0
 internal OrderArgument(
     OrderArgumentType argumentType,
     in OrderArgumentValue value)