Ejemplo n.º 1
0
    void UpdateBirds(NativeWebSocket.WebSocket ws, string data)
    {
        var  birdInfo = JsonConvert.DeserializeObject <BirdInfo>(data);
        Bird bird;

        if (Game.i.deadBirds.Contains(birdInfo.birdId))
        {
            return;
        }

        BirdSpot spot = BirdSpot.GetSpotWithID(birdInfo.spotId);

        if (spot == null)
        {
            Debug.LogError("Found no spot with id " + birdInfo.spotId + ". Spots are (" + string.Join(", ", BirdSpot.spots.Select(o => o.id)) + ")");
            return;
        }

        if ((bird = Game.i.Birds.Find(o => o.id == birdInfo.birdId)) == null)
        {
            bird    = UnityEngine.Object.Instantiate(Game.i.birdPrefab).GetComponent <Bird>();
            bird.id = birdInfo.birdId;

            bird.currentSpot = spot;
            bird.RefreshFromSpot();

            Game.i.Birds.Add(bird);
        }

        else if (birdInfo.isFlying)
        {
            bird.FlyTo(BirdSpot.GetSpotWithID(birdInfo.spotId));
            return;
        }

        if (birdInfo.isHeartbeat)
        {
            bird.Heartbeat();
            return;
        }

        if (birdInfo.isFlapping)
        {
            bird.Flap();
            return;
        }

        if (birdInfo.isHop)
        {
            bird.Hop();
            return;
        }

        if (birdInfo.isPickingGrain)
        {
            bird.PickGrain();
            return;
        }
    }
Ejemplo n.º 2
0
    void InitializeState(NativeWebSocket.WebSocket ws, string data)
    {
        var state = JsonConvert.DeserializeObject <GameState>(data);

        BirdSpot.ClearAll();

        Game.i.KillBowls();

        Game.i.DestroyAllPlayers();

        Game.i.deadBirds.Clear();

        foreach (var client in state.clients)
        {
            var splitRot = client.rotation.Split(' ');
            Debug.Log("Spawning client " + client.id + " (observer? " + client.isObserver + ")");

            if (client.isObserver)
            {
                return;
            }

            Game.i.SpawnPlayer(
                client.id,
                new Vector3(client.position.x, client.position.y, client.position.z),
                new Quaternion(Convert.ToSingle(splitRot[0]), Convert.ToSingle(splitRot[1]), Convert.ToSingle(splitRot[2]), Convert.ToSingle(splitRot[3])),
                isLocal: client.isYou
                );
        }

        foreach (var spot in state.birdSpots)
        {
            Debug.Log("Loading bird spot " + spot.id);
            var realSpot = BirdSpot.GetUnusedSpot();
            realSpot.id = spot.id;
            realSpot.transform.position = new Vector3(spot.position.x, spot.position.y, spot.position.z);
            realSpot.isRestingSpot      = spot.isSafe;
        }

        foreach (var score in state.scores)
        {
            Game.i.SetScore(Convert.ToInt32(score.Key), Convert.ToInt32(score.Value));
        }

        Debug.Log("Sending ACK");
        ws.SendText(PROTOCOL_ACKNOWLEDGE_STATE + (Game.i.IsMobile ? "observer" : ""));
    }
Ejemplo n.º 3
0
    IEnumerator Coroutine_FlyTo(BirdSpot spot)
    {
        isFlying    = true;
        currentSpot = spot;

        float   time          = 0f;
        float   delta         = 1 / 60f;
        Vector3 startPosition = this.transform.position;

        while (Vector3.Distance(this.transform.position, spot.transform.position) > 0.04f)
        {
            transform.LookAt(spot.transform.position);
            this.transform.position = Vector3.Lerp(startPosition, spot.transform.position, time);
            time += delta / flightTime;
            yield return(new WaitForSeconds(delta));
        }

        RefreshFromSpot();

        isFlying = false;
    }
Ejemplo n.º 4
0
 public void FlyTo(BirdSpot spot)
 {
     lastUpdate = DateTime.Now;
     StartCoroutine(Coroutine_FlyTo(spot));
 }