to new git
This commit is contained in:
@ -1,76 +1,123 @@
|
||||
using Unity.MLAgents;
|
||||
using System;
|
||||
using Unity.MLAgents;
|
||||
using UnityEngine;
|
||||
using System;
|
||||
|
||||
public class GameManager : MonoBehaviour
|
||||
{
|
||||
private static GameManager instance;
|
||||
public static GameManager Instance { get { return instance; } }
|
||||
public static GameManager Instance => instance;
|
||||
|
||||
private static SimpleMultiAgentGroup DefendersTeam = new SimpleMultiAgentGroup();
|
||||
private static SimpleMultiAgentGroup AttackersTeam = new SimpleMultiAgentGroup();
|
||||
private static SimpleMultiAgentGroup defendersTeam = new SimpleMultiAgentGroup();
|
||||
private static SimpleMultiAgentGroup attackersTeam = new SimpleMultiAgentGroup();
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (Instance == null)
|
||||
if (instance is null)
|
||||
instance = this;
|
||||
else if (Instance == this)
|
||||
else
|
||||
{
|
||||
Destroy(gameObject);
|
||||
Debug.LogError("Only 1 Instance");
|
||||
}
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
Academy.Instance.OnEnvironmentReset += ResetScene;
|
||||
|
||||
GlobalEventManager.onCaptureFlag += flagCaptured;
|
||||
GlobalEventManager.onTimeLeft += timeOut;
|
||||
GlobalEventManager.onCaptureFlag += FlagCaptured;
|
||||
GlobalEventManager.onTimeLeft += TimeOut;
|
||||
|
||||
var agents = GameObject.FindObjectsOfType<Agent>();
|
||||
foreach (var item in agents)
|
||||
{
|
||||
var agent = item as NPC;
|
||||
if (agent.GetCharacter.Team == Team.Attackers)
|
||||
AttackersTeam.RegisterAgent(agent);
|
||||
attackersTeam.RegisterAgent(item);
|
||||
else
|
||||
DefendersTeam.RegisterAgent(agent);
|
||||
defendersTeam.RegisterAgent(item);
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsCloserToEnemyThanToNextNavPoint(NavPoint navPoint, Vector3 currentTransform, Team team)
|
||||
private static SimpleMultiAgentGroup getAgentList(Team team)
|
||||
{
|
||||
SimpleMultiAgentGroup agentGroup;
|
||||
if (team == Team.Attackers)
|
||||
agentGroup = AttackersTeam;
|
||||
return attackersTeam;
|
||||
else
|
||||
agentGroup = DefendersTeam;
|
||||
return defendersTeam;
|
||||
}
|
||||
|
||||
var distToNavPoint = (currentTransform - navPoint.position).magnitude;
|
||||
public static bool IsCloserToEnemyThanToNextNavPoint(NavPoint navPoint, Vector3 currentTransform, Team oppositeTeam)
|
||||
{
|
||||
var agentGroup = getAgentList(oppositeTeam);
|
||||
|
||||
var distToNavPoint = (currentTransform - navPoint.Position).magnitude;
|
||||
foreach (var agent in agentGroup.GetRegisteredAgents())
|
||||
if (distToNavPoint > (currentTransform - agent.transform.position).magnitude)
|
||||
return true;
|
||||
if ((SettingsReader.Instance.GetSettings.HasHumanAttacker == true && oppositeTeam == Team.Attackers) ||
|
||||
(SettingsReader.Instance.GetSettings.HasHumanDefender == true && oppositeTeam == Team.Defenders))
|
||||
{
|
||||
if (distToNavPoint > (currentTransform - CharacterFactory.Instance.player.transform.position).magnitude)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool IsEnemyNearby(Vector3 currentTransform, Team team)
|
||||
public static bool IsEnemyNearby(Vector3 currentTransform, Team oppositeTeam)
|
||||
{
|
||||
SimpleMultiAgentGroup agentGroup;
|
||||
if (team == Team.Attackers)
|
||||
agentGroup = AttackersTeam;
|
||||
else
|
||||
agentGroup = DefendersTeam;
|
||||
var agentGroup = getAgentList(oppositeTeam);
|
||||
|
||||
foreach (var agent in agentGroup.GetRegisteredAgents())
|
||||
if ((currentTransform - agent.transform.position).magnitude < SettingsReader.Instance.GetSettings.ViewDistance)
|
||||
return true;
|
||||
if ((SettingsReader.Instance.GetSettings.HasHumanAttacker == true && oppositeTeam == Team.Attackers) ||
|
||||
(SettingsReader.Instance.GetSettings.HasHumanDefender == true && oppositeTeam == Team.Defenders))
|
||||
{
|
||||
if ((currentTransform - CharacterFactory.Instance.player.transform.position).magnitude < SettingsReader.Instance.GetSettings.ViewDistance)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool IsCloserToFlagFromNextNavPoint(NavPoint navPoint, Vector3 currentTransform)
|
||||
=> navPoint.FlagDistance < (currentTransform - GameObject.FindGameObjectWithTag("Flag").transform.position).magnitude;
|
||||
|
||||
private void flagCaptured(Team team)
|
||||
public static bool IsHaveSeenByEnemy(Team oppositeTeam, Vector3 position)
|
||||
{
|
||||
switch(team)
|
||||
var agentGroup = getAgentList(oppositeTeam);
|
||||
RaycastHit rayHit = new RaycastHit();
|
||||
foreach (var agent in agentGroup.GetRegisteredAgents() )
|
||||
{
|
||||
var npc = agent as NPC;
|
||||
if (Physics.Raycast(position,
|
||||
(npc.NpcBodyState.GetPointToHit(npc.gameObject) - position).normalized,
|
||||
out rayHit,
|
||||
SettingsReader.Instance.GetSettings.ViewDistance))
|
||||
{
|
||||
if (rayHit.collider.gameObject.GetComponent<ICharacter>() != null)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if ((SettingsReader.Instance.GetSettings.HasHumanAttacker == true && oppositeTeam == Team.Attackers) ||
|
||||
(SettingsReader.Instance.GetSettings.HasHumanDefender == true && oppositeTeam == Team.Defenders))
|
||||
{
|
||||
var player = CharacterFactory.Instance.player;
|
||||
if (Physics.Raycast(position,
|
||||
(player.GetComponent<MeshRenderer>().bounds.center - position).normalized,
|
||||
out rayHit,
|
||||
SettingsReader.Instance.GetSettings.ViewDistance))
|
||||
{
|
||||
if (rayHit.collider.gameObject.GetComponent<ICharacter>() != null)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void FlagCaptured(Team team)
|
||||
{
|
||||
switch (team)
|
||||
{
|
||||
case Team.Attackers:
|
||||
Debug.Log("Attackers Win");
|
||||
@ -78,21 +125,19 @@ public class GameManager : MonoBehaviour
|
||||
case Team.Defenders:
|
||||
Debug.Log("Defenders Win");
|
||||
break;
|
||||
default:
|
||||
Debug.LogError("Unexpected Team");
|
||||
break;
|
||||
}
|
||||
ResetScene();
|
||||
}
|
||||
|
||||
private void timeOut()
|
||||
private void TimeOut()
|
||||
{
|
||||
Debug.Log("Time is out");
|
||||
ResetScene();
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
GlobalEventManager.onCaptureFlag -= flagCaptured;
|
||||
GlobalEventManager.onTimeLeft -= timeOut;
|
||||
GlobalEventManager.onCaptureFlag -= FlagCaptured;
|
||||
GlobalEventManager.onTimeLeft -= TimeOut;
|
||||
}
|
||||
|
||||
public static event Action OnResetScene;
|
||||
|
@ -3,17 +3,62 @@ using UnityEngine;
|
||||
|
||||
public class MapManager : MonoBehaviour
|
||||
{
|
||||
public static List<NavPoint> navPoints { get; private set; }
|
||||
private void Start()
|
||||
private static MapManager instance;
|
||||
public static MapManager Instance => instance;
|
||||
private static List<NavPoint> navPoints = new List<NavPoint>();
|
||||
private static Dictionary<int, NavPoint> iDToNavPoint = new Dictionary<int, NavPoint>();
|
||||
public static List<NavPoint> NavPoints { get => navPoints; private set => navPoints = value; }
|
||||
public static Dictionary<int, NavPoint> IDToNavPoint { get => iDToNavPoint; private set => iDToNavPoint = value; }
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
var i = 0;
|
||||
navPoints = new List<NavPoint>();
|
||||
var navPointsGameObj = GameObject.FindGameObjectsWithTag("Point");
|
||||
foreach (var gameobj in navPointsGameObj)
|
||||
if (instance is null)
|
||||
instance = this;
|
||||
else
|
||||
{
|
||||
var navpoint = gameobj.GetComponent<NavPoint>();
|
||||
navpoint.PointId = i; i++;
|
||||
navPoints.Add(navpoint);
|
||||
Destroy(gameObject);
|
||||
Debug.LogError("Only 1 Instance");
|
||||
}
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
var navPointSet = GameObject.Find("NavPoint Set");
|
||||
var count = navPointSet.transform.childCount;
|
||||
for (int i=0; i < count; i++)
|
||||
NavPoints.Add(navPointSet.transform.GetChild(i)
|
||||
.gameObject.GetComponent<NavPoint>());
|
||||
|
||||
NavPointSetToID();
|
||||
}
|
||||
|
||||
private void NavPointSetToID()
|
||||
{
|
||||
int i = 0;
|
||||
foreach (var navPoint in NavPoints)
|
||||
{
|
||||
IDToNavPoint.Add(i, navPoint);
|
||||
navPoint.PointId = i;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddDeathAttributeToPoints(int startPoint, int endPoint,
|
||||
float allDistance, float remainingDistance)
|
||||
{
|
||||
var startNavPoint = IDToNavPoint[startPoint];
|
||||
var endNavPoint = IDToNavPoint[endPoint];
|
||||
float coef;
|
||||
try
|
||||
{
|
||||
coef = remainingDistance / allDistance;
|
||||
}
|
||||
catch (System.ArithmeticException)
|
||||
{
|
||||
Debug.LogError("Path Length is zero");
|
||||
return;
|
||||
}
|
||||
startNavPoint.DeathAttr += 1 - coef;
|
||||
endNavPoint.DeathAttr += coef;
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,4 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine;
|
||||
|
||||
public class TimeManager : MonoBehaviour
|
||||
{
|
||||
@ -17,12 +15,14 @@ public class TimeManager : MonoBehaviour
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("Only one Instance");
|
||||
Debug.LogError("Only 1 Instance");
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
void Update()
|
||||
{
|
||||
CurrentTime += Time.deltaTime;
|
||||
if (CurrentTime > SettingsReader.Instance.GetSettings.TimeOut)
|
||||
GlobalEventManager.SendTimeout();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user