suck it unity collab

This commit is contained in:
LadyEbony 2020-08-21 22:41:26 -07:00
parent 2630db1920
commit dad44ef0cf
456 changed files with 1861 additions and 128 deletions

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 587c73a8c0f8e3c498bb361e2da0b077
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,13 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ButtonConnectArcade : ButtonOnClick {
public override void OnClick() {
if (GameTransition.Instance.state == GameState.Menu) {
GameBoardInstance.instance.SetupGame();
}
}
}

View file

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

View file

@ -0,0 +1,83 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ExitGames.Client.Photon.LoadBalancing;
public class ButtonConnectOnline : ButtonOnClick {
public static string region;
public override void OnClick() {
if (GameTransition.Instance.state == GameState.Menu) {
GameTransition.Instance.state = GameState.ConnectionInProgress;
GameTransition.Instance.inMultiplayer = true;
StartCoroutine(ConnectToMultiplayerCoroutine());
}
}
public IEnumerator ConnectToMultiplayerCoroutine(){
if (NetworkManager.net.ConnectToNameServer()){
Debug.Log("Connecting to name server");
} else {
Debug.Log("Name Server connection failed");
yield break;
}
while (!NetworkManager.onNameServer || !NetworkManager.isReady) yield return null;
Debug.Log("Connected to name server");
if (NetworkManager.net.OpGetRegions()){
Debug.Log("Started region request");
} else {
Debug.Log("Failed region request");
yield break;
}
while (NetworkManager.net.AvailableRegions == null) yield return null;
Debug.Log("Received region list");
// testing, quick load
if (NetworkManager.instance.quickLoadTestingLobby){
region = "usw";
}
// select best region
else {
region = null;
while(region == null) yield return null;
GameTransition.Instance.state = GameState.ConnectionInProgress;
}
if(NetworkManager.net.ConnectToRegionMaster(region)){
Debug.LogFormat("Connecting to region master '{0}'", region);
} else {
Debug.LogFormat("Failed to connect to region master '{0}'", region);
yield break;
}
while (!NetworkManager.onMasterLobby) yield return null;
Debug.Log("Connected to region master");
Debug.Log("You can quick join now");
// testing, quick load
if (NetworkManager.instance.quickLoadTestingLobby){
var activeScene = "QUICKJOIN";
var ro = new RoomOptions();
ro.IsVisible = false;
ro.IsOpen = true;
ro.MaxPlayers = NetworkManager.instance.expectedMaxPlayers;
NetworkManager.net.OpJoinOrCreateRoomWithProperties(activeScene, ro, null);
// connect to room
while(!NetworkManager.inRoom) yield return null;
// wait for max players to auto start
while(NetworkManager.net.CurrentRoom.PlayerCount != NetworkManager.instance.expectedMaxPlayers) yield return null;
GameBoardInstance.instance.SetupGame();
}
}
}

View file

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

View file

@ -0,0 +1,45 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using ClientState = ExitGames.Client.Photon.LoadBalancing.ClientState;
using RoomInfo = ExitGames.Client.Photon.LoadBalancing.RoomInfo;
using RoomOptions = ExitGames.Client.Photon.LoadBalancing.RoomOptions;
public class ButtonCreateLobby : ButtonOnClick {
public override void OnClick() {
if (GameTransition.Instance.state == GameState.Multiplayer){
GameTransition.Instance.state = GameState.ConnectionInProgress;
Debug.Log("Creating room");
var ro = new RoomOptions();
ro.EmptyRoomTtl = 1000;
ro.CleanupCacheOnLeave = true;
ro.PlayerTtl = 500;
ro.PublishUserId = false;
ro.MaxPlayers = 2; // TODO: Expose this better
string roomCode = string.Empty;
var roomList = NetworkManager.net.RoomInfoList.Keys.ToList();
do {
roomCode = string.Format("{0}{1}{2}{3}", RandomDigit(), RandomDigit(), RandomDigit(), RandomDigit());
} while (roomList.Contains(roomCode));
LobbySetup.Instance.Setup();
var success = NetworkManager.net.OpCreateRoomWithProperties(roomCode, ro, ExitGames.Client.Photon.LoadBalancing.TypedLobby.Default);
if (success) {
Debug.Log("Room created");
} else {
Debug.Log("Failed to connect to room");
}
}
}
private int RandomDigit() {
return Random.Range(0, 10);
}
}

