コード例 #1
0
    public void RemoveTail(int pid)
    {
        player_snake a = completeSnake_allPlayers[pid];

        if (a.dead != true)
        {
            if (a.snake.Count - 1 == 0)
            {
                a.dead = true;
            }
            a.removetail = true;
            try
            {
                Destroy(a.snake[a.snake.Count - 1].gameObject);
                a.snake.Reverse();
                a.snake.RemoveAt(a.snake.Count - 1);
                a.snake.Reverse();
                a.currentsize--;
                a.score--;
            }
            catch (System.Exception)
            {
            }
        }
        completeSnake_allPlayers[pid] = a;
    }
コード例 #2
0
    void AddPlayerSnakeTooUpdateList(player_snake ps)
    {
        bool added = false;

        while (added == false)
        {
            if (isUpdating == false)
            {
                update_snake_list.Add(ps);
                added = true;
            }
        }
    }
コード例 #3
0
 public void setNextPlayerPos(int id, Vector2 pos)
 {
     try
     {
         player_snake ps = completeSnake_allPlayers[id];
         ps.nextpos = pos;
         update_snake_list.Add(ps);
         startPlayerUpdate();
     }
     catch (System.Exception)
     {
         create_new_player(id, pos.x, pos.y);
     }
 }
コード例 #4
0
    void Start()
    {
        Instance          = this;
        airplainstarttime = 0;
        c = FindObjectOfType <Client>();
        lineRenderer.startWidth   = 0.2f;
        lineRenderer.endWidth     = 0.2f;
        lineRenderer.numPositions = 2;
        try
        {
            online       = c.server;
            player_count = c.playerscount;
            tickrateChanger(c.tickrate);
            End_game_at   = 1;
            localplayernr = 0;
        }
        catch (System.Exception e)
        {
            print(e.Message);
            online        = false;
            player_count  = 1;
            End_game_at   = 1;
            localplayernr = 0;
        }
        int x = 0;

        while (x != player_count)
        {
            player_snake tmp = new player_snake();
            tmp.playernr = -1;
            completeSnake_allPlayers.Add(tmp);
            x++;
        }
        if (online)
        {
            get_local_id();
        }
        print("OnlineMode:" + online + " | " + "Players:" + player_count + " | ID:" + localplayernr);

        InvokeRepeating("TimerInvoke", 0, float.Parse(tickrate.ToString()));
        if (!online)
        {
            FoodFunction();
        }
    }
コード例 #5
0
 public void ChangeDirectionForPlayer(int playernr, int direction)
 {
     if (playernr != localplayernr)
     {
         foreach (player_snake ps in completeSnake_allPlayers)
         {
             if (!ps.dead)
             {
                 if (playernr == ps.playernr)
                 {
                     player_snake nps = ps;
                     nps.NESW_Direction = direction;
                     update_snake_list.Add(nps);
                 }
             }
         }
         startPlayerUpdate();
     }
 }
コード例 #6
0
    public void create_new_player(int id, float x = 0, float y = 0, string name = "_")
    {
        print("AddPlayer " + id);
        bool alreadyexist = false;

        foreach (player_snake p in completeSnake_allPlayers)
        {
            if (p.playernr == id)
            {
                alreadyexist = true;
            }
        }
        if (!alreadyexist)
        {
            List <GameObject> p_snake = new List <GameObject>();
            GameObject        newHead;
            if (x == 0 && y == 0)
            {
                newHead = (GameObject)Instantiate(snakePrefab, new Vector2(Random.Range(-10, 10), Random.Range(-10, 10)), transform.rotation);
            }
            else
            {
                newHead = (GameObject)Instantiate(snakePrefab, new Vector2(x, y), transform.rotation);
            }
            player_snake N_ps = new player_snake();
            N_ps.neednewtail    = false;
            N_ps.newtail        = new List <Add_Tail>();
            N_ps.playernr       = id;
            N_ps.localplayer    = false;
            N_ps.score          = 0;
            N_ps.NESW_Direction = 0;
            N_ps.dead           = false;
            N_ps.name           = name;
            p_snake.Add(newHead);
            N_ps.snake       = p_snake;
            N_ps.currentsize = 1;
            try
            {
                completeSnake_allPlayers[id] = N_ps;
            }
            catch (System.Exception) { }
        }
    }
