//Match concludes /// <summary> /// Match conclude but yet to return to lobby /// </summary> void sv_match_conclude(Body_generic.Character_type race_winner) { syn_match_state = MATCH_STATE.GAME_PREVAIL; StartCoroutine(backToLobby()); //Tell client to display summary Rpc_match_conclude((byte)race_winner); }
//Match ends /// <summary> /// For server & clients; /// </summary> /// <returns></returns> public IEnumerator backToLobby() { yield return(new WaitForSeconds(5)); cl_preroundStarted = false; Cursor.visible = true; onClientReady.Clear(); if (isServer) { syn_match_state = MATCH_STATE.LOBBY; comp_spawnPoint_manager.enabled = false; lobbyManager.ServerReturnToLobby(); } }
/*Map scene*/ //Preround /// <summary> /// When the server scene is loaded and all clients are ready /// </summary> void sv_preround_start() { all_players = FindObjectsOfType <Player_controller>(); all_ais = FindObjectsOfType <AI_generic>(); all_bodies = FindObjectsOfType <Body_generic>(); //Skin initialization for (int i = 0; i < all_bodies.Length; i++) { if (all_bodies[i].isPlayer) { all_bodies[i].Rpc_send_skin_color((sbyte)Array.IndexOf(CONSTANTS.PLAYERCOLORS, all_bodies[i].skin_color)); } Npc_skin_generic[] skins = all_bodies[i].GetComponentsInChildren <Npc_skin_generic>(); if (skins == null || skins.Length == 0) { continue; } //Randomize each skin part, and form a skin map to send to clients byte[] skin_map = new byte[skins.Length]; for (int j = 0; j < skins.Length; j++) { byte skin_index = (byte)UnityEngine.Random.Range(0, skins[j].sprites_pool.Count); skin_map[skins[j].skin_id] = skin_index; } all_bodies[i].Rpc_send_skin_info(skin_map); } serverMapSpawnTime = Time.realtimeSinceStartup; syn_match_state = MATCH_STATE.GAME_INSESSION; map_match_start(); Rpc_match_start(); if (isDedicated()) { Camera.main.enabled = false; } StartCoroutine(sv_match_start()); }
/// <summary> /// Determines if the game is in certain stage. /// Example: Match initialization period: begin = game_initializing, end = game_waiting /// </summary> /// <param name="begin">When this starts</param> /// <param name="end">When this ends (inclusive)</param> /// <returns></returns> public bool atState(MATCH_STATE begin, MATCH_STATE end) { return(syn_match_state >= begin && syn_match_state <= end); }