View file

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

View file

@ -0,0 +1,20 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ClientState = ExitGames.Client.Photon.LoadBalancing.ClientState;
public class ButtonDisconnect : ButtonOnClick {
public ClientState state => NetworkManager.net.State;
public bool isDisconnected => state == ClientState.Disconnected || state == ClientState.PeerCreated;
public override void OnClick() {
if (GameTransition.Instance.state == GameState.Multiplayer) {
GameTransition.Instance.state = GameState.ConnectionInProgress;
NetworkManager.net.Service();
NetworkManager.net.Disconnect();
}
}
}

View file

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

View file

@ -0,0 +1,27 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class ButtonJoinLobby : ButtonOnClick {
public TMP_InputField joinField;
public override void OnClick() {
if (GameTransition.Instance.state == GameState.Multiplayer){
GameTransition.Instance.state = GameState.ConnectionInProgress;
LobbySetup.Instance.Setup();
var roomCode = joinField.text;
Debug.LogFormat("Joining room '{0}'", roomCode);
if (NetworkManager.net.OpJoinRoomWithProperties(roomCode)) {
Debug.Log("Room joined");
} else {
Debug.Log("Couldn't join room");
}
}
}
}

View file

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

View file

@ -0,0 +1,14 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ButtonLeaveLobby : ButtonOnClick {
public override void OnClick() {
if (GameTransition.Instance.state == GameState.Lobby) {
GameTransition.Instance.state = GameState.ConnectionInProgress;
NetworkManager.net.OpLeaveRoom();
}
}
}

View file

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

View file

@ -0,0 +1,7 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public abstract class ButtonOnClick : MonoBehaviour {
public abstract void OnClick();
}

View file

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

View file

@ -0,0 +1,12 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ButtonReadyUp : ButtonOnClick {
public override void OnClick() {
if (GameTransition.Instance.state == GameState.Lobby)
PlayerProperties.lobbyStatus.SetLocal(!PlayerProperties.lobbyStatus.GetLocal());
}
}

View file

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

View file

@ -0,0 +1,13 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ButtonSelectRegionMaster : ButtonOnClick {
public string region;
public override void OnClick() {
ButtonConnectOnline.region = region;
}
}

View file

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

View file

@ -0,0 +1,22 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ButtonSwitchLanguages : ButtonOnClick {
private void Awake() {
Localization.SelectedLanguage = (LocalizationLanguage)PlayerPrefs.GetInt("lang", 0);
}
public override void OnClick() {
Localization.SelectedLanguage = Localization.SelectedLanguage == LocalizationLanguage.English ? LocalizationLanguage.Japanese : LocalizationLanguage.English;
PlayerPrefs.SetInt("lang", (int)Localization.SelectedLanguage);
Localization.RebuildKeyDictionary();
var injector = FindObjectsOfType<LocalizationButtonInjector>();
foreach(var i in injector){
i.UpdateText();
}
}
}

View file

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

View file

@ -0,0 +1,66 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class MainMenuButton : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, ISelectHandler, IDeselectHandler, IPointerDownHandler, IPointerUpHandler {
[Header("References")]
public Image targetGraphic;
public RectTransform targetTransform;
public bool pointerSelected;
public bool keyboardSelected;
public bool pressed;
[Header("Style")]
public Color baseColor;
public Color selectedColor;
public float baseWidth;
public float selectedWidth;
public Color tintColor;
public void OnPointerEnter(PointerEventData eventData) {
pointerSelected = true;
}
public void OnPointerExit(PointerEventData eventData) {
pointerSelected = false;
}
public void OnSelect(BaseEventData eventData) {
keyboardSelected = true;
}
public void OnDeselect(BaseEventData eventData) {
keyboardSelected = false;
}
public void OnPointerDown(PointerEventData eventData) {
pressed = true;
}
public void OnPointerUp(PointerEventData eventData) {
pressed = false;
}
void Start(){
var b = GetComponent<Button>();
if (b){
b.onClick.RemoveAllListeners();
var click = GetComponent<ButtonOnClick>();
if (click)
b.onClick.AddListener(click.OnClick);
}
}
// Update is called once per frame
void Update() {
var selected = keyboardSelected || pointerSelected;
targetGraphic.color = (selected ? selectedColor : baseColor) * (pressed ? tintColor : Color.white);
targetTransform.sizeDelta = new Vector2(selected ? selectedWidth : baseWidth, targetTransform.sizeDelta.y);
}
}