コード例 #7
0
    public void delPlayer(int id)
    {
        if (id == localplayernr)
        {
            localplayerdeathmanager();
        }
        try
        {
            player_snake ps = completeSnake_allPlayers[id];
            ps.dead = true;
            foreach (GameObject snakepart in ps.snake)
            {
                Destroy(snakepart);
            }
            update_snake_list.Add(ps);

            startPlayerUpdate();
        }
        catch (System.Exception) { }
    }
コード例 #8
0
 void ComChangeDirection()
 {
     foreach (player_snake ps in completeSnake_allPlayers)
     {
         if (!ps.dead)
         {
             if (localplayernr == ps.playernr)
             {
                 player_snake nps       = ps;
                 int          int_cache = nps.NESW_Direction;
                 if (nps.NESW_Direction != 2 && Input.GetKeyDown(KeyCode.W))
                 {
                     nps.NESW_Direction = 0;
                 }
                 if (nps.NESW_Direction != 3 && Input.GetKeyDown(KeyCode.D))
                 {
                     nps.NESW_Direction = 1;
                 }
                 if (nps.NESW_Direction != 0 && Input.GetKeyDown(KeyCode.S))
                 {
                     nps.NESW_Direction = 2;
                 }
                 if (nps.NESW_Direction != 1 && Input.GetKeyDown(KeyCode.A))
                 {
                     nps.NESW_Direction = 3;
                 }
                 if (online)
                 {
                     if (int_cache != nps.NESW_Direction)
                     {
                         c.Send("ChangeDirection|" + nps.playernr + "|" + nps.NESW_Direction.ToString());
                     }
                 }
                 update_snake_list.Add(nps);
             }
         }
     }
     startPlayerUpdate();
 }
コード例 #9
0
    public void ReSyncUser(string s)
    {
        print("Starting Resync");
        player_snake resyn = ConvertUserInfoBackFromString(s);

        try
        {
            foreach (GameObject del in completeSnake_allPlayers[resyn.playernr].snake)
            {
                Destroy(del);
            }
            List <GameObject> newSnake = new List <GameObject>();
            foreach (GameObject resyncObjects in resyn.snake)
            {
                GameObject snake = Instantiate(resyncObjects);
                newSnake.Add(snake);
            }
            resyn.snake = newSnake;
            update_snake_list.Add(resyn);
        }catch (System.Exception)
        {
            c.Send("getPlayer|" + resyn.playernr.ToString());
        }
    }
