Beispiel #1
0
        public static Line ReadLine(NetIncomingMessage message, bool isServer=false)
        {
            float removeAnimation = message.ReadFloat();
            Vector2 animationEnd = message.ReadVector2();
            int turn = message.ReadInt32();
            bool wasGrowing = message.ReadBoolean();
            Vector2 begin = message.ReadVector2();
            Vector2 end = message.ReadVector2();
            float thickness = message.ReadFloat();

            if (!isServer) {
                animationEnd = Constants.FromField(animationEnd);
                begin = Constants.FromField(begin);
                end = Constants.FromField(end);
            }

            Line l = new Line (begin, end);
            l.removeAnimationTime = removeAnimation;
            l.animationEnd = animationEnd;
            l.turn = turn;
            l.color = Constants.COLORS[turn];
            l.wasGrowing = wasGrowing;
            l.thickness = thickness;

            return l;
        }
Beispiel #2
0
 private void ReadData(AttributeTypeID Type, NetIncomingMessage Message)
 {
     switch(Type) {
         case AttributeTypeID.Float:
             Data = Message.ReadFloat();
             break;
         case AttributeTypeID.Int:
             Data = Message.ReadInt32();
             break;
         case AttributeTypeID.List:
             Console.WriteLine("AttributeSystem: List<> Type not supported on network sync");
             break;
         case AttributeTypeID.Long:
             Data = Message.ReadInt64();
             break;
         case AttributeTypeID.Rectangle:
             Data = Message.ReadRectangle();
             break;
         case AttributeTypeID.String:
             Data = Message.ReadString();
             break;
         case AttributeTypeID.Vector2:
             Data = Message.ReadVector2();
             break;
         case AttributeTypeID.Bool:
             Data = Message.ReadBoolean();
             break;
         default:
             Console.WriteLine("Invalid Attribute Type: {0}", Type.ToString());
             break;
     }
 }
 public ProjectileTransferableData(NetIncomingMessage message)
 {
     SessionID = message.ReadInt64();
     ID = message.ReadInt32();
     IsValid = message.ReadBoolean();
     Position = message.ReadVector2();
     Angle = message.ReadFloat();
 }
Beispiel #4
0
        public void WorkWithData(NetIncomingMessage inc)
        {
            int ind = inc.ReadInt32();
            EventType e = (EventType)inc.ReadByte();
            NetOutgoingMessage msg = server.CreateMessage();

            switch (e) {
                case EventType.ConnectCircles:
                    Vector2 begin = inc.ReadVector2();
                    Vector2 end = inc.ReadVector2();

                    Log(ind + " player tring to connect " + begin + " w/ " + end);

                    if (ind == CurrentTurn && Connect(begin, end)) {
                        Log("He did it");
                        msg.Write((byte)EventType.ConnectCircles);
                        msg.Write(CurrentTurn);
                        msg.Write(begin);
                        msg.Write(end);

                        SendToAll(msg);

                        if (Circle.CheckWon(CurrentField, CurrentTurn)) {
                            SendWon();
                        }

                        NextTurn();
                    } else {
                        Log("Lol no");
                        msg.Write((byte)EventType.RemoveLine);
                        Line.Write(msg, Line.ReadLine(inc, true), true);

                        SendToAll(msg);
                    }
                    break;

                case EventType.CurrentLine:
                    Line l = Line.ReadLine(inc, true);

                    msg.Write((byte)EventType.CurrentLine);
                    Line.Write(msg, l, true);
                    SendToAll(msg, inc.SenderConnection);
                    break;
            }
        }
 public void Unpack(NetIncomingMessage msg)
 {
     username = msg.ReadString();
     position = msg.ReadVector2();
     sequence = msg.ReadByte();
 }
 public void Unpack(NetIncomingMessage msg)
 {
     username = msg.ReadString();
     position = msg.ReadVector2();
     id = msg.ReadInt32();
 }
Beispiel #7
0
 public void Read(NetIncomingMessage msg)
 {
     this.PlayerCount = msg.ReadInt32();
     this.Players = new Dictionary<long, Player>();
     for (int i = 0; i < this.PlayerCount; i++)
     {
         long RUI = msg.ReadInt64();
         Vector2 position = msg.ReadVector2();
         Player player = new Player(RUI, playerTexture, new Color(msg.ReadByte(), msg.ReadByte(), msg.ReadByte()));
         player.Position = position;
         this.Players.Add(RUI, player);
     }
 }