View file

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

View file

@ -0,0 +1,21 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class NicknameField : MonoBehaviour {
public TMP_InputField field;
private void Start() {
field.text = PlayerProperties.GetPlayerNickname();
}
private void Update() {
var nn = field.text;
if (PlayerProperties.localPlayer.NickName != nn){
PlayerProperties.SetPlayerNickname(nn);
}
}
}

View file

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

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: adba91609cb1e5448b76682be198fc9b
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,156 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using System.Linq;
public enum GameState { Menu, SinglePlayer, Multiplayer, Lobby, SelectingRegion, ConnectionInProgress, InGame, Continue }
public class GameTransition : MonoBehaviour {
public static GameTransition Instance { get; private set; }
[SerializeField]
private GameState _state;
public GameState state {
get => _state;
set {
if (_state == value) return;
_state = value;
EventSystem.current.SetSelectedGameObject(null);
var select = rDisplays.FirstOrDefault(d => d.states.Contains(value) && d.firstSelectedGameObject != null);
if (select != null)
EventSystem.current.SetSelectedGameObject(select.firstSelectedGameObject);
}
}
public bool inMultiplayer;
public float lerpSpeed = 10f;
[System.Serializable]
private class RectTransformDisplay{
public RectTransform target = null;
public GameState[] states = new GameState[] { GameState.Menu };
[System.NonSerialized]
public Vector2 basePosition = Vector2.zero;
public Vector2 selectedPosition = Vector2.zero;
public GameObject firstSelectedGameObject = null;
}
[System.Serializable]
private class TransformDisplay : TransformDefault{
public GameState[] states = new GameState[] { GameState.Menu };
public int playerLoadedCount = 0;
public TransformDisplay(Transform t, Vector3 p, Vector3 r, Vector3 s) : base(t, p, r, s) { }
}
private class TransformDefault{
public Transform target = null;
public Vector3 position = Vector3.zero;
public Vector3 rotation = Vector3.zero;
public Vector3 scale = Vector3.one;
public TransformDefault(Transform t, Vector3 p, Vector3 r, Vector3 s){
target = t;
position = p;
rotation = r;
scale = s;
}
public void Set(float lerp){
target.localPosition = Vector3.Lerp(target.localPosition, position, lerp);
target.localRotation = Quaternion.Slerp(target.localRotation, Quaternion.Euler(rotation), lerp);
target.localScale = Vector3.Lerp(target.localScale, scale, lerp);
}
}
private TransformDefault[] tDefault;
[SerializeField]
private RectTransformDisplay[] rDisplays = new RectTransformDisplay[0];
[SerializeField]
private TransformDisplay[] tDisplays = new TransformDisplay[0];
public GameState[] selectedOrthoStates;
public float selectedCameraOrthoSize = 3f;
private float baseCameraOrthoSize;
private Camera baseCamera;
private void Awake() {
Instance = this;
}
private void Start() {
baseCamera = Camera.main;
baseCameraOrthoSize = baseCamera.orthographicSize;
foreach(var r in rDisplays){
r.basePosition = r.target.anchoredPosition;
}
tDefault = tDisplays.Select(t => t.target).Distinct().Select(t => new TransformDefault(t, t.localPosition, t.localEulerAngles, t.localScale)).ToArray();
}
private void Update() {
if (inMultiplayer){
switch(NetworkManager.net.State){
case ExitGames.Client.Photon.LoadBalancing.ClientState.Disconnected:
case ExitGames.Client.Photon.LoadBalancing.ClientState.PeerCreated:
state = GameState.Menu;
inMultiplayer = false;
break;
case ExitGames.Client.Photon.LoadBalancing.ClientState.ConnectedToNameServer:
state = GameState.SelectingRegion;
break;
case ExitGames.Client.Photon.LoadBalancing.ClientState.JoinedLobby:
state = GameState.Multiplayer;
break;
case ExitGames.Client.Photon.LoadBalancing.ClientState.Joined:
state = GameState.Lobby;
break;
}
}
// transform
var dist = Time.deltaTime * lerpSpeed;
var playersLoaded = NetworkManager.inRoom ? NetworkManager.net.CurrentRoom.PlayerCount : 2;
foreach(var d in rDisplays){
var selected = d.states.Contains(state);
var item = d.target;
if (item){
item.anchoredPosition = Vector3.Lerp(item.anchoredPosition, selected ? d.selectedPosition : d.basePosition, dist);
}
}
var set = new Dictionary<Transform, TransformDefault>();
foreach(var t in tDefault)
set.Add(t.target, t);
foreach(var d in tDisplays){
var selected = d.states.Contains(state);
if (selected && d.playerLoadedCount <= playersLoaded){
d.Set(dist);
set.Remove(d.target);
}
}
foreach(var d in set){
d.Value.Set(dist);
}
baseCamera.orthographicSize = Mathf.Lerp(baseCamera.orthographicSize, selectedOrthoStates.Contains(state) ? selectedCameraOrthoSize : baseCameraOrthoSize, dist);
}
}

