예제 #1
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;
            }
        }
예제 #2
0
        //public BaseGameEntity CurTarget = null;

        protected virtual void UpdateWithinRange()
        {
            //Debug.Log("$$$$$$ sensor UpdateWithinRange");
            PotentialTargets.Clear();
            //Owner.GetPosition(ref SelfPos);
            SelfPos            = Owner.transform.position;
            SearchBound.center = SelfPos;

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

            for (int i = 0; i < PotentialTargets.Count; ++i)
            {
                bool result = PotentialTargets[i] is T;

                if (result)
                {
                    T    item   = (T)PotentialTargets[i];
                    bool isNull = System.Object.ReferenceEquals(item, null);
                    bool isSame = System.Object.ReferenceEquals(item, Owner);
                    if (!System.Object.ReferenceEquals(item, null) &&
                        !System.Object.ReferenceEquals(item, Owner) &&
                        item.IsAlive &&
                        CombatHolder.Instance.IsEnemy(item.GangID, Owner.GangID)
                        )
                    {
                        //if (DefenceSystem.Instance.IsEnemyRace(Owner.RaceSignal,
                        //    item.RaceSignal))
                        //{
                        //    CurTarget = item;
                        //}

                        MakeNewRecordIfNotPresent(item);

                        Debug.Log("$$$$$$ sensor UpdateWithinRange got record");

                        MemoryRecord mr = Memories[item];
                        mr.Attackable = true;

                        // 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))
                            if (true)
                            {
                                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;
                        }
                    }
                }
            }
        }