Пример #1
0
    private void UpdateMove(NetIncomingMessage incmsg)
    {
        string name = incmsg.ReadString();
        World  w    = serverCore.GetWorld();

        for (int i = 0; i < w.ships.Count; i++)
        {
            if (w.ships[i].shipName.Equals(name))
            {
                w.ships[i].timeOut        = 0;
                w.ships[i].cursorPosition = new Vector2(incmsg.ReadSingle(), incmsg.ReadSingle());
                w.ships[i].isWPress       = incmsg.ReadBoolean();
                w.ships[i].isSPress       = incmsg.ReadBoolean();
                w.ships[i].isAPress       = incmsg.ReadBoolean();
                w.ships[i].isDPress       = incmsg.ReadBoolean();
                w.ships[i].isXPress       = incmsg.ReadBoolean();
                w.ships[i].isLeftPress    = incmsg.ReadBoolean();
                w.ships[i].isRightPress   = incmsg.ReadBoolean();
                return;
            }
        }
        NetOutgoingMessage outmsg = serverCore.CreateMessage();

        outmsg.Write((byte)PacketType.DestroyShip);
        outmsg.Write(name);
        ServerPacketSender.SendMessageTo(outmsg, incmsg.SenderConnection);
    }
Пример #2
0
    // Update is called once per frame
    //void FixedUpdate()
    //{
    //    ServerPacketSender.ProjectilePosition(this);
    //}

    public IEnumerator Remove()
    {
        yield return(new WaitForSeconds(5f));

        ServerPacketSender.DespawnProjectile(this);
        Despawn();
    }
Пример #3
0
 private void UpdateNetwork()
 {
     stNet.Restart();
     //UpdatePackets(true, null, null);
     lock (messages)
     {
         server.ReadMessages(messages);
         List <NetIncomingMessage> mss = messages;
         for (int i = 0; i < mss.Count; i++)
         {
             NetIncomingMessage m = mss[i];
             switch (m.MessageType)
             {
             case NetIncomingMessageType.Data:
                 PacketType pk = (PacketType)m.ReadByte();
                 packetHandler.ReadPacket(pk, m);
                 //UpdatePackets(false, m, messages);
                 mss.Remove(m);
                 server.Recycle(m);
                 break;
             }
         }
     }
     //if (timerUpdate++ > 20)
     {
         //timerUpdate = 0;
     }
     //else if(timerUpdate == 20)
     {
         ServerPacketSender.UpdatePlayers(world, db);
         ServerPacketSender.UpdateNpcs(world);
     }
     stNet.Stop();
     netTime = stNet.Elapsed;
 }
Пример #4
0
 public bool Shoot()
 {
     if (shootTimer <= 0 && ownerShip.energy >= energyCost)
     {
         if (!ownerShip.world.isRemote)
         {
             Bullet bp = new Bullet(gunType, ownerShip, Position, Rotation, bulletSpeed, ownerShip.world);
             ownerShip.energy -= energyCost;
             effectColor       = bp.color;
             shootTimer        = shootTimerMax;
             ownerShip.world.bullets.Add(bp);
             ServerPacketSender.CreateBullet(bp);
         }
         else
         {
             Bullet bp = new Bullet(gunType, ownerShip, Position, Rotation, bulletSpeed, ownerShip.world);
             effectColor       = bp.color;
             shootTimer        = shootTimerMax;
             ownerShip.energy -= energyCost;
             randomSize        = 1 + (float)core.random.NextDouble() / 4F;
             randomEffect      = (byte)core.random.Next(2);
         }
         return(true);
     }
     return(false);
 }
Пример #5
0
    private void Respawn(NetIncomingMessage incmsg)
    {
        string   playerName = incmsg.ReadString();
        DataBase db         = serverCore.GetDataBase();
        World    w          = serverCore.GetWorld();

        int[] components = db.GetUserComponents(playerName);//{ 1, 1, 1, 1, 1, 1, 1 };
        if (components != null && components[0] != 0 && components[1] != 0)
        {
            byte[]     b   = db.GetUserHangar(playerName);
            ShipType   st  = (ShipType)b[0];
            Faction    f   = (Faction)b[1];
            Vector2    pos = f == Faction.Human ? new Vector2(0, 1500) : f == Faction.Enemy ? new Vector2(-1500, -500) : new Vector2(1500, -500);
            ShipPlayer s   = new ShipPlayer(pos, pos, f, st, components, w, 0, 0);
            s.shipName = playerName;
            GunSlot[] gs = db.GetUserGuns(playerName, s);
            s.AddGuns(gs);
            int xpos = serverCore.random.Next(2) == 0 ? 750 : -750;
            int ypos = serverCore.random.Next(2) == 0 ? 750 : -750;
            s.jumpX = xpos;
            s.jumpY = ypos;
            w.ships.Add(s);
            ServerPacketSender.SendNewPlayer(s, true);
        }
    }
