Exemple #1
0
        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);
//			}
        }