Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
159 changes: 62 additions & 97 deletions Scripts/GameSystem.cs
Original file line number Diff line number Diff line change
@@ -1,125 +1,90 @@
using ADX2LEDemo.Scripts.Player;
using ADX2LEDemo.Scripts.UI;
using ADX2LEDemo.Scripts.Score;
using ADX2LEDemo.Scripts.Target;
using ADX2LEDemo.Scripts.UtilClass;
using UnityEngine;

namespace ADX2LEDemo {
public class GameSystem : MonoBehaviour {
namespace ADX2LEDemo.Scripts {
public class GameSystem : MonoBehaviour
{
public static GameSystem Instance { get; private set; }

public int score { get; private set; } = 0;

public int destroyTargetNum { get; private set; } = 0;

private int maxTargetNum = 4;

private int nowTargetNum = 0;

private int weekTarget = 0;

private GUIStyle style;

bool gameOver = false;

float guiX = 10;
float guiY = 10;


[SerializeField] UIController uiController;

private ScoreManager scoreManager;
private TargetManager targetManager;

private bool gameOver = false;
public bool GetGameOver => gameOver;

private void Awake() {
if (GameSystem.Instance == null) {
GameSystem.Instance = this;
} else {
Destroy(this);
return;
}
PlayerGenerate();
}

void Start() {
style = new GUIStyle();
style.fontSize = 32;
ManagerInit();

}

private void ManagerInit()
{
scoreManager=new ScoreManager();

uiController = GetComponent<UIController>();
UIController.Delegate loadSampleScene=LoadSampleScene;
uiController.Init(loadSampleScene);

new PlayerGenerator().PlayerGenerate();

targetManager = new TargetManager();
TargetController.Delegate defeatedTarget=DefeatTarget;
targetManager.Init(defeatedTarget);
}

void Update() {
if (nowTargetNum < maxTargetNum && !gameOver) {
if (weekTarget < 3) {
GenerateTarget(1);
weekTarget++;
} else {
GenerateTarget(3);
weekTarget = 0;
}
nowTargetNum++;

if (gameOver)
{
return;
}
if (PlayerStatus.Instance.GetHP() <= 0) {

UpdateManager();
if (PlayerStatus.Instance.GetHP <= 0) {
GameOver();
}
}

public void PlayerGenerate() {
GameObject player = GameObject.CreatePrimitive(PrimitiveType.Capsule);
player.tag = "Player";
player.name = "Player";
player.transform.position = new Vector3(70, 1, 70);
player.GetComponent<CapsuleCollider>().isTrigger = true;
Rigidbody rb = player.AddComponent<Rigidbody>();
rb.useGravity = false;
rb.constraints = RigidbodyConstraints.FreezeAll;
Camera.main.transform.SetParent(player.transform);
Camera.main.transform.localPosition = new Vector3(0f, 1.3f, 0f);
Camera.main.transform.localRotation = Quaternion.Euler(new Vector3(0, 90, 0));
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.transform.SetParent(player.transform);
cube.transform.localPosition = new Vector3(0.7f, 0.8f, -0.54f);
cube.transform.localRotation = Quaternion.Euler(new Vector3(0f, -8.31f, 0f));
cube.transform.localScale = new Vector3(1.6f, 0.4f, 0.4f);
GameObject shotPos = new GameObject("ShotPos");
shotPos.transform.SetParent(cube.transform);
shotPos.transform.localPosition = new Vector3(0.5f, 0f, 0f);
player.AddComponent<PlayerRotation>();
player.AddComponent<PlayerStatus>();
player.AddComponent<Shot>().SetParams(shotPos.transform);
}

public void AddScore(int addScore) => score += addScore;

public void AddDestroyTargetNum() {
nowTargetNum--;
destroyTargetNum++;
private void UpdateManager()
{
targetManager.TryGenerateTarget();

}

public void GenerateTarget(int hp) {
GameObject target = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
target.name = "Target";
target.transform.localScale = new Vector3(2f, 0.1f, 2f);
target.transform.position = RandomSpownPos();
target.GetComponent<CapsuleCollider>().isTrigger = true;
target.AddComponent<TargetCon>().SetParams(hp);
}

public Vector3 RandomSpownPos() {
float[] xPos = { Random.Range(30f, 50f), Random.Range(90f, 110f) };
float[] zPos = { Random.Range(30f, 50f), Random.Range(90f, 110f) };
return new Vector3(xPos[Random.Range(0, 2)], 1f, zPos[Random.Range(0, 2)]);
}

private void GameOver() {
style.fontSize = 72;
style.fontStyle = FontStyle.Bold;
style.alignment = TextAnchor.MiddleCenter;
/// <summary>
/// 倒されたターゲットから呼び出し
/// </summary>
/// <param name="defeatedTargetPoint"></param>
private void DefeatTarget(int defeatedTargetPoint)
{
scoreManager.AddScore(defeatedTargetPoint);
targetManager.AddDestroyTargetNum();
uiController.UpdateScore(scoreManager.score);
}

private void GameOver()
{
GetComponent<UIController>().UpdateUiByGameOver(scoreManager.score);
Cursor.lockState = CursorLockMode.None;
gameOver = true;
}

public bool GetGameOver() => gameOver;

private void OnGUI() {
Rect rect = new Rect(0, 540, 1920, 400);
if (!gameOver) {
GUI.Label(rect, string.Format("Score:{0}\nHP:{1}", score, PlayerStatus.Instance.GetHP()), style);
} else {
GUI.Label(rect, "GameOver\n" + score.ToString(), style);
if (GUI.Button(new Rect(guiX, guiY, 400, 300), "Reset"))
UnityEngine.SceneManagement.SceneManager.LoadScene("SampleScene");

}

private void LoadSampleScene()
{
UnityEngine.SceneManagement.SceneManager.LoadScene(SceneStrings.SampleScene);
}
}
}
12 changes: 12 additions & 0 deletions Scripts/Player/PlayerGenerator.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using UnityEngine;

namespace ADX2LEDemo.Scripts.Player
{
public class PlayerGenerator
{
public void PlayerGenerate() {
var player = GameObject.CreatePrimitive(PrimitiveType.Capsule);
new PlayerInitializer(player).InitPlayerObj();
}
}
}
68 changes: 68 additions & 0 deletions Scripts/Player/PlayerInitializer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
using UnityEngine;

namespace ADX2LEDemo.Scripts.Player
{
public class PlayerInitializer
{
private readonly GameObject player;
private GameObject cube;
private GameObject shotPos;

public PlayerInitializer(GameObject player)
{
this.player = player;
}

public void InitPlayerObj()
{
player.tag = "Player";
player.name = "Player";

cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
InitCube();

shotPos = new GameObject("ShotPos");
InitShotPosObj();

InitCameraObj();

InitPlayerComponent();
}

private void InitPlayerComponent()
{
player.transform.position = new Vector3(70, 1, 70);

player.GetComponent<CapsuleCollider>().isTrigger = true;
Rigidbody rb = player.AddComponent<Rigidbody>();
rb.useGravity = false;
rb.constraints = RigidbodyConstraints.FreezeAll;

player.AddComponent<PlayerRotation>();
player.AddComponent<PlayerStatus>();
player.AddComponent<Shot>().SetParams(shotPos.transform);
}

//@NOTE :Cubeには具体的な名前がほしい
private void InitCube()
{
cube.transform.SetParent(player.transform);
cube.transform.localPosition = new Vector3(0.7f, 0.8f, -0.54f);
cube.transform.localRotation = Quaternion.Euler(new Vector3(0f, -8.31f, 0f));
cube.transform.localScale = new Vector3(1.6f, 0.4f, 0.4f);
}

private void InitShotPosObj()
{
shotPos.transform.SetParent(cube.transform);
shotPos.transform.localPosition = new Vector3(0.5f, 0f, 0f);
}

private void InitCameraObj()
{
Camera.main.transform.SetParent(player.transform);
Camera.main.transform.localPosition = new Vector3(0f, 1.3f, 0f);
Camera.main.transform.localRotation = Quaternion.Euler(new Vector3(0, 90, 0));
}
}
}
72 changes: 36 additions & 36 deletions Scripts/PlayerRotation.cs → Scripts/Player/PlayerRotation.cs
Original file line number Diff line number Diff line change
@@ -1,37 +1,37 @@
using UnityEngine;
namespace ADX2LEDemo {
public class PlayerRotation : MonoBehaviour {
[SerializeField] float speed = 1.0f;
bool cursorLock = true;
void Update() {
if (GameSystem.Instance.GetGameOver())
return;
float y = Input.GetAxis("Mouse X") * speed + transform.rotation.eulerAngles.y;
float z = Input.GetAxis("Mouse Y") * speed + transform.rotation.eulerAngles.z;
transform.rotation = Quaternion.Euler(0, y, z);
UpdateCursorLock();
}
public void UpdateCursorLock() {
if (Input.GetKeyDown(KeyCode.Escape)) {
cursorLock = false;
} else if (Input.GetMouseButton(0)) {
cursorLock = true;
}
if (cursorLock) {
Cursor.lockState = CursorLockMode.Locked;
} else if (!cursorLock) {
Cursor.lockState = CursorLockMode.None;
}
}
}
using UnityEngine;

namespace ADX2LEDemo.Scripts.Player {
public class PlayerRotation : MonoBehaviour {

[SerializeField] float speed = 1.0f;

bool cursorLock = true;

void Update() {
if (GameSystem.Instance.GetGameOver)
return;

float y = Input.GetAxis("Mouse X") * speed + transform.rotation.eulerAngles.y;
float z = Input.GetAxis("Mouse Y") * speed + transform.rotation.eulerAngles.z;

transform.rotation = Quaternion.Euler(0, y, z);

UpdateCursorLock();
}

private void UpdateCursorLock() {
if (Input.GetKeyDown(KeyCode.Escape)) {
cursorLock = false;
} else if (Input.GetMouseButton(0)) {
cursorLock = true;
}


if (cursorLock) {
Cursor.lockState = CursorLockMode.Locked;
} else if (!cursorLock) {
Cursor.lockState = CursorLockMode.None;
}
}
}
}
44 changes: 23 additions & 21 deletions Scripts/PlayerStatus.cs → Scripts/Player/PlayerStatus.cs
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
using UnityEngine;

namespace ADX2LEDemo {
public class PlayerStatus : MonoBehaviour {
public static PlayerStatus Instance { get; private set; }

[SerializeField] int hp = 5;

private void Awake() {
if (PlayerStatus.Instance == null) {
PlayerStatus.Instance = this;
} else {
Destroy(this);
return;
}
}

public int GetHP() => hp;
public int Damage() => hp--;

}
using System;
using ADX2LEDemo.Scripts.UtilClass;
using UnityEngine;

namespace ADX2LEDemo.Scripts.Player {
public class PlayerStatus : MonoBehaviour {
public static PlayerStatus Instance { get; private set; }

[SerializeField] int hp = 5;

private void Awake() {
if (PlayerStatus.Instance == null) {
PlayerStatus.Instance = this;
} else {
Destroy(this);
return;
}
}

public int GetHP => hp;
public int Damage() => hp--;

}
}
Loading