Пример #6
0
    private void DisconnetPlayer(NetIncomingMessage incmsg)
    {
        string   playerName = incmsg.ReadString();
        World    w          = serverCore.GetWorld();
        DataBase db         = serverCore.GetDataBase();

        for (int i = 0; i < w.ships.Count; i++)
        {
            if (w.ships[i].shipName.Equals(playerName))
            {
                incmsg.SenderConnection.Disconnect("bye");
                //System.Threading.Thread.Sleep(100);
                ServerCore.LogAdd(playerName + " disconnected.");

                if (ServerCore.GetServerCore().GetServer().ConnectionsCount != 0)
                {
                    NetOutgoingMessage outmsg = serverCore.CreateMessage();
                    outmsg.Write((byte)PacketType.Disconnect);
                    outmsg.Write(playerName);
                    ServerPacketSender.SendMessageToAll(outmsg);
                }
                db.SaveUser(playerName, w.ships[i]);
                w.ships.RemoveAt(i);
                i--;
                break;
            }
        }
    }
Пример #7
0
    private void Message(NetIncomingMessage incmsg)
    {
        NetOutgoingMessage outmsg = serverCore.GetServer().CreateMessage();

        outmsg.Write((byte)PacketType.Message);
        outmsg.Write(incmsg.ReadString());
        outmsg.Write(incmsg.ReadString());
        ServerPacketSender.SendMessageToAll(outmsg);
    }
Пример #8
0
    // Start is called before the first frame update

    public void Init(Vector3 dir)
    {
        id = idIndex;
        idIndex++;
        Projectiles.Add(id, this);

        GetComponent <Rigidbody>().AddForce(dir * 300f);
        ServerPacketSender.SpawnProjectile(this);
        StartCoroutine(Remove());
    }
    public static void TimeSync(Packet _packet)
    {
        int  id = _packet.ReadInt();
        long clientTimeStamp = _packet.ReadLong();
        int  clientLatency   = _packet.ReadInt();

        //save of the client
        Server.clients[id].Latency = clientLatency;
        ServerPacketSender.TimeSync(id, clientTimeStamp, DateTime.UtcNow.Ticks);
    }
Пример #10
0
    private void Hit(Player hitPlayer, bool head)
    {
        Server.clients [this.PlayerID].player.Score += head ? 3 : 1;

        if (Server.clients.ContainsKey(hitPlayer.ID))
        {
            Console.WriteLine($"Player {Server.clients [ this.PlayerID ].player.Username} hit {hitPlayer.Username} in the {(head ? "head" : "body")} with a fireball");
            ServerPacketSender.PlayerScoreUpdated(this.PlayerID, Server.clients [this.PlayerID].player.Score);
        }
    }
Пример #11
0
    private void Register(NetIncomingMessage incmsg)
    {
        string name = incmsg.ReadString();
        string pass = incmsg.ReadString();
        string s    = serverCore.GetDataBase().Register(name, pass);

        NetOutgoingMessage outmsg = serverCore.CreateMessage();

        outmsg.Write((byte)PacketType.LogRegMsg);
        outmsg.Write(s);
        ServerPacketSender.SendMessageTo(outmsg, incmsg.SenderConnection);
    }
