您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
185 行
5.9 KiB
185 行
5.9 KiB
using System.Collections.Generic;
|
|
using Unity.Entities;
|
|
using UnityEngine;
|
|
|
|
public class ClientFrontend : MonoBehaviour
|
|
{
|
|
public ScoreBoard scoreboardPanel;
|
|
public GameScore gameScorePanel;
|
|
public CountDown countDownPanel;
|
|
public MainMenu mainMenu;
|
|
public ChatPanel chatPanel;
|
|
public ServerPanel serverPanel;
|
|
public bool m_ShowScorePanel;
|
|
|
|
public SoundDef uiHighlightSound;
|
|
public SoundDef uiSelectSound;
|
|
public SoundDef uiSelectLightSound;
|
|
public SoundDef uiCloseSound;
|
|
|
|
Canvas m_ScoreboardPanelCanvas;
|
|
Canvas m_GameScorePanelCanvas;
|
|
Canvas m_CountDownPanelCanvas;
|
|
Canvas m_ChatPanelCanvas;
|
|
|
|
public enum MenuShowing
|
|
{
|
|
None,
|
|
Main,
|
|
Ingame
|
|
}
|
|
|
|
Interpolator m_MenuFader = new Interpolator(0.0f, Interpolator.CurveType.SmoothStep);
|
|
|
|
public MenuShowing menuShowing { get; private set; } = MenuShowing.None;
|
|
|
|
// Audio for menus. Called from events on the ui elements
|
|
public void OnHighlight() { Game.SoundSystem.Play(uiHighlightSound); }
|
|
public void OnSelect() { Game.SoundSystem.Play(uiSelectSound); }
|
|
public void OnClose() { Game.SoundSystem.Play(uiCloseSound); }
|
|
|
|
void Awake()
|
|
{
|
|
m_ScoreboardPanelCanvas = scoreboardPanel.GetComponent<Canvas>();
|
|
m_GameScorePanelCanvas = gameScorePanel.GetComponent<Canvas>();
|
|
m_CountDownPanelCanvas = countDownPanel.GetComponent<Canvas>();
|
|
m_ChatPanelCanvas = chatPanel.GetComponent<Canvas>();
|
|
Clear();
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
scoreboardPanel.SetPanelActive(false);
|
|
gameScorePanel.SetPanelActive(false);
|
|
countDownPanel.SetPanelActive(false);
|
|
mainMenu.SetPanelActive(MenuShowing.None);
|
|
chatPanel.SetPanelActive(true); // active always as it has its own display/hide logic
|
|
serverPanel.SetPanelActive(false);
|
|
}
|
|
|
|
public void ShowMenu(MenuShowing show, float fadeTime = 0.0f)
|
|
{
|
|
if (menuShowing == show)
|
|
return;
|
|
menuShowing = show;
|
|
m_MenuFader.MoveTo(show != MenuShowing.None ? 1.0f : 0.0f, fadeTime);
|
|
if (menuShowing != MenuShowing.None)
|
|
Game.SoundSystem.Play(uiSelectLightSound);
|
|
else
|
|
Game.SoundSystem.Play(uiCloseSound);
|
|
}
|
|
|
|
public void UpdateGame()
|
|
{
|
|
// Show/Hide fully for debug purposes
|
|
var show = IngameHUD.showHud.IntValue > 0;
|
|
if (m_ChatPanelCanvas.enabled != show)
|
|
{
|
|
m_ScoreboardPanelCanvas.enabled = show;
|
|
m_GameScorePanelCanvas.enabled = show;
|
|
m_CountDownPanelCanvas.enabled = show;
|
|
m_ChatPanelCanvas.enabled = show;
|
|
}
|
|
|
|
// Toggle menu if not in editor
|
|
if(!Application.isEditor && Input.GetKeyUp(KeyCode.Escape))
|
|
{
|
|
if (menuShowing == MenuShowing.None)
|
|
{
|
|
// What menu should we show?
|
|
// Show main menu if no level loaded or menu level loaded
|
|
if (Game.game.levelManager.currentLevel == null || Game.game.levelManager.currentLevel.name == "level_menu")
|
|
Console.EnqueueCommandNoHistory("menu 1 0.2");
|
|
else
|
|
Console.EnqueueCommandNoHistory("menu 2 0.2");
|
|
GameDebug.Log("lvl: " + Game.game.levelManager.currentLevel.name);
|
|
}
|
|
else
|
|
{
|
|
Console.EnqueueCommandNoHistory("menu 0 0.2");
|
|
Game.RequestMousePointerLock();
|
|
}
|
|
}
|
|
|
|
// Fade main menu
|
|
var fade = m_MenuFader.GetValue();
|
|
var active = fade > 0.0f;
|
|
if (mainMenu.GetPanelActive() != active)
|
|
mainMenu.SetPanelActive(menuShowing);
|
|
if (active)
|
|
mainMenu.SetAlpha(fade);
|
|
}
|
|
|
|
public void UpdateMenu(string playerName, IList<ServerInfo> serverInfos, string gameMessage)
|
|
{
|
|
if (mainMenu.GetPanelActive())
|
|
mainMenu.UpdateInfo(playerName, serverInfos, gameMessage);
|
|
}
|
|
|
|
public void UpdateChat(ChatSystemClient chatSystem)
|
|
{
|
|
chatPanel.Tick(chatSystem);
|
|
}
|
|
|
|
// Force showing of score board e.g. when dead
|
|
public void SetShowScorePanel(bool showScorePanel)
|
|
{
|
|
m_ShowScorePanel = showScorePanel;
|
|
}
|
|
|
|
public void UpdateIngame(GameMode gameMode, LocalPlayer localPlayer)
|
|
{
|
|
var playerState = localPlayer.playerState;
|
|
|
|
// Countdown
|
|
countDownPanel.SetPanelActive(playerState.displayCountDown);
|
|
if (playerState.displayCountDown)
|
|
countDownPanel.levelInfoCounter.Format("{0}", playerState.countDown);
|
|
|
|
// Scoreboard
|
|
scoreboardPanel.SetPanelActive(!playerState.displayCountDown && (playerState.displayScoreBoard || Game.Input.GetKey(KeyCode.Tab) || m_ShowScorePanel));
|
|
|
|
// Game score panel
|
|
gameScorePanel.SetPanelActive(playerState.displayGameScore);
|
|
}
|
|
}
|
|
|
|
class ClientFrontendUpdate : BaseComponentSystem
|
|
{
|
|
ComponentGroup m_gameModeGroup;
|
|
ComponentGroup m_localPlayerGroup;
|
|
|
|
public ClientFrontendUpdate(GameWorld world) : base(world)
|
|
{
|
|
}
|
|
|
|
protected override void OnCreateManager(int capacity)
|
|
{
|
|
base.OnCreateManager(capacity);
|
|
m_gameModeGroup = GetComponentGroup(typeof(GameMode));
|
|
m_localPlayerGroup = GetComponentGroup(typeof(LocalPlayer));
|
|
}
|
|
|
|
protected override void OnUpdate()
|
|
{
|
|
var gameModeArray = m_gameModeGroup.GetComponentArray<GameMode>();
|
|
if (gameModeArray.Length == 0)
|
|
return;
|
|
|
|
GameDebug.Assert(gameModeArray.Length == 1, "There should only be one gamemode. Found:{0}",
|
|
gameModeArray.Length);
|
|
|
|
var localPlayerArray = m_localPlayerGroup.GetComponentArray<LocalPlayer>();
|
|
GameDebug.Assert(localPlayerArray.Length == 1, "There should only be one localplayer. Found:{0}",
|
|
localPlayerArray.Length);
|
|
|
|
var gameMode = gameModeArray[0];
|
|
var localPlayer = localPlayerArray[0];
|
|
|
|
Game.game.clientFrontend.UpdateIngame(gameMode, localPlayer);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|