Beispiel #8
0
            public static MsgSpawnPacket Read(NetIncomingMessage packet)
            {
                Byte slot = packet.ReadByte();
                Vector2 position = packet.ReadVector2();
                Single rotation = packet.ReadSingle();

                return new MsgSpawnPacket(slot, position, rotation);
            }
Beispiel #9
0
        public void UpdateFromMovementInput(NetIncomingMessage MovementPacket)
        {
            Vector2 Vector = MovementPacket.ReadVector2();
            if (Vector != IdleDirection) { //If We Moved Update
                Location += (Vector * 3);
                NetOutgoingMessage MovementBroadCast = NetworkManager.Server.CreateMessage();
                MovementBroadCast.Write((byte)MessageTypes.ActorMovement);
                MovementBroadCast.Write(ID);
                MovementBroadCast.WriteVector2(Location);
                NetworkManager.Server.SendToAll(MovementBroadCast, NetDeliveryMethod.Unreliable);
            }

            if (Vector != LastDirection) {
                NetOutgoingMessage Message = NetworkManager.Server.CreateMessage();
                Message.Write((byte)MessageTypes.ActorAnimate);
                Message.Write(ID);
                Message.Write(GetAnimationForDirection(Vector));
                Message.Write(true);
                NetworkManager.Server.SendToAll(Message, NetDeliveryMethod.ReliableOrdered);
            }

            LastDirection = Vector;
            PostMovement(MovementPacket.SenderConnection);
        }
        private void RecievedPlayerShipPosition( byte playerNumber, NetIncomingMessage msg )
        {
            Player playerRecieved = GetPlayerByPlayerNumber ( playerNumber );

            if ( playerRecieved != null )
            {
                //Local client knows of this player. Update it.
                Vector2 position = msg.ReadVector2 ( );
                float rotationangle = msg.ReadFloat ( );
                Vector2 direction = msg.ReadVector2 ( );
                Vector2 velocity = msg.ReadVector2 ( );
                playerRecieved.ship.UpdateRemotePosition ( position, rotationangle, direction, velocity );

                _client.Recycle ( msg );
            }
            else
            {
                //Local client does not know about this player. Add it to the other players list.
                RequestInfoAboutPlayer ( playerNumber );
            }
        }
Beispiel #11
0
        private void WorkWithData(NetIncomingMessage msg)
        {
            EventType e = (EventType)msg.ReadByte();

            switch (e) {
                case EventType.GameStarted:
                    int i = msg.ReadInt32();

                    PlayerIndex = i;

                    if (OnGameStarted != null) {
                        OnGameStarted(i);
                    }
                    break;

                case EventType.ConnectCircles:
                    if (OnConnectCircles != null) {
                        OnConnectCircles(msg.ReadInt32(), msg.ReadVector2(), msg.ReadVector2());
                    }
                    break;

                case EventType.NextTurn:
                    if (OnNextTurn != null) {
                        OnNextTurn(msg.ReadInt32());
                    }
                    break;

                case EventType.RemoveLine:
                    if (OnRemoveLine != null) {
                        OnRemoveLine(Line.ReadLine(msg));
                    }
                    break;

                case EventType.OnWon:
                    if (OnWon != null) {
                        OnWon(msg.ReadInt32());
                    }
                    Disconnect();
                    break;

                case EventType.CurrentLine:
                    if (OnCurrentLineChanged != null)    {
                        OnCurrentLineChanged(Line.ReadLine(msg));
                    }
                    break;

                case EventType.Disconnected:
                    if (OnDisconnect != null) {
                        OnDisconnect(msg.ReadString());
                    }
                    break;
            }
        }
 /// <summary>
 /// The decode.
 /// </summary>
 /// <param name="im">
 /// The im.
 /// </param>
 public void Decode(NetIncomingMessage im)
 {
     this.Id = im.ReadInt64();
     this.MessageTime = im.ReadDouble();
     this.Position = im.ReadVector2();
     this.Velocity = im.ReadVector2();
     this.FiredByPlayer = im.ReadBoolean();
     this.FiredById = im.ReadInt64();
 }
