/// <summary> /// GET STRING to READ from Firebase Database /// </summary> /// <param name="s_RoomData"></param> /// <returns></returns> private WolfAndSheep_Room_Data Get_GetFromFirebaseDatabase(string s_RoomData) { WolfAndSheep_Room_Data cs_RoomData = new WolfAndSheep_Room_Data(); int i_Read = 0; for (int i = 0; i < s_RoomData.Length; i++) { if (s_RoomData[i] == '$') { i_Read++; } else { switch (i_Read) { case 0: cs_RoomData._Name += s_RoomData[i]; break; case 1: cs_RoomData._Type += s_RoomData[i]; break; case 2: cs_RoomData._Ready += s_RoomData[i]; break; } } } return(cs_RoomData); }
//Ready /// <summary> /// Button READY in Canvas /// </summary> public void Button_Ready_Canvas() { WolfAndSheep_Room_Data cs_MyRoomData = new WolfAndSheep_Room_Data(); if (b_Ready_Me) //If READY >> NOT READY { t_Ready_Button.text = "READY"; cs_MyRoomData = new WolfAndSheep_Room_Data( cl_Firebase.Get_FirebaseAuth_DisplayName(), "Sheep", "NotReady"); } else if (!b_Ready_Me) //If NOT READY >> READY { t_Ready_Button.text = "WAIT"; cs_MyRoomData = new WolfAndSheep_Room_Data( cl_Firebase.Get_FirebaseAuth_DisplayName(), "Sheep", "Ready"); } b_Ready_Me = !b_Ready_Me; cl_Firebase.Set_FirebaseDatabase_Value( "_Room" + s_Room + "/" + cl_Firebase.Get_FirebaseAuth_ID(), Get_SetToFirebaseDatabase(cs_MyRoomData)); //_Room$ROOM-NAME/$ID/ROOM-DATA }
/// <summary> /// Event PLAYER CHANCe STATE /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Event_Player(object sender, ValueChangedEventArgs e) { int i_IndexID = Get_Index_ID(e.Snapshot.Key); if (i_IndexID != -1) { WolfAndSheep_Room_Data cs_RoomData = Get_GetFromFirebaseDatabase(e.Snapshot.Value.ToString()); l_Room_Type[i_IndexID] = cs_RoomData._Type; l_Room_Ready[i_IndexID] = cs_RoomData._Ready; b_Chance = true; if (!b_Wolf) { if (l_Room_ID[i_IndexID] == cl_Firebase.Get_FirebaseAuth_ID()) { if (l_Room_Type[i_IndexID] == "Wolf") { b_Wolf = true; } } } } }
/// <summary> /// Before Start Working /// </summary> private void Set_Wolf() { if (b_Wolf) //If ME is Wolf { int i_Sheep = 0; for (int i = 0; i < l_Room_ID.Count; i++) { if (l_Room_Type[i] == "Sheep") //If PLAYER is Sheep { i_Sheep++; l_Room_Type[i] = "Sheep" + i_Sheep.ToString(); } WolfAndSheep_Room_Data cs_RoomData = new WolfAndSheep_Room_Data( l_Room_Name[i], l_Room_Type[i], l_Room_Ready[i]); cl_Firebase.Set_FirebaseDatabase_Value( "_Room" + s_Room + "/" + l_Room_ID[i], Get_SetToFirebaseDatabase(cs_RoomData)); //_Room$ROOM-NAME/$ID/ROOM-DATA } } }
/// <summary> /// Event JOIN ROOM /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Event_Join(object sender, ChildChangedEventArgs e) { if (e.Snapshot.Key == "_RoomStart") { return; } if (e.Snapshot.Key == "_RoomKick") { return; } if (b_Wolf) //If ME is Wolf { if (l_Room_ID.Count < i_MAX_PLAYER) //If ROOM still EMTY { l_Room_ID.Add(e.Snapshot.Key); WolfAndSheep_Room_Data cs_RoomData = Get_GetFromFirebaseDatabase(e.Snapshot.Value.ToString()); l_Room_Name.Add(cs_RoomData._Name); l_Room_Type.Add(cs_RoomData._Type); l_Room_Ready.Add(cs_RoomData._Ready); b_Chance = true; cl_Firebase.Set_FirebaseEvent_ValueChanged( "_Room" + s_Room + "/" + e.Snapshot.Key, Event_Player); } else //If ROOM is FULL { cl_Firebase.Set_FirebaseDatabase_Value( "_Room" + s_Room + "/_RoomKick", e.Snapshot.Key); //_Room$ROOM-NAME/_RoomKick } } else //If ME is Sheep { l_Room_ID.Add(e.Snapshot.Key); WolfAndSheep_Room_Data cs_RoomData = Get_GetFromFirebaseDatabase(e.Snapshot.Value.ToString()); l_Room_Name.Add(cs_RoomData._Name); l_Room_Type.Add(cs_RoomData._Type); l_Room_Ready.Add(cs_RoomData._Ready); b_Chance = true; cl_Firebase.Set_FirebaseEvent_ValueChanged( "_Room" + s_Room + "/" + e.Snapshot.Key, Event_Player); } }
//Work /// <summary> /// Set ME in Load /// </summary> private void Set_Me() { WolfAndSheep_Room_Data cs_MyRoomData = new WolfAndSheep_Room_Data(); cs_MyRoomData = new WolfAndSheep_Room_Data( cl_Firebase.Get_FirebaseAuth_DisplayName(), s_Type, "Loaded"); cl_Firebase.Set_FirebaseDatabase_Value( "_Game" + s_Room + s_ID + "/" + cl_Firebase.Get_FirebaseAuth_ID(), Get_SetToFirebaseDatabase(cs_MyRoomData)); //_Room$ROOM-NAME/$ID/ROOM-DATA }
//Event /// <summary> /// Event Load /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Event_Load(object sender, ChildChangedEventArgs e) { if (e.Snapshot.Key == "_GameTurn") { return; } l_Game_ID.Add(e.Snapshot.Key); WolfAndSheep_Room_Data cs_RoomData = Get_GetFromFirebaseDatabase(e.Snapshot.Value.ToString()); l_Game_Name.Add(cs_RoomData._Name); l_Game_Type.Add(cs_RoomData._Type); l_Game_Load.Add(cs_RoomData._Ready); //cl_Firebase.Set_FirebaseEvent_ValueChanged( // "_Room" + s_Room + "/" + e.Snapshot.Key, Event_Player); }
/// <summary> /// Exit Working /// </summary> private void Set_Exit() { if (i_Step != 4) { if (b_Wolf) //If ME is Wolf { for (int i = 0; i < l_Room_ID.Count; i++) { if (l_Room_ID[i] != cl_Firebase.Get_FirebaseAuth_ID()) { WolfAndSheep_Room_Data cs_RoomData = new WolfAndSheep_Room_Data(); cs_RoomData = new WolfAndSheep_Room_Data( l_Room_Name[i], "Wolf", "Ready"); cl_Firebase.Set_FirebaseDatabase_Value( "_Room" + s_Room + "/" + l_Room_ID[i], Get_SetToFirebaseDatabase(cs_RoomData)); //_Room$ROOM-NAME/$ID/ROOM-DATA break; } } } if (l_Room_ID.Count > 1) { cl_Firebase.Set_FirebaseDatabase_Delete( "_Room" + s_Room + "/" + cl_Firebase.Get_FirebaseAuth_ID()); } else if (l_Room_ID.Count == 1) { cl_Firebase.Set_FirebaseDatabase_Delete( "_Room" + s_Room); } } }
/// <summary> /// Get STRING to UPDATE on Firebase Database /// </summary> private string Get_SetToFirebaseDatabase(WolfAndSheep_Room_Data cs_RoomData) { return(cs_RoomData._Name + "$" + cs_RoomData._Type + "$" + cs_RoomData._Ready); }
//Work /// <summary> /// Working on Step /// </summary> private void Set_Step() { switch (i_Step) { case 0: //Step01: Start Room { WolfAndSheep_Room_Data cs_MyRoomData = new WolfAndSheep_Room_Data(); if (b_Wolf) //If ME is Wolf { cs_MyRoomData = new WolfAndSheep_Room_Data( cl_Firebase.Get_FirebaseAuth_DisplayName(), "Wolf", "Ready"); cl_Firebase.Set_FirebaseDatabase_Value( "_Room" + s_Room + "/_RoomStart", "RoomWait"); //_Room$ROOM-NAME/_RoomStart cl_Firebase.Set_FirebaseDatabase_Value( "_Room" + s_Room + "/_RoomKick", ""); //_Room$ROOM-NAME/_RoomKick } else //If ME is Sheep { cs_MyRoomData = new WolfAndSheep_Room_Data( cl_Firebase.Get_FirebaseAuth_DisplayName(), "Sheep", "NotReady"); } cl_Firebase.Set_FirebaseDatabase_Value( "_Room" + s_Room + "/" + cl_Firebase.Get_FirebaseAuth_ID(), Get_SetToFirebaseDatabase(cs_MyRoomData)); //_Room$ROOM-NAME/$ID/ROOM-DATA i_Step = 1; } break; case 1: //Step02: Start Event { cl_Firebase.Set_FirebaseEvent_ChildAdded( "_Room" + s_Room, Event_Join); cl_Firebase.Set_FirebaseEvent_ChildRemoved( "_Room" + s_Room, Event_Out); //_Room$ROOM-NAME/$ID cl_Firebase.Set_FirebaseEvent_ValueChanged( "_Room" + s_Room + "/_RoomStart", Event_Start); //_Room$ROOM-NAME/_RoomStart cl_Firebase.Set_FirebaseEvent_ValueChanged( "_Room" + s_Room + "/_RoomKick", Event_Kick); //_Room$ROOM-NAME/_RoomKick i_Step = 2; } break; case 2: //Step03: Working on UI ROOM { Set_RoomUI(); if (b_Start_Me) //If ME is Wolf and ME Start this Game { Set_Wolf(); i_Step = 3; } if (s_ID != "") //If ME is Sheep and get Start Game Message { i_Step = 4; } } break; case 3: //Step04: Game Start (Set Message) { cl_Firebase.Set_FirebaseDatabase_Value( "_Room" + s_Room + "/_RoomStart", cl_Firebase.Get_FirebaseAuth_ID()); //_Room$ROOM-NAME/_START-GAME i_Step = 4; } break; case 4: //Step04: Game Start (Get Message) { Set_Start(); } break; } }