private void TryActiveModule(LOSResult result, UnitLock primaryLock) { if (result.hit && !result.blockingFlags.HasFlag(BlockingFlags.Plant)) { return; } _module.Lock = primaryLock; _module.State.SwitchTo(ModuleStateType.Oneshot); }
public ExpiringLosHolder(LOSResult losResult, TimeSpan lifetime) { this.losResult = losResult; _expiry = DateTime.Now.Add(lifetime); }
/// <summary> /// This messy piece of code updates what enemies are in line of sight and /// what enemy is the current target. It is so messy since it is compact /// for efficiency. /// </summary> public virtual void UpdateLOSInfo() { currentlyVisibleEnemies.Clear(); // if (fireTeamController != null) { // fireTeamController.removeVisibleEntities (currentlyVisibleEnemies); // } for (int i = 0; i < GameData.Factions.Count; i++) { if (GameData.Factions [i].FactionName != thisEntity.faction) { for (int j = 0; j < GameData.Factions [i].Soldiers.Count; j++) { LOSResult soldierIsVisible = LOSResult.Invisible; if (currentTarget == null || currentTarget != GameData.Factions [i].Soldiers [j]) { if (GameData.Factions [i].Soldiers [j] != null && GameData.Factions [i].Soldiers [j].mainLOSCollider != null && !GameData.Factions [i].Soldiers [j].isNeutral) { soldierIsVisible = isInLineOfSight(GameData.Factions [i].Soldiers [j]); if (soldierIsVisible == LOSResult.Visible) { if (!currentlyVisibleEnemies.Contains(GameData.Factions [i].Soldiers [j])) { currentlyVisibleEnemies.Add(GameData.Factions [i].Soldiers [j]); } if (currentTarget == null || currentTarget.mainLOSCollider == null || (Vector3.Distance(currentTarget.mainLOSCollider.transform.position, transformToDoLOSChecksFrom.position) > Vector3.Distance(GameData.Factions [i].Soldiers [j].mainLOSCollider.transform.position, transformToDoLOSChecksFrom.position))) { if (currentTarget != null) { if (!currentlyVisibleEnemies.Contains(currentTarget)) { currentlyVisibleEnemies.Add(currentTarget); } } if (enableDebugPrint) { Debug.Log("Target spotted!"); } CurrentTarget = GameData.Factions [i].Soldiers [j]; } else { // if (currentTarget != null) { // if (!currentlyVisibleEnemies.Contains (currentTarget)) { // currentlyVisibleEnemies.Add (currentTarget); // } // } } // if (fireTeamController!=null) // { // fireTeamController.ReportThreat(GameData.Factions[i].Soldiers[j]); // } } } } } } } // if (fireTeamController != null) { // fireTeamController.loadVisibleEntities (currentlyVisibleEnemies); // } }