Beispiel #13
0
            public static MsgBeginShotPacket Read(NetIncomingMessage packet)
            {
                Byte slot = packet.ReadByte();
                Byte shotSlot = packet.ReadByte();
                Vector2 position = packet.ReadVector2();
                Single rotation = packet.ReadSingle();
                Vector2 velocity = packet.ReadVector2();

                return new MsgBeginShotPacket(slot, shotSlot, position, rotation, velocity);
            }
Beispiel #14
0
        public static void UpdateFromPacket(NetIncomingMessage Message)
        {
            long ActorID = Message.ReadInt64();

            if (!DrawableActors.ContainsKey(ActorID))
                return;

            DrawableActors[ActorID].Location = Message.ReadVector2();
        }
Beispiel #15
0
 public void Decode(NetIncomingMessage im)
 {
     this.Target = im.ReadVector2();
 }
Beispiel #16
0
        public static void SpawnActor(NetIncomingMessage Message)
        {
            ObjectTypes ActorType = (ObjectTypes)Message.ReadInt32();
            switch (ActorType) {
                case ObjectTypes.PlayerActor:
                    #region Player
                    var ID = Message.ReadInt64();
                    var Sex = Message.ReadByte();
                    var Location = Message.ReadVector2();

                    switch(Sex) {
                        case 0:
                            AnimatedActor Actor = new AnimatedActor(new SpriteSheet(
                                GameClient.ContentManager.Load<Texture2D>("Natkuma"),
                                40, 60));

                            Actor.RegisterAnimation("WalkNorth", new List<int>() { 23, 24, 25, 26, 27, 26, 25, 24, 23, 32, 31, 30, 29, 28, 29, 30, 31, 32 });
                            Actor.RegisterAnimation("WalkEast", new List<int>() { 10, 3, 4, 5, 6, 7, 8, 9 });
                            Actor.RegisterAnimation("WalkSouth", new List<int>() { 34, 35, 36, 37, 38, 37, 36, 35, 34, 43, 42 ,41, 40, 39, 40, 41, 42, 43 });
                            Actor.RegisterAnimation("WalkWest", new List<int>() { 11, 18, 17, 16, 15, 14, 13, 12 });
                            Actor.PlayAnimation("WalkEast", true);

                            Actor.ID = ID;
                            Actor.Sex = Sex;
                            Actor.Location = Location;
                            Actor.Scale = 1;
                            if (!DrawableActors.ContainsKey(Actor.ID))
                                DrawableActors.Add(Actor.ID, Actor);
                            else
                                Console.WriteLine("Error: Avatar Already Added for Key {0}", Actor.ID);
                            break;
                        case 1:
                            AnimatedActor ActorFem = new AnimatedActor(new SpriteSheet(
                                GameClient.ContentManager.Load<Texture2D>("Malice"),
                                40, 60));

                            ActorFem.RegisterAnimation("WalkNorth", new List<int>() { 35, 36, 37, 38, 39, 40, 39, 38, 37, 36, 35, 41, 42, 43, 44, 45, 44, 43, 42, 41 });
                            ActorFem.RegisterAnimation("WalkEast", new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
                            ActorFem.RegisterAnimation("WalkSouth", new List<int>() { 23, 24, 25, 26, 27, 28, 27, 26, 25, 24, 23, 29, 30, 31, 32, 33 });
                            ActorFem.RegisterAnimation("WalkWest", new List<int>() { 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 });
                            ActorFem.PlayAnimation("WalkEast", true);

                            ActorFem.ID = ID;
                            ActorFem.Sex = Sex;
                            ActorFem.Location = Location;
                            ActorFem.Scale = 1;
                            if (!DrawableActors.ContainsKey(ActorFem.ID))
                                DrawableActors.Add(ActorFem.ID, ActorFem);
                            else {
                                DrawableActors[ActorFem.ID] = ActorFem;
                            }
                          break;
                        default:
                            Console.WriteLine("Error: Invalid Sex Type: {0}", Sex);
                            break;
                    }
                    break;
                    #endregion
                case ObjectTypes.Tree:
                    #region Tree
                    Tree T = new Tree(Message);
                    if (!DrawableActors.ContainsKey(T.ID))
                        DrawableActors.Add(T.ID, T);
                    else {
                        DrawableActors[T.ID] = T;
                    }
                    break;
                    #endregion
                case ObjectTypes.Rock:
                    Rock R = new Rock(Message);
                    if (!DrawableActors.ContainsKey(R.ID))
                        DrawableActors.Add(R.ID, R);
                    else
                        DrawableActors[R.ID] = R;

                    break;
                default:
                    Console.WriteLine("Unknown ActorType Creation: {0}", ActorType);
                    break;
            }
        }
 /// <summary>
 /// The decode.
 /// </summary>
 /// <param name="im">
 /// The im.
 /// </param>
 public void Decode(NetIncomingMessage im)
 {
     this.Id = im.ReadInt64();
     this.MessageTime = im.ReadDouble();
     this.Position = im.ReadVector2();
     this.Velocity = im.ReadVector2();
     this.Rotation = im.ReadSingle();
 }
Beispiel #18
0
 public static void Read(Packets Packet, NetIncomingMessage I)
 {
     switch (Packet)
     {
         case Packets.Connection:
             if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server)
             {
                 ulong ClientVersion = I.ReadUInt64();
                 if (ClientVersion == Globe.Version)
                 {
                     Player Connector = Player.Add(new Player(I.ReadString()) { Connection = I.SenderConnection });
                     if (Connector != null)
                     {
                         MultiPlayer.Send("Game", MultiPlayer.Construct("Game", Packet, Connector.Slot, Connector.Name), I.SenderConnection);
                         List<object> Details = new List<object>();
                         for (byte i = 0; i < Players.Length; i++)
                             if ((Players[i] != null) && (Players[i] != Connector))
                             {
                                 Details.Add(true);
                                 Details.Add(Players[i].Name);
                             }
                             else Details.Add(false);
                         I.SenderConnection.Approve(MultiPlayer.Construct("Game", Packets.Initial, (byte)Players.Length, Connector.Slot, Details));
                     }
                     else I.SenderConnection.Deny("Full");
                 }
                 else I.SenderConnection.Deny("Version indifference, Client: " + ClientVersion + " - Server: " + Globe.Version);
             }
             else if (MultiPlayer.Type("Game") == MultiPlayer.Types.Client) { byte Slot = I.ReadByte(); Player.Set(Slot, new Player(I.ReadString())); }
             break;
         case Packets.Disconnection:
             Player Disconnector = ((MultiPlayer.Type("Game") == MultiPlayer.Types.Server) ? Player.Get(I.SenderConnection) :
                 ((MultiPlayer.Type("Game") == MultiPlayer.Types.Client) ? Players[I.ReadByte()] : null));
             if (Disconnector != null) Player.Remove(Disconnector);
             if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server) MultiPlayer.Send("Game", MultiPlayer.Construct("Game", Packets.Disconnection, Disconnector.Slot), I.SenderConnection);
             break;
         case Packets.Initial:
             if (MultiPlayer.Type("Game") == MultiPlayer.Types.Client)
             {
                 Players = new Player[I.ReadByte()];
                 Self = Player.Set(I.ReadByte(), new Player(MpName) { });
                 for (byte i = 0; i < Players.Length; i++)
                     if (I.ReadBoolean())
                     {
                         Players[i] = new Player(i, I.ReadString());
                     }
                 Timers.Add("Positions", (1 / 30d));
                 State = States.Game;
             }
             break;
         case Packets.Position:
             Player Sender = ((MultiPlayer.Type("Game") == MultiPlayer.Types.Server) ? Player.Get(I.SenderConnection) : null);
             Vector2 Position; float Angle;
             if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server)
             {
                 if (Sender != null)
                 {
                     Sender.Position = I.ReadVector2();
                     Sender.Angle = I.ReadFloat();
                 }
             }
             else if (MultiPlayer.Type("Game") == MultiPlayer.Types.Client)
             {
                 byte Count = (byte)((I.LengthBytes - 1) / 12);
                 for (byte i = 0; i < Count; i++)
                 {
                     Sender = Players[I.ReadByte()];
                     Position = I.ReadVector2();
                     Angle = I.ReadFloat();
                     if (Sender != null)
                     {
                         Sender.Position = Position;
                         Sender.Angle = Angle;
                     }
                 }
             }
             break;
     }
 }
Beispiel #19
0
            public static MsgPlayerClientUpdatePacket Read(NetIncomingMessage packet)
            {
                Vector2 position = packet.ReadVector2();
                Single rotation = packet.ReadSingle();

                return new MsgPlayerClientUpdatePacket(position, rotation);
            }