コード例 #10
0
    void Movement()
    {
        UpdateList.Clear();
        int playernr = 0;

        foreach (player_snake snake_player in completeSnake_allPlayers)
        {
            if (!snake_player.dead)
            {
                bool    firstTail = true;
                Vector2 newpos    = new Vector2(0, 0);
                Vector2 lastpos   = new Vector2(0, 0);
                if (snake_player.snake != null)
                {
                    snake_player.snake.Reverse();
                    bool tailremoved = false;
                    int  x           = 0;
                    foreach (GameObject temp in snake_player.snake)
                    {
                        if (temp != null)
                        {
                            Vector2    temppos = temp.transform.position;
                            GameObject tmp     = temp.gameObject;
                            if (snake_player.snake.Count == x)
                            {
                                if (snake_player.removetail)
                                {
                                    player_snake a = completeSnake_allPlayers[snake_player.playernr];
                                    Destroy(a.snake[x].gameObject);
                                    a.snake.RemoveAt(x);
                                    tailremoved = true;
                                    update_snake_list.Add(a);
                                }
                            }
                            if (!tailremoved)
                            {
                                if (!online)
                                {
                                    switch (snake_player.NESW_Direction)
                                    {
                                    case 0:     //w
                                        nextPos = new Vector2(temppos.x, temppos.y + float.Parse(movmentSpeed.ToString()));
                                        tmp.transform.rotation = new Quaternion(0, 0, 0, 0);
                                        break;

                                    case 1:    //d
                                        nextPos = new Vector2(temppos.x + float.Parse(movmentSpeed.ToString()), temppos.y);
                                        tmp.transform.rotation = new Quaternion(0, 0, 90, 0);
                                        break;

                                    case 2:    //s
                                        nextPos = new Vector2(temppos.x, temppos.y - float.Parse(movmentSpeed.ToString()));
                                        tmp.transform.rotation = new Quaternion(0, 0, 180, 0);
                                        break;

                                    case 3:    //a
                                        nextPos = new Vector2(temppos.x - float.Parse(movmentSpeed.ToString()), temppos.y);
                                        tmp.transform.rotation = new Quaternion(0, 0, 270, 0);
                                        break;
                                    }
                                }
                                else
                                {
                                    nextPos = snake_player.nextpos;
                                }

                                if (lastpos.x == 0 && lastpos.y == 0)
                                {
                                    if (localplayernr == snake_player.playernr)
                                    {
                                        SmoothMovment camera_sm = new SmoothMovment();
                                        camera_sm.GameObject = MainCamera.gameObject;
                                        camera_sm.startTime  = Time.time;
                                        camera_sm.StartPos   = MainCamera.transform.position;
                                        camera_sm.EndPos     = nextPos;
                                        camera_sm._3D        = true;
                                        UpdateList.Add(camera_sm);
                                    }

                                    lastpos = temp.transform.position;
                                    newpos  = temp.transform.position;

                                    temp.tag  = "SnakeHead";
                                    temp.name = snake_player.playernr.ToString();
                                    if (smoothmovment)
                                    {
                                        SmoothMovment sm = new SmoothMovment();
                                        sm.GameObject = temp;
                                        sm.StartPos   = temp.transform.position;
                                        sm.EndPos     = nextPos;
                                        sm.startTime  = Time.time;
                                        sm.endTime    = sm.startTime + float.Parse(movmentSpeed.ToString());
                                        sm._3D        = false;
                                        UpdateList.Add(sm);
                                    }
                                    else
                                    {
                                        temp.transform.position = Vector2.Lerp(temp.transform.position, nextPos, float.Parse(movmentSpeed.ToString()));
                                    }
                                }
                                else
                                {
                                    if (firstTail == true)
                                    {
                                        temp.tag  = "Tail2";
                                        temp.name = snake_player.playernr.ToString();
                                        firstTail = false;
                                    }
                                    else
                                    {
                                        temp.tag  = "Snake";
                                        temp.name = snake_player.playernr.ToString();
                                    }
                                    Vector2 _temp = temp.transform.position;
                                    if (smoothmovment)
                                    {
                                        SmoothMovment sm = new SmoothMovment();
                                        sm.GameObject = temp;
                                        sm.StartPos   = temp.transform.position;
                                        sm.EndPos     = lastpos;
                                        sm.startTime  = Time.time;
                                        sm.endTime    = sm.startTime + float.Parse(movmentSpeed.ToString());
                                        sm._3D        = false;
                                        UpdateList.Add(sm);
                                    }
                                    else
                                    {
                                        temp.transform.position = Vector2.Lerp(temp.transform.position, lastpos, float.Parse(movmentSpeed.ToString()));
                                    }
                                    lastpos = _temp;
                                }
                            }
                        }
                        x++;
                    }
                }
                player_snake nps = new player_snake();
                nps = snake_player;
                if (snake_player.name != null)
                {
                    if (snake_player.newtail.Count != 0)
                    {
                        nps.neednewtail = true;
                        List <Add_Tail> new_temp = new List <Add_Tail>();

                        foreach (Add_Tail newTail in snake_player.newtail)
                        {
                            Add_Tail nt = newTail;
                            if (nt.ctailpos == 0)
                            {
                                nt.pos = newpos;
                            }
                            if (nt.tailpos == nt.ctailpos)
                            {
                                GameObject n = (GameObject)Instantiate(snakePrefab, nt.pos, transform.rotation);
                                nps.snake.Add(n);
                            }
                            else
                            {
                                nt.ctailpos++;
                                new_temp.Add(nt);
                            }
                        }
                        nps.newtail = new_temp;
                    }
                    else
                    {
                        nps.neednewtail = false;
                    }

                    update_snake_list.Add(nps);

                    snake_player.snake.Reverse();

                    playernr++;
                }
            }
        }
        startPlayerUpdate();
        return;
    }