Пример #12
0
    private void Connect(string playerName, NetIncomingMessage incmsg)
    {
        World    w  = serverCore.GetWorld();
        DataBase db = serverCore.GetDataBase();

        if (!serverCore.isDedicated())
        {
            db.Login(playerName, "test", false);
        }
        bool playerRefhresh = true;

        for (int i = 0; i < w.ships.Count; i++)
        {
            if (w.ships[i].shipName.Equals(playerName))
            {
                NetOutgoingMessage outmsg = serverCore.CreateMessage();
                outmsg.Write((byte)PacketType.Deny);
                ServerPacketSender.SendMessageTo(outmsg, incmsg.SenderConnection);
                System.Threading.Thread.Sleep(100);
                incmsg.SenderConnection.Disconnect("bye");
                playerRefhresh = false;
                break;
            }
        }
        if (playerRefhresh == true)
        {
            //System.Threading.Thread.Sleep(100);
            int[] components = db.GetUserComponents(playerName);//{ 1, 1, 1, 1, 1, 1, 1 };
            if (components != null && components[0] != 0 && components[1] != 0)
            {
                byte[]     b   = db.GetUserHangar(playerName);
                ShipType   st  = (ShipType)b[0];
                Faction    f   = (Faction)b[1];
                Vector2    pos = f == Faction.Human ? new Vector2(0, 1500) : f == Faction.Enemy ? new Vector2(-1500, -500) : new Vector2(1500, -500);
                ShipPlayer s   = new ShipPlayer(pos, pos, f, st, components, w, 0, 0);
                s.shipName = playerName;
                GunSlot[] gs = db.GetUserGuns(playerName, s);
                s.AddGuns(gs);
                ServerPacketSender.SendAllShips(w, incmsg.SenderConnection);
                //timersToSendNpcs.Add(0);
                //netConnections.Add(incmsg.SenderConnection);
                ServerPacketSender.SendAllNpcs(w, incmsg.SenderConnection);
                w.ships.Add(s);
                ServerPacketSender.SendNewPlayer(s, false);
                ServerCore.LogAdd(playerName + " connected.");
            }
            else
            {
                ServerPacketSender.SendOpenGui(GuiType.SelectFaction, incmsg.SenderConnection);
            }
        }
    }
    public static void PlayerReadyStateUpdated(Packet _packet)
    {
        int  clientID   = _packet.ReadInt();
        bool readyState = _packet.ReadBool();

        if (Server.clients.ContainsKey(clientID))
        {
            Server.clients[clientID].player.IsReady = readyState;

            // Send player ready updated to all other players
            ServerPacketSender.PlayerReadyStateUpdated(clientID, Server.clients[clientID].player.IsReady);
        }
    }
    internal static void Configure(Packet _packet)
    {
        string             messageJSON   = _packet.ReadString();
        GameserverInstance configuration = JsonConvert.DeserializeObject <GameserverInstance>(messageJSON);

        Server.GameserverInstance = configuration;
        Console.WriteLine("Server configuration recieved");
        Console.WriteLine("Configuring server..");
        Console.WriteLine("Server configured");
        Console.WriteLine("\n");

        //Send ready state
        ServerPacketSender.SendReadyState();
    }
Пример #15
0
    public void ReadPacket(PacketType pk, NetIncomingMessage incmsg)
    {
        switch (pk)
        {
        case PacketType.Message:
            Message(incmsg);
            break;

        case PacketType.Respawn:
            Respawn(incmsg);
            break;

        case PacketType.SelectShip:
            SelectShip(incmsg);
            break;

        case PacketType.ConfrimSelect:
            ConfrimSelect(incmsg);
            break;

        case PacketType.Register:
            Register(incmsg);
            break;

        case PacketType.Move:
            UpdateMove(incmsg);
            break;

        case PacketType.Disconnect:
            DisconnetPlayer(incmsg);
            break;

        case PacketType.Login:
            Login(incmsg);
            break;

        case PacketType.Connect:
            if (!serverCore.isDedicated())
            {
                Connect(incmsg.ReadString(), incmsg);
            }
            break;

        case PacketType.Refresh:
            NetOutgoingMessage outmsg = serverCore.CreateMessage();
            outmsg.Write((byte)PacketType.Refresh);
            ServerPacketSender.SendMessageTo(outmsg, incmsg.SenderConnection);
            break;
        }
    }
Пример #16
0
    public void SpawnPlayer(string _userName, int score = -1)
    {
        player = ServerManager.instance.SpawnPlayer();
        if (score < 0)
        {
            player.Initialize(id, _userName);
            Console.WriteLine("New player spawned!");
        }
        else
        {
            player.Initialize(id, _userName, score);
            Console.WriteLine("Existing player spawned!");
        }


        //Send all existing players to the client
        foreach (var client in Server.clients.Values)
        {
            //if player exists
            if (client.player != null)
            {
                //If not this player
                if (client.id != id)
                {
                    ServerPacketSender.SpawnPlayer(id, client.player);
                }
            }
        }

        //Send the new player, to all existing player
        foreach (var client in Server.clients.Values)
        {
            if (client.player != null)
            {
                //If not this player
                if (client.id != id)
                {
                    ServerPacketSender.SpawnPlayer(client.id, player);
                }
            }
        }

        //Send all existing fireballs to the connecting player
        foreach (var fireball in ServerManager.instance.Fireballs.Values)
        {
            ServerPacketSender.SpawnFireball(id, fireball);
        }
    }
