Esempio n. 1
0
        //public BaseGameEntity CurTarget = null;

        protected virtual void UpdateWithinRange()
        {
            PotentialTargets.Clear();
            Owner.GetPosition(ref SelfPos);
            SearchBound.center = SelfPos;

            SpatialManager.Instance.QueryRange(ref SearchBound, PotentialTargets);

            for (int i = 0; i < PotentialTargets.Count; ++i)
            {
                T item = (T)PotentialTargets[i];
                if (!System.Object.ReferenceEquals(item, null) &&
                    !System.Object.ReferenceEquals(item, Owner) &&
                    DefenceSystem.Instance.IsEnemyRace(Owner.RaceSignal,
                                                       item.RaceSignal))
                {
                    //if (DefenceSystem.Instance.IsEnemyRace(Owner.RaceSignal,
                    //    item.RaceSignal))
                    //{
                    //    CurTarget = item;
                    //}

                    MakeNewRecordIfNotPresent(item);

                    MemoryRecord mr = Memories[item];

                    // out method.
                    if (CombatHolder.Instance.IsLOSOkay(item.Position,
                                                        Owner.Position))
                    {
                        mr.Attackable = true;

                        if (CombatHolder.Instance.IsSecondInFOVOfFirst(
                                Owner.Position, Owner.Facing,
                                item.Position, Owner.FOV))
                        {
                            mr.TimeLastSensed     = TimeWrapper.Instance.realtimeSinceStartup;
                            mr.LastSensedPosition = item.Position;
                            mr.TimeLastVisible    = TimeWrapper.Instance.realtimeSinceStartup;

                            if (!mr.WithinFOV)
                            {
                                mr.WithinFOV         = true;
                                mr.TimeBecameVisible = mr.TimeLastSensed;
                            }
                        }
                        else
                        {
                            mr.WithinFOV = false;
                        }
                    }
                    else
                    {
                        mr.Attackable = false;
                        mr.WithinFOV  = false;
                    }
                }
            }
        }
Esempio n. 2
0
        public void AddNewResource(T target)
        {
            if (!System.Object.ReferenceEquals(target, null) &&
                !System.Object.ReferenceEquals(target, Owner))
            {
                MakeNewRecordIfNotPresent(target);

                MemoryRecord mr = Memories[target];

                // if target is attackable.
                if (CombatHolder.Instance.IsLOSOkay(target.Position,
                                                    Owner.Position))
                {
                    mr.Attackable         = true;
                    mr.LastSensedPosition = target.Position;
                }
                else
                {
                    mr.Attackable = false;
                }

                mr.TimeLastSensed = TimeWrapper.Instance.realtimeSinceStartup;
            }
        }