Beispiel #1
0
    public void GoToNextRoom()
    {
        seed = Random.Range(0, Int32.MaxValue);
        dungeonGeneration.Clear();
        dungeonGeneration.Generate(seed);

        ClientGoToNextRoomMessage goToNextRoomMessage = new ClientGoToNextRoomMessage();

        goToNextRoomMessage.seed = seed;

        sharingMovements = false;

        c.ClientSend(goToNextRoomMessage);
    }
Beispiel #2
0
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.G))
        {
            // Testing
            seed = Random.Range(0, Int32.MaxValue);
            dungeonGeneration.Clear();
            spawner.SetServer(this);
            spawner.seed = seed;
            spawner.ClearMonsters();
            dungeonGeneration.Generate(seed);
        }

        if (Input.GetKeyDown(KeyCode.K))
        {
            //Testing
            for (int i = 0; i < spawner.monsters.Length; i++)
            {
                if (spawner.monsters[i] != null)
                {
                    spawner.monsters[i].GetComponent <Monster>().health = 0;
                }
            }
        }

        if (Input.GetKeyDown(KeyCode.Escape))
        {
            panelsManager.ShowMenuPanel();
        }

        if (Input.GetKeyDown(KeyCode.Space))
        {
            StartShooting();
        }

        if (Input.GetKeyUp(KeyCode.Space))
        {
            StopShooting();
        }

        switch (state)
        {
        case GameState.STOP:

            break;

        case GameState.START:

            break;

        case GameState.GAME:

            speed = joystick.InputVector * Time.deltaTime * 12;
            player.animator.SetBool("Walking", false);

            // Get server player
            if (speed.magnitude > 0 && !player.died)
            {
                //player.transform.position += speed;
                Rigidbody2D playerRb2D = player.GetComponent <Rigidbody2D>();
                playerRb2D.MovePosition(playerRb2D.position + speed);
                player.SetRotation(joystick.InputVector);
                player.animator.SetBool("Walking", true);
            }

            movementElapsed += Time.deltaTime;

            // Shooting
            if (player.shooting)
            {
                player.AnimateShooting(player.shootingElapsed);
                //Debug.Log(player.shootingElapsed);

                if (player.shootingElapsed >= player.frequency)
                {
                    player.shootingElapsed = player.shootingElapsed % player.frequency;
                    shootingElapsed        = shootingElapsed % player.frequency;
                    ServerShoot();
                }
            }

            // Movement
            if (movementElapsed >= GameManager.FREQUENCY)
            {
                movementElapsed = movementElapsed % GameManager.FREQUENCY;
                dungeonGeneration.HighlightRoom(player);

                if (sharingMovements)
                {
                    ShareMovements();
                }
                else
                {
                    sharingMovements = true;
                }
            }



            // Server movement Lerp
            for (int i = 0; i < nbOfPlayers; i++)
            {
                Player  playerIndex        = players[i].GetComponent <Player>();
                Vector2 startClientPos     = startPlayersPositions[i];
                Vector2 endClientPos       = endPlayersPositions[i];
                float   startClientRot     = startPlayersRotations[i];
                float   endClientRot       = endPlayersRotations[i];
                float   timeStartedLerping = timesStartedLerping[i];
                playerIndex.shootingElapsed += Time.deltaTime;

                if (i != 0)
                {
                    float lerpPercentage = (Time.time - timeStartedLerping) / GameManager.FREQUENCY;
                    //Debug.Log(string.Format("lerpPercent[{0}] = (time[{1}] - tS[{2}]) / tTRG[{3}]", lerpPercentage, Time.time, timeStartedLerping, GameManager.FREQUENCY));
                    playerIndex.transform.position = Vector3.Lerp(startClientPos, endClientPos, lerpPercentage);
                    float lerpedRotation = Mathf.LerpAngle(startClientRot, endClientRot, lerpPercentage);
                    playerIndex.SetRotation(lerpedRotation);

                    // If we havent moved then we are not walking
                    if (Vector2.Distance(startClientPos, endClientPos) < 0.1f)
                    {
                        playerIndex.animator.SetBool("Walking", false);
                    }
                    else
                    {
                        playerIndex.animator.SetBool("Walking", true);
                    }


                    if (playerIndex.shooting)
                    {
                        playerIndex.AnimateShooting(playerIndex.shootingElapsed);
                        if (playerIndex.shootingElapsed >= playerIndex.frequency)
                        {
                            playerIndex.shootingElapsed = playerIndex.shootingElapsed % playerIndex.frequency;
                            ClientShoot(i);
                        }
                    }
                    else
                    {
                        playerIndex.StopShooting();
                    }
                }
            }

            break;
        }

        // Server read received messages
        switch (s.received.type)
        {
        case MessageType.NONE:
        {
        }
        break;

        case MessageType.CLIENT_NEW_PLAYER:
        {
            Debug.LogError("Received Start Server from client");
            AddPlayer();
            SharePlayers();
        }
        break;

        case MessageType.MOVEMENT:
        {
            // Received movement from client
            MovementMessage mm = (MovementMessage)s.received;
            //Debug.Log("Movement from " + mm.playerId);
            lastClientMovement = mm.playerId;
            startPlayersPositions[lastClientMovement] = players[lastClientMovement].transform.position;
            startPlayersRotations[lastClientMovement] = players[lastClientMovement].GetComponent <Player>().visorRotation;
            endPlayersRotations[lastClientMovement]   = mm.visorRotation;
            endPlayersPositions[lastClientMovement]   = new Vector3(mm.x, mm.y);
            players[lastClientMovement].GetComponent <Player>().shooting = mm.shooting;

            timesStartedLerping[lastClientMovement] = Time.time;
        }
        break;

        case MessageType.CLIENT_GO_TO_NEXT_ROOM:
        {
            ClientGoToNextRoomMessage goToNextRoomMessage = (ClientGoToNextRoomMessage)s.received;
            GoToNextRoom(goToNextRoomMessage.seed);
        }
        break;

        case MessageType.CLIENT_SHARE_MONSTERS_SPAWN:
        {
            ClientShareMonstersSpawnMessage shareMonstersSpawnMessage = (ClientShareMonstersSpawnMessage)s.received;
            //spawner.SpawnMonsters(shareMonstersSpawnMessage.roomId, shareMonstersSpawnMessage.seed);
            // Teleportation
            if (shareMonstersSpawnMessage.teleport)
            {
                Player  player           = players[shareMonstersSpawnMessage.playerId].GetComponent <Player>();
                Vector2 teleportPosition = dungeonGeneration.GetPositionByPlayerDirection(0, shareMonstersSpawnMessage.roomId, player.GetVisorDirection());
                players[0].transform.position = teleportPosition;
            }

            ShareSpawnMonsters(shareMonstersSpawnMessage.roomId, shareMonstersSpawnMessage.playerId, shareMonstersSpawnMessage.seed, shareMonstersSpawnMessage.teleport);
        }
        break;

        case MessageType.CLIENT_DIE:
        {
            ClientDieMessage clientDieMessage = (ClientDieMessage)s.received;

            players[clientDieMessage.playerId].GetComponent <Player>().SetDied();

            ShareDeath(clientDieMessage.playerId);
        }
        break;
        }
        s.received.OnRead();
    }