Пример #17
0
    private void Login(NetIncomingMessage incmsg)
    {
        string playerName = incmsg.ReadString();
        string password   = incmsg.ReadString();
        string s          = serverCore.GetDataBase().Login(playerName, password, serverCore.isDedicated());

        if (s.Equals("Успешно"))
        {
            Connect(playerName, incmsg);
        }
        else
        {
            NetOutgoingMessage outmsg = serverCore.CreateMessage();
            outmsg.Write((byte)PacketType.LogRegMsg);
            outmsg.Write(s);
            ServerPacketSender.SendMessageTo(outmsg, incmsg.SenderConnection);
        }
    }
Пример #18
0
    public static void RegisterServer()
    {
        TcpClient tcpClient = new TcpClient(_serverManagerIP, _serverManagerPort);

        ServerManagerTCP = new TCP();
        ServerManagerTCP.Connect(tcpClient, PacketHandlers.ServerManagerServer, false);

        Console.WriteLine("Getting game ID..");

        //string gameIdentifier = GetGameID();
        string gameIdentifier = "game -" + UnityEngine.Random.Range(0, 10000).ToString();

        Console.WriteLine("GameID: " + gameIdentifier);
        Console.WriteLine("\n");

        Console.WriteLine("Creating game instance..");
        GameserverInstance = new GameserverInstance()
        {
            GameserverID = "", // Read from kubernetes pod
            Port         = ((IPEndPoint)tcpListener.LocalEndpoint).Port,
            IP           = "212.10.51.254"
        };


        if (gameIdentifier.Contains("game-"))
        {
            GameserverInstance.GameserverID = gameIdentifier;
        }
        else
        {
            GameserverInstance.GameserverID = "Default";
        }

        Console.WriteLine("Instance created");
        Console.WriteLine($"ServerID {GameserverInstance.GameserverID}");
        Console.WriteLine($"Server IP {GameserverInstance.IP}");
        Console.WriteLine($"Server Port {GameserverInstance.Port}");
        Console.WriteLine("\n");

        ServerPacketSender.RegisterServer();

        //tcpClient.GetStream().BeginWrite(packet.ToArray(), 0, packet.Length(), null, null);
    }
Пример #19
0
    public void Connect(TcpClient _client, Dictionary <int, PacketHandler> _packetHandlers, bool isClient = true)
    {
        client = _client;
        client.ReceiveBufferSize = dataBufferSize;

        packetHandlers = _packetHandlers;

        stream = client.GetStream();

        receiveBuffer = new byte[dataBufferSize];

        stream.BeginRead(receiveBuffer, 0, dataBufferSize, ReceiveCallback, null);

        //Initialize the packet class
        incomingPacket = new Packet();
        if (isClient)
        {
            ServerPacketSender.WelcomeMessage(id, "This is a welcome message!");
        }
    }
Пример #20
0
    public void Disconnect()
    {
        if (isConnected)
        {
            ServerManager.instance.PlayerDisconnected(player);

            tcp.Disconnected -= Server.DisconnectClient;
            isConnected       = false;

            ThreadManager.ExecuteOnMainThread(() =>
            {
                UnityEngine.Object.Destroy(player.gameObject);
                player = null;
            });

            ServerPacketSender.PlayerDisonnected(id);

            tcp.Disconnect();
            udp.Disconnect();
            Debug.Log("Disconnected from server.");
        }
    }
