Building shop functional and Building states are saved online
This commit is contained in:
@@ -42,7 +42,21 @@ public class Building : MonoBehaviour
|
||||
|
||||
await (DBmanager.SetCoins(DBmanager.Coins-cost));
|
||||
Mathf.Clamp(curLevel++,0, buildingData.levels.Count-1);
|
||||
|
||||
await DBmanager.UpgradeBuilding(buildingData.buildingName, curLevel);
|
||||
}
|
||||
|
||||
/* */
|
||||
}
|
||||
|
||||
|
||||
[System.Serializable]
|
||||
public class BuildingState{
|
||||
public string id;
|
||||
public int level;
|
||||
|
||||
public BuildingState(string m_id, int m_level){
|
||||
id = m_id;
|
||||
level = m_level;
|
||||
}
|
||||
}
|
||||
38
Assets/Game/Scripts/BuildingManager.cs
Normal file
38
Assets/Game/Scripts/BuildingManager.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
using EasyButtons;
|
||||
using UnityEngine;
|
||||
|
||||
public class BuildingManager : MonoBehaviour
|
||||
{
|
||||
public Building[] buildings;
|
||||
[Button]
|
||||
void GetAllBuildings(){
|
||||
buildings = FindObjectsOfType<Building>();
|
||||
}
|
||||
|
||||
|
||||
void Start()
|
||||
{
|
||||
DBmanager.OnStateChanged.AddListener(UpdateBuildings);
|
||||
UpdateBuildings();
|
||||
}
|
||||
|
||||
|
||||
public void UpdateBuildings(){
|
||||
Debug.Log("Im getting called");
|
||||
foreach (Building building in buildings){
|
||||
bool buildingExists = false;
|
||||
foreach (BuildingState buildingState in DBmanager.buildingStates){
|
||||
if(buildingState.id == building.buildingData.buildingName){
|
||||
buildingExists =true;
|
||||
building.curLevel = buildingState.level;
|
||||
break;
|
||||
}
|
||||
}
|
||||
building.gameObject.SetActive(buildingExists);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnClickBuyBuilding(BuildingData buildingData){
|
||||
DBmanager.AddBuilding(buildingData);
|
||||
}
|
||||
}
|
||||
11
Assets/Game/Scripts/BuildingManager.cs.meta
Normal file
11
Assets/Game/Scripts/BuildingManager.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 29fbe6e1083156e19906046f4415510c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,9 +1,10 @@
|
||||
using System.Collections;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
public class DBmanager : MonoBehaviour
|
||||
{
|
||||
public static string phpRoot = "http://38.242.232.13/upf/";
|
||||
@@ -11,6 +12,8 @@ public class DBmanager : MonoBehaviour
|
||||
public static string username = null;
|
||||
private static int coins = 0;
|
||||
private static int gems = 0;
|
||||
public static List<BuildingState> buildingStates = new List<BuildingState>();
|
||||
public static UnityEvent OnStateChanged = new UnityEvent();
|
||||
|
||||
public static int Coins => coins;
|
||||
public static int Gems => gems;
|
||||
@@ -64,4 +67,74 @@ public class DBmanager : MonoBehaviour
|
||||
|
||||
GameManagerInstance.gameManager.RefreshData();
|
||||
}
|
||||
|
||||
public static void GetBuildingStates(string rawData){
|
||||
try{
|
||||
|
||||
buildingStates = JsonConvert.DeserializeObject<List<BuildingState>>(rawData);
|
||||
Debug.Log("Updating buildings data, isNull: " + (buildingStates==null).ToString());
|
||||
if(buildingStates==null){
|
||||
buildingStates = new List<BuildingState>();
|
||||
}
|
||||
}catch(Exception e){
|
||||
Debug.LogError(e.Message);
|
||||
Debug.LogError("Error updating buildings from server, Response:" + rawData);
|
||||
}
|
||||
|
||||
OnStateChanged.Invoke();
|
||||
}
|
||||
|
||||
public async static Task AddBuilding(BuildingData buildingData){
|
||||
|
||||
foreach (BuildingState buildingState in buildingStates){
|
||||
if(buildingState.id == buildingData.buildingName){
|
||||
Debug.LogError("Building already exists. Cannot add " + buildingState.id);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
buildingStates.Add(new BuildingState(buildingData.buildingName, 0));
|
||||
Debug.Log("Added new building "+ buildingData.buildingName);
|
||||
await UpdateBuildingsToServer();
|
||||
|
||||
OnStateChanged.Invoke();
|
||||
}
|
||||
|
||||
public async static Task UpgradeBuilding(string id, int newLevel){
|
||||
for(int i=0; i < buildingStates.Count; i++){
|
||||
if(buildingStates[i].id == id){
|
||||
buildingStates[i].level = newLevel;
|
||||
Debug.Log("Upgrading " + id + " to " + newLevel);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
await UpdateBuildingsToServer();
|
||||
|
||||
OnStateChanged.Invoke();
|
||||
}
|
||||
|
||||
public async static Task UpdateBuildingsToServer(){
|
||||
string buildingsJson = JsonConvert.SerializeObject(buildingStates);
|
||||
Debug.Log(buildingsJson);
|
||||
|
||||
WWWForm form = new WWWForm();
|
||||
form.AddField("name", username);
|
||||
form.AddField("buildings", buildingsJson);
|
||||
|
||||
using(UnityWebRequest www = UnityWebRequest.Post(phpRoot + "set_buildings.php",form)){
|
||||
var operation = www.SendWebRequest();
|
||||
while(!operation.isDone){
|
||||
await Task.Yield();
|
||||
}
|
||||
|
||||
if(www.downloadHandler.text=="0"){
|
||||
|
||||
}else{
|
||||
Debug.Log("Response : " + www.downloadHandler.text);
|
||||
Debug.LogWarning("Failed to set buildings to " + buildingsJson);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ public class LoginManager : MonoBehaviour
|
||||
public Button regBtn;
|
||||
|
||||
public OtherUIbuttons otherUI;
|
||||
public BuildingData defaultBuilding;
|
||||
|
||||
void Start()
|
||||
{
|
||||
@@ -85,6 +86,7 @@ public class LoginManager : MonoBehaviour
|
||||
PlayerPrefs.SetString("password", login_password.text);
|
||||
PlayerPrefs.Save();}
|
||||
DBmanager.username = login_username.text;
|
||||
DBmanager.GetBuildingStates(www.text.Split('\t')[3]);
|
||||
DBmanager.SetGems(int.Parse(www.text.Split('\t')[2]),true);
|
||||
DBmanager.SetCoins(int.Parse(www.text.Split('\t')[1]),true);
|
||||
|
||||
@@ -110,7 +112,7 @@ public class LoginManager : MonoBehaviour
|
||||
{
|
||||
Debug.Log("User Registered succesfully");
|
||||
DBmanager.username = reg_username.text;
|
||||
|
||||
DBmanager.AddBuilding(defaultBuilding);
|
||||
UnityEngine.SceneManagement.SceneManager.LoadScene(1);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -90,6 +90,7 @@ public class SelectedItemMenu : MonoBehaviour
|
||||
|
||||
async void OnUpgrade()
|
||||
{
|
||||
upgradeBtn.interactable= false;
|
||||
await Selector.selectedBuilding.Upgrade();
|
||||
OnUpgradeMenuClicked();
|
||||
}
|
||||
|
||||
40
Assets/Game/Scripts/ShopBuildingButton.cs
Normal file
40
Assets/Game/Scripts/ShopBuildingButton.cs
Normal file
@@ -0,0 +1,40 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using TMPro;
|
||||
|
||||
public class ShopBuildingButton : MonoBehaviour
|
||||
{
|
||||
public BuildingData buildingData;
|
||||
public Button btn;
|
||||
public TMP_Text txt;
|
||||
void Start()
|
||||
{
|
||||
DBmanager.OnStateChanged.AddListener(refresh);
|
||||
refresh();
|
||||
btn.onClick.AddListener(OnClick);
|
||||
}
|
||||
|
||||
void OnClick(){
|
||||
btn.interactable=false;
|
||||
}
|
||||
|
||||
void OnValidate(){
|
||||
if(btn==null){btn = GetComponent<Button>();}
|
||||
if(txt==null){txt=GetComponentInChildren<TMP_Text>();}
|
||||
}
|
||||
|
||||
public void refresh(){
|
||||
bool exists = false;
|
||||
foreach (BuildingState buildingState in DBmanager.buildingStates){
|
||||
if(buildingState.id == buildingData.buildingName){
|
||||
exists=true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
gameObject.SetActive(!exists);
|
||||
btn.interactable = (DBmanager.Coins > buildingData.levels[0].price);
|
||||
txt.text = buildingData.levels[0].price.ToString();
|
||||
}
|
||||
}
|
||||
11
Assets/Game/Scripts/ShopBuildingButton.cs.meta
Normal file
11
Assets/Game/Scripts/ShopBuildingButton.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b74f8aee4caa7a3f19c861338467b716
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user