//-------------------------------------------------------------> /// <summary> /// Procesar recepcion del estado (posicion) asociado a un rival /// </summary> /// <param name="id"></param> /// <param name="position"></param> public void ProcessStatusRival(int id, Vector2 position) { //Si el rival esta instanciado bool instantiated = false; for (int i = 0; i < rivalsList.Count; i++) { if (rivalsList[i].GetId() == id) { instantiated = true; if (rivalsList[i].GetGameObject() != null) { //Almacenar la posicion recibida rivalsList[i].SetTargetPosition(position); rivalsList[i].SetTime(0); } } } //Si el rival No esta instanciado if (!instantiated) { RivalPlayer rivalPlayer = new RivalPlayer(id); rivalsList.Add(rivalPlayer); //Instanciar UnityMainThreadDispatcher.Instance().Enqueue(() => rivalPlayer.SetGameObject(Instantiate(prefabRivalPlayer, position, Quaternion.identity)) ); } }
//-------------------------------------------------------------> /// <summary> /// Ejecucion en cada fotograma /// </summary> private void Update() { //Recorrer todos los rivales for (int i = 0; i < rivalsList.Count; i++) { RivalPlayer rival = rivalsList[i]; if (rival.GetGameObject() != null) { //Interpolar entre la posicion actual y la almacenada como "destino/objetivo" rival.SetTime(rival.GetTime() + Time.deltaTime / Time.fixedDeltaTime); rival.GetGameObject().transform.position = Vector3.Lerp(rival.GetGameObject().transform.position, rival.GetTargetPosition(), rival.GetTime()); } } }