Пример #21
0
        private void GunsShoot()
        {
            GetGunsMinMaxDis();
            FixShipMinMaxDis();
            if (gunSlots != null && rotateDifference >= 175 && rotateDifference < 185)
            {
                for (int i = 0; i < gunSlots.Length; i++)
                {
                    if (gunSlots[i] != null)
                    {
                        if (Vector2.Distance(target.Position, Position) <= gunSlots[i].maxDis)
                        {
                            gunSlots[i].Shoot();
                            ServerPacketSender.SendGunShoot(i, id);
                        }
                    }
                }
            }

            /*if (turretSlots != null)
             * {
             *  for (int i = 0; i < turretSlots.Length; i++)
             *  {
             *      if (turretSlots[i] != null)
             *      {
             *          turretSlots[i].Shoot(true);
             *      }
             *  }
             * }
             * if (rocketSlots != null && target.GetType() != typeof(Asteroid))
             * {
             *  for (int i = 0; i < rocketSlots.Length; i++)
             *  {
             *      if (rocketSlots[i] != null)
             *          rocketSlots[i].Shoot();
             *  }
             * }*/
        }
Пример #22
0
    public static void UpdatePlayers(World w, DataBase db)
    {
        for (int i = 0; i < w.ships.Count; i++)
        {
            w.ships[i].timeOut++;
            NetOutgoingMessage outmsg = server.CreateMessage();
            outmsg.Write((byte)PacketType.Move);
            outmsg.Write(w.ships[i].shipName);
            outmsg.Write(w.ships[i].Position.X);
            outmsg.Write(w.ships[i].Position.Y);
            outmsg.Write(w.ships[i].Rotation);
            outmsg.Write(w.ships[i].velocity.X);
            outmsg.Write(w.ships[i].velocity.Y);
            outmsg.Write(w.ships[i].hull);
            outmsg.Write(w.ships[i].shield);
            ServerPacketSender.SendMessageToAll(outmsg);
            if (w.ships[i].timeOut > 180)
            {
                ServerCore.LogAdd(w.ships[i].shipName + " is timed out.");
                //System.Threading.Thread.Sleep(100);

                if (server.ConnectionsCount != 0)
                {
                    outmsg = server.CreateMessage();

                    outmsg.Write((byte)PacketType.Disconnect);
                    outmsg.Write(w.ships[i].shipName);

                    SendMessageToAll(outmsg);
                }
                db.SaveUser(w.ships[i].shipName, w.ships[i]);
                w.ships.RemoveAt(i);
                i--;
                break;
            }
        }
    }
Пример #23
0
 private void FixedUpdate()
 {
     ServerPacketSender.UpdateFireballsCollection();
     ServerPacketSender.PlayerPositions();
 }
Пример #24
0
    private void ConfrimSelect(NetIncomingMessage incmsg)
    {
        string      playerName = incmsg.ReadString();
        World       w          = serverCore.GetWorld();
        DataBase    db         = serverCore.GetDataBase();
        ConfrimType ct         = (ConfrimType)incmsg.ReadByte();
        int         xpos       = serverCore.random.Next(2) == 0 ? 750 : -750;
        int         ypos       = serverCore.random.Next(2) == 0 ? 750 : -750;

        if (ct == ConfrimType.SelectFaction)
        {
            Faction   f          = (Faction)incmsg.ReadByte();
            ShipType  st         = 0;
            Vector2   pos        = Vector2.Zero;
            GunSlot[] gs         = new GunSlot[2];
            int[]     components = { 1, 1, 0, 0, 0, 0, 0 };
            if (f == Faction.Civilian)
            {
                st  = ShipType.CivSmall1;
                pos = new Vector2(1500, -500);
            }
            else if (f == Faction.Enemy)
            {
                st  = ShipType.EnemySmall1;
                pos = new Vector2(-1500, -500);
            }
            else if (f == Faction.Human)
            {
                st  = ShipType.HumanSmall1;
                pos = new Vector2(0, 1500);
            }
            ShipPlayer s = new ShipPlayer(pos, pos, f, st, components, w, 0, 0);
            s.shipName = playerName;
            if (f == Faction.Civilian)
            {
                for (int i = 0; i < 2; i++)
                {
                    gs[i] = new GunSlot(GunType.GausSmall, s);
                }
            }
            else if (f == Faction.Enemy)
            {
                for (int i = 0; i < 2; i++)
                {
                    gs[i] = new GunSlot(GunType.LaserSmall, s);
                }
            }
            else if (f == Faction.Human)
            {
                for (int i = 0; i < 2; i++)
                {
                    gs[i] = new GunSlot(GunType.PlasmSmall, s);
                }
            }
            s.jumpX = xpos;
            s.jumpY = ypos;
            s.AddGuns(gs);
            //timersToSendNpcs.Add(0);
            //netConnections.Add(incmsg.SenderConnection);
            ServerPacketSender.SendAllNpcs(w, incmsg.SenderConnection);
            w.ships.Add(s);
            ServerPacketSender.SendNewPlayer(s, false);
            ServerCore.LogAdd(playerName + " connected.");
            db.SaveUser(playerName, s);
        }
    }
