Changing base game style, minigame skinshop + metal collection done

This commit is contained in:
2022-08-26 15:30:22 +05:30
parent 30c5a34e6c
commit 224748b5ef
3485 changed files with 175358 additions and 64699 deletions

View File

@@ -22,6 +22,7 @@ public class DBmanager : MonoBehaviour
private static int oxygen = 0;
private static List<InventoryEntry> inventory;
private static List<int> expPassCollected = new List<int>();
private static List<string> skinsPurchased = new List<string>();
public static List<BuildingState> buildingStates = new List<BuildingState>();
public static UnityEvent OnStateChanged = new UnityEvent();
@@ -34,6 +35,7 @@ public class DBmanager : MonoBehaviour
public static int LevelInt => Mathf.CeilToInt(level);
public static List<int> ExpPassCollected => expPassCollected;
public static List<InventoryEntry> Inventory => inventory;
public static List<string> SkinsPurchased => skinsPurchased;
public static bool LoggedIn { get { return username != null; } }
@@ -244,6 +246,7 @@ public class DBmanager : MonoBehaviour
if (www.downloadHandler.text == "0")
{
metal = newValue;
Debug.Log("Metal updated on "+ username);
}
else
{
@@ -313,6 +316,57 @@ public class DBmanager : MonoBehaviour
}
}
public static void SetPurchasedSkins(string data){
skinsPurchased= new List<string>();
string[] skins = data.Split(',');
foreach(string skin in skins){
skinsPurchased.Add(skin);
}
}
public static void PurchaseSkin(SkinShopItemData data){
if(metal < data.price){
return;
}
SetMetal(metal-data.price);
skinsPurchased.Add(data.name);
UpdatePurchasedSkins();
}
public async static void UpdatePurchasedSkins(){
string output ="";
foreach(string skin in skinsPurchased){
if(skin.Length==0){continue;}
output += skin +",";
}
if(output.Length>0){output = output.Substring(0,output.Length-1);} // <-- Removes the last ','
WWWForm form = new WWWForm();
form.AddField("name", username);
form.AddField("skins", output);
using (UnityWebRequest www = UnityWebRequest.Post(phpRoot + "set_skins_purchased.php", form))
{
var operation = www.SendWebRequest();
while (!operation.isDone)
{
await Task.Yield();
}
if (www.downloadHandler.text == "0")
{
Debug.Log("Success updating PurchasedSkins");
}
else
{
Debug.Log("Response : " + www.downloadHandler.text);
Debug.LogWarning("Failed to set PurchasedSkins to " + output);
}
}
GameManagerInstance.gameManager.RefreshData();
OnStateChanged.Invoke();
}
public async static void AddCollectedExpPass(int newPassLevel)
{
expPassCollected.Add(newPassLevel);

View File

@@ -5,6 +5,7 @@ using TMPro;
using UnityEngine.Events;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using System.Threading.Tasks;
public class GameManager : MonoBehaviour
{
@@ -15,6 +16,8 @@ public class GameManager : MonoBehaviour
public TMP_Text oxygenTxt;
public TMP_Text levelTxt;
public Slider levelSlider;
public GameObject loadingScreen;
void Start()
{
GameManagerInstance.gameManager = this;
@@ -28,6 +31,8 @@ public class GameManager : MonoBehaviour
RefreshData();
}
loadingScreen.SetActive(false);
}
// Update is called once per frame
@@ -50,6 +55,12 @@ public class GameManager : MonoBehaviour
float levelExcess = DBmanager.Level - Mathf.FloorToInt(DBmanager.Level);
levelSlider.value = Mathf.Clamp(levelExcess, 0.1f,1);
}
public async void LoadMinigame(){
loadingScreen.SetActive(true);
await Task.Delay(1000);
SceneManager.LoadScene("MinigameMenu");
}
}
public static class GameManagerInstance{

View File

@@ -86,6 +86,7 @@ public class LoginManager : MonoBehaviour
PlayerPrefs.SetString("password", login_password.text);
PlayerPrefs.Save();}
DBmanager.username = login_username.text;
DBmanager.SetPurchasedSkins(www.text.Split('\t')[9]);
DBmanager.GetInventoryFromServer(www.text.Split('\t')[8]);
DBmanager.SetExpPassCollected(www.text.Split('\t')[7]);
@@ -119,6 +120,9 @@ public class LoginManager : MonoBehaviour
if (www.text == "0")
{
Debug.Log("User Registered succesfully");
PlayerPrefs.SetString("username", reg_username.text);
PlayerPrefs.SetString("password", reg_password.text);
PlayerPrefs.Save();
DBmanager.username = reg_username.text;
DBmanager.AddBuilding(defaultBuilding);
UnityEngine.SceneManagement.SceneManager.LoadScene(1);

View File

@@ -5,7 +5,6 @@ using UnityEngine;
public class CameraFollower : MonoBehaviour
{
public bool autoOffset = true;
public Vector3 offset;
public Transform target;
public float minFOV = 11;
public float FOVmultiplier = 5;
@@ -13,23 +12,19 @@ public class CameraFollower : MonoBehaviour
void Start()
{
if(target==null){return;}
if(autoOffset){SetAutoOffset();}
}
// Update is called once per frame
void FixedUpdate()
{
if(target==null){return;}
transform.position = Vector3.Lerp(transform.position, target.position + offset, smoothness * Time.deltaTime);
if(Mathf.Abs(target.position.x) > 1000 || Mathf.Abs(target.position.y )> 1000){return;}
transform.position = Vector3.Lerp(transform.position, new Vector3(target.position.x, target.position.y,-10), smoothness * Time.deltaTime);
GetComponent<Camera>().orthographicSize = minFOV + ((target.localScale.x - 1) * FOVmultiplier);
}
public void SetTarget(Transform Target){
target = Target;
if(autoOffset){SetAutoOffset();}
}
void SetAutoOffset(){
offset = transform.position - target.position;
}
}

View File

@@ -2,6 +2,9 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mirror;
using UnityEngine.SceneManagement;
using System.Threading.Tasks;
using TMPro;
public class MinigameManager : NetworkBehaviour
{
@@ -21,11 +24,14 @@ public class MinigameManager : NetworkBehaviour
{
SceneData.GameManager = this;
instance = this;
DBmanager.OnStateChanged.AddListener(UpdateMaterialValues);
UpdateMaterialValues();
}
void Update()
{
// if(!DBmanager.LoggedIn){SceneManager.LoadScene(0);} //Signed out, no game for u
if (!isServer) { return; }
HandlePickupSpawn();
@@ -165,4 +171,26 @@ public class MinigameManager : NetworkBehaviour
{
Gizmos.DrawWireSphere(transform.position, mapRadius);
}
public GameObject loadingScreen;
public async void BackToBase(){
loadingScreen.SetActive(true);
await Task.Delay(1000);
NetworkManager.singleton.StopClient();
SceneManager.LoadScene("MinigameMenu");
}
//Materials
[Header("Materials")]
public TMP_Text metalTxt;
public void GainMetals(int amount){
int newAmount = DBmanager.Metal+amount;
DBmanager.SetMetal(newAmount);
}
public void UpdateMaterialValues(){
metalTxt.text = DBmanager.Metal.ToString();
}
}

View File

@@ -0,0 +1,16 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class MinigameMenu : MonoBehaviour
{
public void OnPlay(){
SceneManager.LoadScene("Minigame");
}
public void OnBack(){
SceneManager.LoadScene("GameScene");
}
}

View File

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

View File

@@ -0,0 +1,53 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SkinShopItem : MonoBehaviour
{
public Image spaceshipImg;
public Image backgroundImg;
public Button buyBtn;
public Button equipBtn;
public GameObject equippedIndicator;
public new string name;
public int price;
public TMPro.TMP_Text nameTxt;
void Start(){
buyBtn.onClick.AddListener(onBuy);
equipBtn.onClick.AddListener(onEquip);
}
public void Set(SkinShopItemData data){
name = data.name;
nameTxt.text = data.name;
price = data.price;
// newItem.backgroundImg.color = (skinsData.skins[i].skinType==SkinType.Base) ? basicColor : (skinsData.skins[i].skinType==SkinType.Rare ? rareColor : legendaryColor);
spaceshipImg.sprite = data.image;
buyBtn.GetComponentInChildren<TMPro.TMP_Text>().text = price.ToString();
buyBtn.interactable = DBmanager.Metal >= price;
buyBtn.gameObject.SetActive(!(DBmanager.SkinsPurchased.Contains(name) || price<=0));
equipBtn.gameObject.SetActive(!buyBtn.gameObject.activeSelf);
if(SkinShopManager.GetEquipedSkin() == name){
equipBtn.gameObject.SetActive(false);
equippedIndicator.SetActive(true);
}else{
equippedIndicator.SetActive(false);
}
}
void onEquip(){
SkinShopManager.EquipSkin(name);
SkinShopManager.instance.Populate();
}
void onBuy(){
SkinShopItemData data = new SkinShopItemData(){name=name, price=price};
DBmanager.PurchaseSkin(data);
SkinShopManager.instance.Populate();
}
}

View File

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

View File

@@ -0,0 +1,75 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SkinShopManager : MonoBehaviour
{
public static SkinShopManager instance;
public SkinsData skinsData;
public TMPro.TMP_Text metalsTxt;
public GameObject listItemPrefab;
public Transform listItemsParent;
public Color basicColor = Color.grey;
public Color rareColor = Color.blue;
public Color legendaryColor = Color.red;
void Awake() {
instance = this;
}
void Start()
{
Populate();
}
// Update is called once per frame
void Update()
{
}
public void Populate(){
//PURGE
for(int i=0;i < listItemsParent.childCount;i++){
Destroy(listItemsParent.GetChild(i).gameObject);
}
for(int i=0; i<skinsData.skins.Length;i++){
SkinShopItem newItem = Instantiate(listItemPrefab, listItemsParent).GetComponent<SkinShopItem>();
newItem.Set(skinsData.skins[i]);
newItem.backgroundImg.color = (skinsData.skins[i].skinType==SkinType.Base) ? basicColor : (skinsData.skins[i].skinType==SkinType.Rare ? rareColor : legendaryColor);
}
metalsTxt.text = DBmanager.Metal.ToString();
}
public static void EquipSkin(string skin){
PlayerPrefs.SetString("shipSkin", skin);
PlayerPrefs.Save();
}
public static string GetEquipedSkin(){
if(PlayerPrefs.HasKey("shipSkin")){
return PlayerPrefs.GetString("shipSkin");
}
return "Default";
}
}
[Serializable]
public class SkinShopItemData{
public string name;
public Sprite image;
public int price;
public SkinType skinType;
}
public enum SkinType{
Base,
Rare,
Legendary
}

View File

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

View File

@@ -0,0 +1,10 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine;
[CreateAssetMenu(fileName = "SkinsData", menuName = "upf/SkinsData", order = 0)]
public class SkinsData : ScriptableObject {
[SerializeField]
public SkinShopItemData[] skins;
}

View File

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

View File

@@ -35,7 +35,7 @@ public class SpaceshipController : NetworkBehaviour
public Vector3 Detour = Vector3.zero;
public Quaternion RotationDetour = Quaternion.identity;
public float DetourCorrectionFactor = 0.5f;
public float timeDelayErrorFix = 1f;
public bool showDebugHUD = false;
public float distanceFromCenter= 0;
@@ -217,26 +217,7 @@ public class SpaceshipController : NetworkBehaviour
Vector3 targetPosition;
Quaternion targetRotation;
[ClientRpc]
void RpcUpdatePosition(Vector2 input, Vector3 position, Quaternion rotation, double sentTime)
{
if(isLocalPlayer || isServer){return;}
double delay = (timeInMillis - sentTime);
int numberOfFrames = (int)((float)(delay/1000f) *50f);
Quaternion newRotation = rotation;
Vector3 direction = (rotation * Vector3.forward).normalized;
Vector3 newPosition = position + ((direction * speed) * numberOfFrames);
for (int i = 0; i < numberOfFrames; i++)
{
newRotation = Quaternion.Lerp(newRotation, getTurnAngle(input), turningSmoothFactor * input.magnitude);
}
targetPosition = newPosition - DetourError;
targetRotation = newRotation;
}
void Turn(Vector2 input)
{
@@ -302,6 +283,26 @@ public class SpaceshipController : NetworkBehaviour
}
}
[ClientRpc]
void RpcUpdatePosition(Vector2 input, Vector3 position, Quaternion rotation, double sentTime)
{
if(isLocalPlayer || isServer){return;}
double delay = (timeInMillis - sentTime) * timeDelayErrorFix;
int numberOfFrames = (int)((float)(delay/1000f) *50f);
Quaternion newRotation = rotation;
Vector3 direction = (rotation * Vector3.forward).normalized;
Vector3 newPosition = position + ((direction * speed) * numberOfFrames);
for (int i = 0; i < numberOfFrames; i++)
{
newRotation = Quaternion.Lerp(newRotation, getTurnAngle(input), turningSmoothFactor * input.magnitude);
}
targetPosition = newPosition - DetourError;
targetRotation = newRotation;
}
double lastRubberBandTime = 0;
[ClientRpc]
@@ -312,7 +313,7 @@ public class SpaceshipController : NetworkBehaviour
if (sentTime < lastRubberBandTime) { Debug.Log("Old rubber band rpc, ignoree..."); return; }
//Lag comprehension
double delay = timeInMillis - sentTime;
double delay = (timeInMillis - sentTime) * timeDelayErrorFix;
int numberOfFrames = (int)((float)(delay/1000f) * 50f);
Quaternion newRotation = rotation;
@@ -439,6 +440,15 @@ public class SpaceshipController : NetworkBehaviour
IncreaseTrail(trailIncrementRate/2f);
break;
}
RpcCollectPickup(type);
}
[ClientRpc]
void RpcCollectPickup(PickupItem.PickupType type){
if(isLocalPlayer){
MinigameManager.instance.GainMetals((type==PickupItem.PickupType.Star) ? 10 : 30);
}
}
public void Die(string killer){

View File

@@ -0,0 +1,43 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpaceshipSkin : MonoBehaviour
{
public SpriteRenderer playerImg;
public SkinsData skinsData;
private bool initialized=false;
void Update()
{
if(!DBmanager.LoggedIn) {
return;
}
if(!initialized){
//Validate the ownership of skin here
if(!DBmanager.SkinsPurchased.Contains(SkinShopManager.GetEquipedSkin())){
return; //False skin purchase
}
Sprite newSprite = SkinManagerHelper.getSkinSprite(SkinShopManager.GetEquipedSkin(),skinsData);
if(newSprite==null){return;}
playerImg.sprite = newSprite;
initialized = true;
}
}
}
public static class SkinManagerHelper{
public static Sprite getSkinSprite(string name, SkinsData data){
foreach(SkinShopItemData skin in data.skins){
if(skin.name==name){
return skin.image;
}
}
return null;
}
}

View File

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

View File

@@ -1,63 +1,63 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!850595691 &4890085278179872738
LightingSettings:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: New Lighting Settings
serializedVersion: 3
m_GIWorkflowMode: 1
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_RealtimeEnvironmentLighting: 1
m_BounceScale: 1
m_AlbedoBoost: 1
m_IndirectOutputScale: 1
m_UsingShadowmask: 0
m_BakeBackend: 1
m_LightmapMaxSize: 64
m_BakeResolution: 8
m_Padding: 2
m_TextureCompression: 0
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAO: 0
m_MixedBakeMode: 1
m_LightmapsBakeMode: 0
m_FilterMode: 1
m_LightmapParameters: {fileID: 15201, guid: 0000000000000000f000000000000000, type: 0}
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_RealtimeResolution: 2
m_ForceWhiteAlbedo: 0
m_ForceUpdates: 0
m_FinalGather: 0
m_FinalGatherRayCount: 256
m_FinalGatherFiltering: 1
m_PVRCulling: 0
m_PVRSampling: 1
m_PVRDirectSampleCount: 8
m_PVRSampleCount: 64
m_PVREnvironmentSampleCount: 32
m_PVREnvironmentReferencePointCount: 2048
m_LightProbeSampleCountMultiplier: 4
m_PVRBounces: 2
m_PVRMinBounces: 1
m_PVREnvironmentMIS: 1
m_PVRFilteringMode: 1
m_PVRDenoiserTypeDirect: 1
m_PVRDenoiserTypeIndirect: 1
m_PVRDenoiserTypeAO: 1
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!850595691 &4890085278179872738
LightingSettings:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: New Lighting Settings
serializedVersion: 3
m_GIWorkflowMode: 1
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_RealtimeEnvironmentLighting: 1
m_BounceScale: 1
m_AlbedoBoost: 1
m_IndirectOutputScale: 1
m_UsingShadowmask: 1
m_BakeBackend: 1
m_LightmapMaxSize: 64
m_BakeResolution: 8
m_Padding: 2
m_TextureCompression: 0
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAO: 0
m_MixedBakeMode: 2
m_LightmapsBakeMode: 0
m_FilterMode: 1
m_LightmapParameters: {fileID: 15201, guid: 0000000000000000f000000000000000, type: 0}
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_RealtimeResolution: 2
m_ForceWhiteAlbedo: 0
m_ForceUpdates: 0
m_FinalGather: 0
m_FinalGatherRayCount: 256
m_FinalGatherFiltering: 1
m_PVRCulling: 0
m_PVRSampling: 1
m_PVRDirectSampleCount: 8
m_PVRSampleCount: 64
m_PVREnvironmentSampleCount: 32
m_PVREnvironmentReferencePointCount: 2048
m_LightProbeSampleCountMultiplier: 4
m_PVRBounces: 2
m_PVRMinBounces: 1
m_PVREnvironmentMIS: 1
m_PVRFilteringMode: 1
m_PVRDenoiserTypeDirect: 1
m_PVRDenoiserTypeIndirect: 1
m_PVRDenoiserTypeAO: 1
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1