mirror of
https://github.com/nothke/quality-control.git
synced 2024-12-21 23:37:29 +00:00
ups
This commit is contained in:
parent
7c50f1b9a9
commit
15a3d8238f
@ -20,7 +20,9 @@ MonoBehaviour:
|
||||
TimeLimit: 120
|
||||
LevelMessage: 'Welcome, employee!
|
||||
|
||||
Please ensure the quality of our HexaTorus
|
||||
product.'
|
||||
Please ensure the quality of our Torus product.
|
||||
|
||||
Dispose
|
||||
of defective units using the disposal belt.'
|
||||
SuccessMessage: Great job!
|
||||
FailureMessage: Try again!
|
||||
FailureMessage: Please try harder in the future!
|
||||
|
@ -21,7 +21,13 @@ MonoBehaviour:
|
||||
Quantity: 15
|
||||
MaxDefectivePercentage: 25
|
||||
TimeLimit: 180
|
||||
LevelMessage: We are pleased to announce that we have secured the capital for the
|
||||
expansion.
|
||||
LevelMessage: 'We have scaled up Torus production.
|
||||
|
||||
The newest Torus assembly
|
||||
line is equipped with an automatic defect scanner, pay attention to its signals.
|
||||
|
||||
|
||||
We''re
|
||||
also happy to announce that an E(tm) production line is now operational.'
|
||||
SuccessMessage: Great job!
|
||||
FailureMessage: Try again!
|
||||
FailureMessage: Please try harder in the future!
|
||||
|
@ -22,6 +22,6 @@ MonoBehaviour:
|
||||
MaxDefectivePercentage: 25
|
||||
TimeLimit: 240
|
||||
LevelMessage: We are pleased to announce that we have secured the capital for the
|
||||
expansion.
|
||||
expansion of E(tm) production.
|
||||
SuccessMessage: Great job!
|
||||
FailureMessage: Try again!
|
||||
FailureMessage: Please try harder in the future!
|
||||
|
BIN
Assets/Meshes/machine2.fbx
(Stored with Git LFS)
BIN
Assets/Meshes/machine2.fbx
(Stored with Git LFS)
Binary file not shown.
@ -292,7 +292,7 @@ namespace Nothke.Interaction
|
||||
}
|
||||
else
|
||||
{
|
||||
Cursor.lockState = CursorLockMode.Locked;
|
||||
//Cursor.lockState = CursorLockMode.Locked;
|
||||
//System.Windows.Forms.Cursor.Position = new System.Drawing.Point(Screen.width / 2, Screen.height / 2);
|
||||
}
|
||||
#endif
|
||||
|
@ -19,7 +19,7 @@ namespace KinematicCharacterController.Examples
|
||||
|
||||
private void Start()
|
||||
{
|
||||
Cursor.lockState = CursorLockMode.Locked;
|
||||
//Cursor.lockState = CursorLockMode.Locked;
|
||||
|
||||
// Tell camera to follow transform
|
||||
CharacterCamera.SetFollowTransform(Character.CameraFollowPoint);
|
||||
@ -31,10 +31,10 @@ namespace KinematicCharacterController.Examples
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (Input.GetMouseButtonDown(0))
|
||||
{
|
||||
Cursor.lockState = CursorLockMode.Locked;
|
||||
}
|
||||
//if (Input.GetMouseButtonDown(0))
|
||||
//{
|
||||
// Cursor.lockState = CursorLockMode.Locked;
|
||||
//}
|
||||
|
||||
HandleCharacterInput();
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
25281
Assets/Scenes/Main.unity
25281
Assets/Scenes/Main.unity
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using KinematicCharacterController.Examples;
|
||||
using TMPro;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
@ -8,6 +8,14 @@ using UnityEngine;
|
||||
public class Scoreboard: MonoBehaviour
|
||||
{
|
||||
public static Scoreboard Instance;
|
||||
|
||||
public ExampleCharacterController Controller;
|
||||
public ExamplePlayer Player;
|
||||
public ExampleCharacterCamera Camera;
|
||||
public Transform StartPosition;
|
||||
public Transform StartLook;
|
||||
|
||||
public StagingManager.StageEnum CurrentStage;
|
||||
public LevelObjective CurrentObjective;
|
||||
|
||||
public LevelObjective Stage1Objective;
|
||||
@ -31,6 +39,8 @@ public class Scoreboard: MonoBehaviour
|
||||
|
||||
public void StartStage(StagingManager.StageEnum stage)
|
||||
{
|
||||
CurrentStage = stage;
|
||||
|
||||
switch (stage)
|
||||
{
|
||||
case StagingManager.StageEnum.Level1:
|
||||
@ -44,13 +54,15 @@ public class Scoreboard: MonoBehaviour
|
||||
break;
|
||||
}
|
||||
|
||||
RestartCurrentStage();
|
||||
|
||||
UpdateText();
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
[MenuItem("Tools/Restart Level")]
|
||||
#endif
|
||||
public static void RestartLevel()
|
||||
public static void RestartCurrentStage()
|
||||
{
|
||||
foreach (var machine in StagingManager.Instance.GetComponentsInChildren<IResetable>(true))
|
||||
{
|
||||
@ -65,6 +77,12 @@ public class Scoreboard: MonoBehaviour
|
||||
|
||||
Instance.SetObjective(Instance.CurrentObjective);
|
||||
Instance.UpdateText();
|
||||
|
||||
Instance.Controller.Motor.SetPosition(Instance.StartPosition.position);
|
||||
Instance.Controller.Motor.SetRotation(Instance.StartPosition.rotation);
|
||||
Instance.Player.enabled = false;
|
||||
Instance.Camera.transform.rotation = Instance.StartLook.rotation;
|
||||
Instance.Player.enabled = true;
|
||||
}
|
||||
|
||||
public void SetObjective(LevelObjective objective)
|
||||
@ -137,9 +155,32 @@ public class Scoreboard: MonoBehaviour
|
||||
{
|
||||
StringBuilder sb = new();
|
||||
|
||||
int totalSeconds = (int) _timeLeft;
|
||||
|
||||
int minutes = (int) _timeLeft / 60;
|
||||
int seconds = (int) _timeLeft % 60;
|
||||
sb.Append($"Time left: {minutes}:{seconds}\n");
|
||||
|
||||
sb.Append("Time left: ");
|
||||
|
||||
if (totalSeconds < 30)
|
||||
{
|
||||
sb.Append("<color=red>");
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append("<color=green>");
|
||||
}
|
||||
|
||||
if (seconds < 10)
|
||||
{
|
||||
sb.Append($"{minutes}:0{seconds}");
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append($"{minutes}:{seconds}");
|
||||
}
|
||||
|
||||
sb.Append("</color>\n");
|
||||
|
||||
sb.Append("\n");
|
||||
|
||||
@ -166,20 +207,22 @@ public class Scoreboard: MonoBehaviour
|
||||
public void CountScores()
|
||||
{
|
||||
bool success = true;
|
||||
|
||||
|
||||
StringBuilder sb = new();
|
||||
|
||||
foreach (var quota in CurrentObjective.Quotas)
|
||||
{
|
||||
if (!ProductCounts.ContainsKey(quota.Type))
|
||||
{
|
||||
success = false;
|
||||
Debug.LogError($"Not enough {quota.Type.name}");
|
||||
sb.Append($"Not a single product of type {quota.Type.name} was produced!\n");
|
||||
break;
|
||||
}
|
||||
|
||||
if (quota.Quantity > TotalCount(quota.Type))
|
||||
{
|
||||
success = false;
|
||||
Debug.LogError($"Not enough {quota.Type.name}");
|
||||
sb.Append($"Not enough {quota.Type.name} were produced.\n");
|
||||
break;
|
||||
}
|
||||
|
||||
@ -188,13 +231,15 @@ public class Scoreboard: MonoBehaviour
|
||||
if (quota.MaxDefectivePercentage < DefectPercentage(quota.Type))
|
||||
{
|
||||
success = false;
|
||||
Debug.LogError($"Too many broken {quota.Type.name}");
|
||||
sb.Append($"Too many of {quota.Type.name} were defective!\n");
|
||||
break;
|
||||
}
|
||||
|
||||
Debug.Log($"{quota.Type.name}: Quality level: {DefectPercentage(quota.Type)}%");
|
||||
sb.Append($"Overall {quota.Type.name} defect percentage: {DefectPercentage(quota.Type)}%\n");
|
||||
}
|
||||
|
||||
Debug.Log(success? CurrentObjective.SuccessMessage : CurrentObjective.FailureMessage);
|
||||
sb.Append(success ? CurrentObjective.SuccessMessage : CurrentObjective.FailureMessage);
|
||||
|
||||
UIManager.Instance.PushStageComplete(success, sb.ToString());
|
||||
}
|
||||
}
|
@ -1,8 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
|
||||
public class UIManager: MonoBehaviour
|
||||
{
|
||||
public static UIManager Instance;
|
||||
|
||||
public void OnEnable()
|
||||
{
|
||||
if (Instance == null)
|
||||
{
|
||||
Instance = this;
|
||||
}
|
||||
}
|
||||
|
||||
public enum UIState
|
||||
{
|
||||
MainMenu = 0,
|
||||
@ -11,6 +23,7 @@ public class UIManager: MonoBehaviour
|
||||
HowToPlay = 3,
|
||||
StageSelect = 4,
|
||||
ConfirmQuit = 5,
|
||||
StageComplete = 6,
|
||||
}
|
||||
|
||||
public List<UIState> StateStack = new List<UIState>() {UIState.MainMenu};
|
||||
@ -19,8 +32,14 @@ public class UIManager: MonoBehaviour
|
||||
public GameObject Reticle;
|
||||
public GameObject HowToPlay;
|
||||
public GameObject StageSelect;
|
||||
public GameObject Pause;
|
||||
public GameObject ConfirmQuit;
|
||||
|
||||
|
||||
public GameObject StageComplete;
|
||||
public GameObject RetryButton;
|
||||
public GameObject NextStageButton;
|
||||
public TextMeshProUGUI StageCompleteText;
|
||||
|
||||
public void Start()
|
||||
{
|
||||
MainMenu.SetActive(false);
|
||||
@ -28,6 +47,8 @@ public class UIManager: MonoBehaviour
|
||||
HowToPlay.SetActive(false);
|
||||
StageSelect.SetActive(false);
|
||||
ConfirmQuit.SetActive(false);
|
||||
Pause.SetActive(false);
|
||||
StageComplete.SetActive(false);
|
||||
|
||||
PushState(UIState.MainMenu);
|
||||
}
|
||||
@ -36,17 +57,106 @@ public class UIManager: MonoBehaviour
|
||||
{
|
||||
if (StateStack.Count > 0)
|
||||
{
|
||||
if (StateStack[0] == state)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
OnExitState(StateStack[0]);
|
||||
}
|
||||
|
||||
PopState();
|
||||
StateStack.Add(state);
|
||||
OnEnterState(state);
|
||||
}
|
||||
|
||||
public void PushMainMenu()
|
||||
{
|
||||
PushState(UIState.MainMenu);
|
||||
}
|
||||
|
||||
public void PushHowToPlay()
|
||||
{
|
||||
PushState(UIState.HowToPlay);
|
||||
}
|
||||
|
||||
public void PushStageSelect()
|
||||
{
|
||||
PushState(UIState.StageSelect);
|
||||
}
|
||||
|
||||
public void PushConfirmQuit()
|
||||
{
|
||||
PushState(UIState.ConfirmQuit);
|
||||
}
|
||||
|
||||
public void Resume()
|
||||
{
|
||||
TryTogglePause();
|
||||
}
|
||||
|
||||
public void TryTogglePause()
|
||||
{
|
||||
switch (StateStack[0])
|
||||
{
|
||||
case UIState.Game:
|
||||
PushState(UIState.Pause);
|
||||
break;
|
||||
case UIState.Pause:
|
||||
PushState(UIState.Game);
|
||||
break;
|
||||
case UIState.MainMenu:
|
||||
PushState(UIState.ConfirmQuit);
|
||||
break;
|
||||
case UIState.ConfirmQuit:
|
||||
PushState(UIState.MainMenu);
|
||||
break;
|
||||
case UIState.StageSelect:
|
||||
PushState(UIState.MainMenu);
|
||||
break;
|
||||
case UIState.HowToPlay:
|
||||
TryBackFromHelp();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private bool gameRunning;
|
||||
|
||||
public void TryToggleHelp()
|
||||
{
|
||||
if (StateStack[0] == UIState.Game)
|
||||
{
|
||||
PushState(UIState.HowToPlay);
|
||||
}
|
||||
else if (StateStack[0] == UIState.HowToPlay)
|
||||
{
|
||||
if (!gameRunning)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
PushState(UIState.Game);
|
||||
}
|
||||
}
|
||||
|
||||
public void TryBackFromHelp()
|
||||
{
|
||||
if (gameRunning)
|
||||
{
|
||||
PushState(UIState.Game);
|
||||
}
|
||||
else
|
||||
{
|
||||
PushState(UIState.MainMenu);
|
||||
}
|
||||
}
|
||||
|
||||
public void PopState()
|
||||
{
|
||||
bool backToMain = false;
|
||||
|
||||
if (StateStack.Count > 0)
|
||||
{
|
||||
{
|
||||
OnExitState(StateStack[0]);
|
||||
StateStack.RemoveAt(0);
|
||||
}
|
||||
@ -60,8 +170,29 @@ public class UIManager: MonoBehaviour
|
||||
MainMenu.SetActive(true);
|
||||
break;
|
||||
case UIState.Game:
|
||||
AudioListener.pause = false;
|
||||
Time.timeScale = 1f;
|
||||
Cursor.lockState = CursorLockMode.Locked;
|
||||
Reticle.SetActive(true);
|
||||
break;
|
||||
case UIState.ConfirmQuit:
|
||||
ConfirmQuit.SetActive(true);
|
||||
break;
|
||||
case UIState.StageSelect:
|
||||
StageSelect.SetActive(true);
|
||||
break;
|
||||
case UIState.HowToPlay:
|
||||
Cursor.lockState = CursorLockMode.None;
|
||||
HowToPlay.SetActive(true);
|
||||
break;
|
||||
case UIState.Pause:
|
||||
Cursor.lockState = CursorLockMode.None;
|
||||
Pause.SetActive(true);
|
||||
break;
|
||||
case UIState.StageComplete:
|
||||
Cursor.lockState = CursorLockMode.None;
|
||||
StageComplete.SetActive(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -74,18 +205,94 @@ public class UIManager: MonoBehaviour
|
||||
break;
|
||||
case UIState.Game:
|
||||
Reticle.SetActive(false);
|
||||
AudioListener.pause = true;
|
||||
Time.timeScale = 0f;
|
||||
break;
|
||||
case UIState.ConfirmQuit:
|
||||
ConfirmQuit.SetActive(false);
|
||||
break;
|
||||
case UIState.StageSelect:
|
||||
StageSelect.SetActive(false);
|
||||
break;
|
||||
case UIState.HowToPlay:
|
||||
HowToPlay.SetActive(false);
|
||||
break;
|
||||
case UIState.Pause:
|
||||
Pause.SetActive(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void StartStage(int stage)
|
||||
{
|
||||
gameRunning = true;
|
||||
|
||||
Time.timeScale = 1f;
|
||||
Scoreboard.Instance.StartStage((StagingManager.StageEnum)stage);
|
||||
PushState(UIState.Game);
|
||||
}
|
||||
|
||||
public void RestartStage()
|
||||
{
|
||||
Time.timeScale = 1f;
|
||||
Scoreboard.RestartCurrentStage();
|
||||
PushState(UIState.Game);
|
||||
}
|
||||
|
||||
public void Quit()
|
||||
{
|
||||
Application.Quit();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (Input.GetKeyDown(KeyCode.Escape))
|
||||
{
|
||||
TryTogglePause();
|
||||
return;
|
||||
}
|
||||
|
||||
if (Input.GetKeyDown(KeyCode.F1))
|
||||
{
|
||||
TryToggleHelp();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void PushStageComplete(bool success, string message)
|
||||
{
|
||||
if (Scoreboard.Instance.CurrentStage != StagingManager.StageEnum.Level3)
|
||||
{
|
||||
NextStageButton.SetActive(false);
|
||||
RetryButton.SetActive(false);
|
||||
}
|
||||
if (success)
|
||||
{
|
||||
NextStageButton.SetActive(true);
|
||||
RetryButton.SetActive(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
NextStageButton.SetActive(false);
|
||||
RetryButton.SetActive(true);
|
||||
}
|
||||
|
||||
StageCompleteText.text = message;
|
||||
PushState(UIState.StageComplete);
|
||||
}
|
||||
|
||||
public void NextStage()
|
||||
{
|
||||
switch (Scoreboard.Instance.CurrentStage)
|
||||
{
|
||||
case StagingManager.StageEnum.Level1:
|
||||
StartStage(1);
|
||||
break;
|
||||
case StagingManager.StageEnum.Level2:
|
||||
StartStage(2);
|
||||
break;
|
||||
case StagingManager.StageEnum.Level3:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user