Пример #25
0
        private void Control()
        {
            Vector2 ShipAcceleration = Vector2.Zero;
            Vector2 Forcevelocity    = Vector2.Zero;
            String  direction        = "";

            if (world.isRemote && shipName.Equals(core.GetPlayerName()) && core.currentGui == null && core.currentGuiAdd == null && !core.isChat)
            {
                RotateToVector(core.inputManager.cursorAdvancedPosition, Vector2.Zero);
                if (core.inputManager.IsLeftButtonDown() && !core.guiInGame.controlButton.Rect.Contains(new Point((int)core.inputManager.cursor.Position.X, (int)core.inputManager.cursor.Position.Y)))
                {
                    if (gunSlots != null)
                    {
                        for (int i = 0; i < gunSlots.Length; i++)
                        {
                            if (gunSlots[i] != null)
                            {
                                if (gunSlots[i].Shoot())
                                {
                                    break;
                                }
                            }
                        }
                    }

                    /*if (turretSlots != null)
                     * {
                     *  for (int i = 0; i < turretSlots.Length; i++)
                     *  {
                     *      if (turretSlots[i] != null)
                     *      {
                     *          if (turretSlots[i].Shoot(false))
                     *              break;
                     *      }
                     *  }
                     * }*/
                }

                /*if (core.inputManager.IsRightButtonDown())
                 * {
                 *  /*if (rocketSlots != null)
                 *  {
                 *      for (int i = 0; i < rocketSlots.Length; i++)
                 *      {
                 *          if (rocketSlots[i] != null)
                 *          {
                 *              if (rocketSlots[i].Shoot())
                 *                  break;
                 *          }
                 *      }
                 *  }
                 * }*/
                if (core.inputManager.IsKeyDown(Keys.W))
                {
                    ShipAcceleration = new Vector2(-(float)Math.Cos(Rotation), -(float)Math.Sin(Rotation)) / (mass + armorMass);
                    direction        = "Up";
                    ShipEngine(0, cos, cos1, sin, sin1);
                }
                else if (core.inputManager.IsKeyDown(Keys.S) && shipInfo.manevering)
                {
                    ShipAcceleration = new Vector2((float)Math.Cos(Rotation), (float)Math.Sin(Rotation)) / (mass + armorMass);
                    direction        = "Down";
                    ShipEngine(3, cos, cos1, sin, sin1);
                }
                else
                {
                    direction = "";
                    if (core.inputManager.IsKeyDown(Keys.X))
                    {
                        float horiz  = velocity.X;
                        float vertic = velocity.Y;
                        velocity.X = horiz -= Settings.gravity * 20 * horiz;
                        velocity.Y = vertic -= Settings.gravity * 20 * vertic;
                        if (shipInfo.manevering)
                        {
                            ShipEngine(1, cos, cos1, sin, sin1);
                            ShipEngine(2, cos, cos1, sin, sin1);
                            ShipEngine(3, cos, cos1, sin, sin1);
                            ShipEngine(0, cos, cos1, sin, sin1);
                        }
                    }
                    else
                    {
                        float horiz  = velocity.X;
                        float vertic = velocity.Y;
                        velocity.X = horiz -= Settings.gravity * horiz;
                        velocity.Y = vertic -= Settings.gravity * vertic;
                    }
                }
                if (core.inputManager.IsKeyDown(Keys.A) && shipInfo.manevering)
                {
                    Forcevelocity = new Vector2((float)Math.Cos(Rotation + 1.57F), (float)Math.Sin(Rotation + 1.57F)) / (mass + armorMass);
                    ShipEngine(1, cos, cos1, sin, sin1);
                }
                else if (core.inputManager.IsKeyDown(Keys.D) && shipInfo.manevering)
                {
                    Forcevelocity = new Vector2((float)Math.Cos(Rotation - 1.57F), (float)Math.Sin(Rotation - 1.57F)) / (mass + armorMass);
                    ShipEngine(2, cos, cos1, sin, sin1);
                }
            }
            else
            {
                RotateToVector(cursorPosition, Vector2.Zero);
                if (isLeftPress)
                {
                    if (gunSlots != null)
                    {
                        for (int i = 0; i < gunSlots.Length; i++)
                        {
                            if (gunSlots[i] != null)
                            {
                                if (gunSlots[i].Shoot())
                                {
                                    ServerPacketSender.SendGunShoot(i, shipName);
                                    break;
                                }
                            }
                        }
                    }

                    /*if (turretSlots != null)
                     * {
                     *  for (int i = 0; i < turretSlots.Length; i++)
                     *  {
                     *      if (turretSlots[i] != null)
                     *      {
                     *          if (turretSlots[i].Shoot(false))
                     *              break;
                     *      }
                     *  }
                     * }*/
                }

                /*if (core.inputManager.IsRightButtonDown())
                 * {
                 *  /*if (rocketSlots != null)
                 *  {
                 *      for (int i = 0; i < rocketSlots.Length; i++)
                 *      {
                 *          if (rocketSlots[i] != null)
                 *          {
                 *              if (rocketSlots[i].Shoot())
                 *                  break;
                 *          }
                 *      }
                 *  }
                 * }*/
                if (isWPress)
                {
                    ShipAcceleration = new Vector2(-(float)Math.Cos(Rotation), -(float)Math.Sin(Rotation)) / (mass + armorMass);
                    direction        = "Up";
                    //ServerPacketSender.SendShipEngine(this, 0);
                    ShipEngine(0, cos, cos1, sin, sin1);
                }
                else if (isSPress && shipInfo.manevering)
                {
                    ShipAcceleration = new Vector2((float)Math.Cos(Rotation), (float)Math.Sin(Rotation)) / (mass + armorMass);
                    direction        = "Down";
                    ServerPacketSender.SendShipEngine(this, 3);
                }
                else
                {
                    direction = "";
                    if (isXPress)
                    {
                        float horiz  = velocity.X;
                        float vertic = velocity.Y;
                        velocity.X = horiz -= Settings.gravity * 20 * horiz;
                        velocity.Y = vertic -= Settings.gravity * 20 * vertic;
                        if (shipInfo.manevering)
                        {
                            for (byte i = 0; i < 4; i++)
                            {
                                ServerPacketSender.SendShipEngine(this, i);
                            }
                        }
                    }
                    else
                    {
                        float horiz  = velocity.X;
                        float vertic = velocity.Y;
                        velocity.X = horiz -= Settings.gravity * horiz;
                        velocity.Y = vertic -= Settings.gravity * vertic;
                    }
                }
                if (isAPress && shipInfo.manevering)
                {
                    Forcevelocity = new Vector2((float)Math.Cos(Rotation + 1.57F), (float)Math.Sin(Rotation + 1.57F)) / (mass + armorMass);
                    ServerPacketSender.SendShipEngine(this, 1);
                }
                else if (isDPress && shipInfo.manevering)
                {
                    Forcevelocity = new Vector2((float)Math.Cos(Rotation - 1.57F), (float)Math.Sin(Rotation - 1.57F)) / (mass + armorMass);
                    ServerPacketSender.SendShipEngine(this, 2);
                }
            }
            if (ShipAcceleration != Vector2.Zero)
            {
                Vector2 newvelocity = velocity + ShipAcceleration;

                if (newvelocity.Length() > velocity.Length())
                {
                    double b;
                    if (direction == "Up")
                    {
                        b = 1 - velocity.LengthSquared() / (maxSpeedFace * maxSpeedFace);
                    }
                    else
                    {
                        b = 1 - velocity.LengthSquared() / (maxSpeedBack * maxSpeedBack);
                    }
                    if (b <= 0)
                    {
                        b = 0;
                    }

                    double lorentz_factor = 1 / Math.Sqrt(b);
                    ShipAcceleration.X /= (float)lorentz_factor;
                    ShipAcceleration.Y /= (float)lorentz_factor;
                }
                velocity += ShipAcceleration;

                if (velocity.Length() > 0)
                {
                    newvelocity.Normalize();
                    velocity = newvelocity * velocity.Length();
                }
            }
            if (Forcevelocity != Vector2.Zero)
            {
                Vector2 newvelocity = velocity + Forcevelocity;

                if (newvelocity.Length() > velocity.Length())
                {
                    double b = 1 - velocity.LengthSquared() / (maxSpeedForce * maxSpeedForce);
                    if (b <= 0)
                    {
                        b = 0;
                    }

                    double lorentz_factor = 1 / Math.Sqrt(b);
                    Forcevelocity.X /= (float)lorentz_factor;
                    Forcevelocity.Y /= (float)lorentz_factor;
                }
                velocity += Forcevelocity;

                if (velocity.Length() > 0)
                {
                    newvelocity.Normalize();
                    velocity = newvelocity * velocity.Length();
                }
            }
        }
