コード例 #1
0
    //------------------------------------------------------------->

    /// <summary>
    /// Registrar o agregar un nuevo tick con informacion de input
    /// controlando un tamanno maximo para la cola
    /// </summary>
    /// <param name="inputTick"></param>
    public void AddInputTick(InputTick inputTick)
    {
        //Controlar tamanno maximo de la cola
        if (tickQueue.Count > limitTickQueueSize)
        {
            tickQueue.Dequeue();
        }

        tickQueue.Enqueue(inputTick);
    }
コード例 #2
0
    //------------------------------------------------------------->


    /// <summary>
    /// Registrar o agregar un nuevo tick con informacion de input
    /// para el cliente controlando un tamanno maximo para la cola
    /// </summary>
    /// <param name="inputTick"></param>
    public void AddInputTick(InputTick inputTick)
    {
        if (tickQueue.Count > limitTickQueueSize)
        {
            tickQueue.Dequeue();
        }

        tickQueue.Enqueue(inputTick);
        lastTickQueue = inputTick.tick;
    }
コード例 #3
0
    //------------------------------------------------------------->

    /// <summary>
    /// Actualizacion cada fotograma
    /// </summary>
    private void Update()
    {
        List <Client> clientList = serverMain.GetClientList();

        //Ejecucion cada tick (tickrate)
        timer += Time.deltaTime;
        while (timer >= Time.fixedDeltaTime)
        {
            timer -= Time.fixedDeltaTime;


            for (int i = 0; i < clientList.Count; i++)
            {
                if (clientList[i].GetGameObject() != null)
                {
                    EnumDisplacement displacement;
                    bool             jump;

                    //Obtener nuevo tick con input del cliente
                    if (clientList[i].GetTickQueue().Count > 0)
                    {
                        InputTick inputTick = clientList[i].GetTickQueue().Dequeue();
                        clientList[i].SetLastTickExecuted(inputTick);
                        displacement = inputTick.displacement;
                        jump         = inputTick.jump;

                        //Si no hay un input almacenado en la cola, repetimos ultima entrada (estimacion)
                    }
                    else
                    {
                        jump         = clientList[i].GetLastTickExecuted().jump;
                        displacement = clientList[i].GetLastTickExecuted().displacement;
                    }

                    //Establecer velocidades
                    Rigidbody2D rb = clientList[i].GetGameObject().GetComponent <Rigidbody2D>();
                    switch (displacement)
                    {
                    case EnumDisplacement.Left:
                        rb.velocity = new Vector2(-3f, rb.velocity.y);
                        break;

                    case EnumDisplacement.Right:
                        rb.velocity = new Vector2(3f, rb.velocity.y);
                        break;

                    case EnumDisplacement.None:
                        rb.velocity = new Vector2(0, rb.velocity.y);
                        break;
                    }
                    if (jump)
                    {
                        rb.velocity = new Vector2(rb.velocity.x, 5f);
                    }
                }
            }

            //Ejecutar la fisica para todos los clientes
            Physics2D.Simulate(Time.fixedDeltaTime);

            //Enviar el estado de los jugadores a los clientes
            SendStatus(clientList);
        }
    }
コード例 #4
0
 public void SetLastTickExecuted(InputTick lastTickExecuted)
 {
     this.lastTickExecuted = lastTickExecuted;
 }