to new git

This commit is contained in:
2022-05-04 23:50:07 +07:00
parent 290f5515b7
commit c8af0e5284
39 changed files with 720 additions and 359 deletions

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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();
}
}