Пример #26
0
 void Init()
 {
     ServerPacketSender.SpawnFireball(this);
 }
Пример #27
0
 public void Despawn(bool explode)
 {
     ServerPacketSender.DespawnFireball(ID, explode);
     Destroy(this.gameObject);
 }
Пример #28
0
        private void SpawnShips()
        {
            World w = ServerCore.GetServerCore().GetWorld();

            if (faction == Faction.Enemy)
            {
                if (spawnerType == SpawnerType.Easy)
                {
                    for (int i = 0; i < maxShips; i++)
                    {
                        Vector2 rndVector = new Vector2(core.random.Next(-500, 500), core.random.Next(-500, 500)) + Position;
                        int[]   comp      = { 1, 1, 0, 0, 0, 0, 0 };
                        //r e s a a a a;
                        ShipNPC   s  = new ShipNPC(rndVector, rndVector, faction, ShipType.EnemySmall1, comp, w, AiSearchType.Around, AiAgressiveType.Attack);
                        GunSlot[] gs = { new GunSlot(GunType.LaserSmall, s), new GunSlot(GunType.LaserSmall, s) };
                        s.AddGuns(gs);
                        s.cargoSize = s.maxCargoSize;
                        s.crewSize  = s.maxCrewSize;
                        s.shipName  = "<BOT> Saimon";
                        s.id        = w.GetNpcId();
                        ships.Add(s);
                        w.shipsNpc.Add(s);
                        ServerPacketSender.SendCreateNpcShip(s);
                    }
                }
            }
            else if (faction == Faction.Human)
            {
                if (spawnerType == SpawnerType.Easy)
                {
                    for (int i = 0; i < maxShips; i++)
                    {
                        Vector2 rndVector = new Vector2(core.random.Next(-500, 500), core.random.Next(-500, 500)) + Position;
                        int[]   comp      = { 1, 1, 0, 0, 0, 0, 0 };
                        //r e s a a a a;
                        ShipNPC   s  = new ShipNPC(rndVector, rndVector, faction, ShipType.HumanSmall1, comp, w, AiSearchType.Around, AiAgressiveType.Attack);
                        GunSlot[] gs = { new GunSlot(GunType.PlasmSmall, s), new GunSlot(GunType.PlasmSmall, s) };
                        s.AddGuns(gs);
                        s.cargoSize = s.maxCargoSize;
                        s.crewSize  = s.maxCrewSize;
                        s.shipName  = "<BOT> Human";
                        s.id        = w.GetNpcId();
                        ships.Add(s);
                        w.shipsNpc.Add(s);
                        ServerPacketSender.SendCreateNpcShip(s);
                    }
                }
            }
            else if (faction == Faction.Civilian)
            {
                if (spawnerType == SpawnerType.Easy)
                {
                    for (int i = 0; i < maxShips; i++)
                    {
                        Vector2 rndVector = new Vector2(core.random.Next(-500, 500), core.random.Next(-500, 500)) + Position;
                        int[]   comp      = { 1, 1, 0, 0, 0, 0, 0 };
                        //r e s a a a a;
                        ShipNPC   s  = new ShipNPC(rndVector, rndVector, faction, ShipType.CivSmall1, comp, w, AiSearchType.Around, AiAgressiveType.Attack);
                        GunSlot[] gs = { new GunSlot(GunType.GausSmall, s), new GunSlot(GunType.GausSmall, s) };
                        s.AddGuns(gs);
                        s.cargoSize = s.maxCargoSize;
                        s.crewSize  = s.maxCrewSize;
                        s.shipName  = "<BOT> Engi";
                        s.id        = w.GetNpcId();
                        ships.Add(s);
                        w.shipsNpc.Add(s);
                        ServerPacketSender.SendCreateNpcShip(s);
                    }
                }
            }
        }