Building shop functional and Building states are saved online

This commit is contained in:
Sewmina
2022-04-15 02:24:09 +05:30
parent 20fa8f1218
commit d90919474b
78 changed files with 5247 additions and 2935 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -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

View File

@@ -22,7 +22,7 @@ MonoBehaviour:
value: 2
- name: Energy
value: 50
price: 1000
price: 10000
- level: 2
stats:
- name: Stat 1

View File

@@ -18,4 +18,5 @@ MonoBehaviour:
stats:
- name: Production rate
value: 10%
price: 8500
description: This is a mine

View File

@@ -20,4 +20,5 @@ MonoBehaviour:
value: 5
- name: Power
value: 10
price: 7900
description: This is a Moon Minerals Mine

View File

@@ -20,4 +20,5 @@ MonoBehaviour:
value: 10
- name: Power
value: 2
price: 20000
description: This is an Oxygen Mine

View File

@@ -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

View File

@@ -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;
}
}

View 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);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 29fbe6e1083156e19906046f4415510c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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);
}
}
}
}

View File

@@ -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

View File

@@ -90,6 +90,7 @@ public class SelectedItemMenu : MonoBehaviour
async void OnUpgrade()
{
upgradeBtn.interactable= false;
await Selector.selectedBuilding.Upgrade();
OnUpgradeMenuClicked();
}

View 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();
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b74f8aee4caa7a3f19c861338467b716
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: