Building shop functional and Building states are saved online
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -38,7 +38,7 @@ RenderSettings:
|
||||
m_ReflectionIntensity: 1
|
||||
m_CustomReflection: {fileID: 0}
|
||||
m_Sun: {fileID: 0}
|
||||
m_IndirectSpecularColor: {r: 0.37311953, g: 0.38074014, b: 0.35872743, a: 1}
|
||||
m_IndirectSpecularColor: {r: 0.3708987, g: 0.37837026, b: 0.3572256, a: 1}
|
||||
m_UseRadianceAmbientProbe: 0
|
||||
--- !u!157 &3
|
||||
LightmapSettings:
|
||||
@@ -3936,6 +3936,7 @@ MonoBehaviour:
|
||||
reg_password: {fileID: 1819860695}
|
||||
regBtn: {fileID: 120103866}
|
||||
otherUI: {fileID: 22093554}
|
||||
defaultBuilding: {fileID: 11400000, guid: b8064a67361de4c648b86f3642bb0317, type: 2}
|
||||
--- !u!4 &1341947405
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@@ -22,7 +22,7 @@ MonoBehaviour:
|
||||
value: 2
|
||||
- name: Energy
|
||||
value: 50
|
||||
price: 1000
|
||||
price: 10000
|
||||
- level: 2
|
||||
stats:
|
||||
- name: Stat 1
|
||||
|
||||
@@ -18,4 +18,5 @@ MonoBehaviour:
|
||||
stats:
|
||||
- name: Production rate
|
||||
value: 10%
|
||||
price: 8500
|
||||
description: This is a mine
|
||||
|
||||
@@ -20,4 +20,5 @@ MonoBehaviour:
|
||||
value: 5
|
||||
- name: Power
|
||||
value: 10
|
||||
price: 7900
|
||||
description: This is a Moon Minerals Mine
|
||||
|
||||
@@ -20,4 +20,5 @@ MonoBehaviour:
|
||||
value: 10
|
||||
- name: Power
|
||||
value: 2
|
||||
price: 20000
|
||||
description: This is an Oxygen Mine
|
||||
|
||||
@@ -22,7 +22,7 @@ MonoBehaviour:
|
||||
value: 50
|
||||
- name: Something else
|
||||
value: 40 %
|
||||
price: 0
|
||||
price: 12500
|
||||
- level: 2
|
||||
stats:
|
||||
- name: Power
|
||||
@@ -31,5 +31,5 @@ MonoBehaviour:
|
||||
value: 90
|
||||
- name: Something else
|
||||
value: 80 %
|
||||
price: 15000
|
||||
price: 22500
|
||||
description: This is a Research Lab
|
||||
|
||||
@@ -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