コード例 #11
0
    void hit(string s, string name, string foodid, Vector3 ColliderPositionV3)
    {
        int int_nr = 0;

        try
        {
            int_nr = int.Parse(name);
        }
        catch (System.Exception) {
            print(name);
        }
        player_snake ps = new player_snake();

        try

        {
            ps = completeSnake_allPlayers[int_nr];
        }
        catch (System.Exception)
        {
            ps = new player_snake();
        }
        if (s == "Food")
        {
            Add_Tail tail_temp = new Add_Tail();
            tail_temp.pos      = new Vector2(0, 0);
            tail_temp.tailpos  = ps.currentsize;
            tail_temp.ctailpos = 0;
            ps.newtail.Add(tail_temp);
            if (!online)
            {
                FoodFunction();
            }
            else
            {
                if (int_nr == localplayernr)
                {
                    string tcp_msg = "EatFoodAt|" + name + "|" + ColliderPositionV3.x + "|" + ColliderPositionV3.y + "|" + foodid;
                    c.Send(tcp_msg);
                }
            }
            ps.currentsize++;
            ps.score++;
            scoreText.text = ps.score.ToString();
            int temp = PlayerPrefs.GetInt("HighScore");
            if (ps.score > temp)
            {
                if (!online)
                {
                    PlayerPrefs.SetInt("HighScore", ps.score);
                }
                else
                {
                    if (ps.playernr == localplayernr)
                    {
                        PlayerPrefs.SetInt("HighScore", ps.score);
                    }
                }
            }
        }
        if (s == "Snake")
        {
            if (!online)
            {
                foreach (GameObject snakepart in ps.snake)
                {
                    Destroy(snakepart);
                }
                ps.dead = true;
                if (completeSnake_allPlayers.Count <= End_game_at)
                {
                    CancelInvoke("TimerInvoke");
                    GameOver();
                }
            }
            else
            {
                if (hightickrate)
                {
                    if (!ps.neednewtail)
                    {
                        c.Send("PlayerDead");
                    }
                }
            }
        }
        if (s == "Tail2")
        {
        }
        if (s == "SnakeHead")
        {
        }
        if (s == "Wall")
        {
            if (online)
            {
                c.Send("PlayerDead");
            }
            foreach (GameObject snakepart in ps.snake)
            {
                Destroy(snakepart);
            }
            ps.dead = true;
        }
        completeSnake_allPlayers[int_nr] = ps;
    }
コード例 #12
0
    public player_snake ConvertUserInfoBackFromString(string s)
    {
        player_snake ps = new player_snake();

        string[] PlayerData = s.Split('#');
        if (PlayerData[0] == "UserInfo")
        {
            ps.name           = PlayerData[1];
            ps.neednewtail    = bool.Parse(PlayerData[2]);
            ps.NESW_Direction = int.Parse(PlayerData[3]);
            ps.playernr       = int.Parse(PlayerData[4]);
            ps.score          = int.Parse(PlayerData[5]);
            ps.currentsize    = int.Parse(PlayerData[6]);
            ps.dead           = bool.Parse(PlayerData[7]);
            ps.newtail        = new List <Add_Tail>();
            ps.snake          = new List <GameObject>();
            int        count_    = 0;
            bool       snakeMode = false;
            Add_Tail   Tailcache = new Add_Tail();
            int        cache_x   = 0;
            int        cache_y   = 0;
            GameObject GOcache   = new GameObject();
            foreach (string data in PlayerData[8].Split('-'))
            {
                if (data == "TAILLIST")
                {
                    count_    = 0;
                    snakeMode = false;
                    continue;
                }
                if (data == "SNAKELIST")
                {
                    count_    = 0;
                    snakeMode = true;
                    continue;
                }
                if (snakeMode)
                {
                    if (count_ == 0)
                    {
                        GOcache.tag = data;
                    }

                    if (count_ == 1)
                    {
                        GOcache.name = data;
                    }

                    if (count_ == 2)
                    {
                        cache_x = int.Parse(data);
                    }

                    if (count_ == 3)
                    {
                        cache_y = int.Parse(data);
                        GOcache.transform.position = new Vector2(cache_x, cache_y);
                        ps.snake.Add(GOcache);
                    }
                    else
                    {
                        if (count_ == 0)
                        {
                            Tailcache.ctailpos = int.Parse(data);
                        }

                        if (count_ == 1)
                        {
                            Tailcache.tailpos = int.Parse(data);
                        }

                        if (count_ == 2)
                        {
                            cache_x = int.Parse(data);
                        }

                        if (count_ == 3)
                        {
                            cache_y       = int.Parse(data);
                            Tailcache.pos = new Vector2(cache_x, cache_y);
                            ps.newtail.Add(Tailcache);
                        }
                        count_++;
                    }
                }
            }
        }
        return(ps);
    }