View file

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

View file

@ -0,0 +1,77 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class LobbySetup : MonoBehaviour {
public static LobbySetup Instance { get; private set; }
public Transform readyCheck1, readyCheck2;
public Image readyImage1, readyImage2;
public TextMeshProUGUI readyStatus;
[Header("Messages")]
public string waitingKey;
public int dotMax = 3;
public float dotDuration = 1f;
private void Awake() {
Instance = this;
}
public void Setup(){
PlayerProperties.CreatePlayerHashtable();
}
// Update is called once per frame
void Update() {
var delta = Time.deltaTime * 180f;
if (NetworkManager.inRoom && GameTransition.Instance.state == GameState.Lobby){
// we setting player values by their id order
var players = NetworkManager.net.CurrentRoom.Players.Values.OrderBy(p => p.ID);
var p1 = players.ElementAtOrDefault(0);
var p2 = players.ElementAtOrDefault(1);
// displays
if (p1 != null){
if (p1.IsLocal){
PlayerProperties.playerCharacter.SetLocal(0);
GameBoardInstance.instance.player1.authorityID = p1.ID;
}
var pready = PlayerProperties.lobbyStatus.Get(p1);
readyCheck1.localRotation = Quaternion.RotateTowards(readyCheck1.localRotation, pready ? Quaternion.identity : Quaternion.Euler(0f, 0f, 45f), delta);
readyImage1.color = pready ? Color.green : Color.red;
}
// displays
if (p2 != null){
readyCheck2.gameObject.SetActive(true);
if (p2.IsLocal) {
PlayerProperties.playerCharacter.SetLocal(1);
GameBoardInstance.instance.player2.authorityID = p2.ID;
}
var pready = PlayerProperties.lobbyStatus.Get(p1);
readyCheck2.localRotation = Quaternion.RotateTowards(readyCheck1.localRotation, pready ? Quaternion.identity : Quaternion.Euler(0f, 0f, 45f), delta);
readyImage2.color = pready ? Color.green : Color.red;
} else {
GameBoardInstance.instance.player2.authorityID = -1;
readyCheck2.gameObject.SetActive(false);
}
readyStatus.text = Localization.GetString(waitingKey) + new string('.', Mathf.RoundToInt(Time.time / dotDuration) % dotMax);
if (PlayerProperties.GetAllLobbyStatus()){
GameBoardInstance.instance.SetupGame();
}
}
}
}

View file

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