예제 #1
0
        public bool GetObjectMapRotates(BehaviorCriteria behaviorCriteria)
        {
            var assoc = FindObjectAssociation(behaviorCriteria);

            if (assoc == null)
            {
                return(false);
            }

            return(assoc.RotatesOnMap);
        }
예제 #2
0
        public string GetObjectName(BehaviorCriteria behaviorCriteria)
        {
            var assoc = FindObjectAssociation(behaviorCriteria);

            if (assoc == null)
            {
                return("Unknown Object");
            }

            return(assoc.Name);
        }
예제 #3
0
        public ObjectBehaviorAssociation FindObjectAssociation(BehaviorCriteria behaviorCriteria)
        {
            var possibleAssoc = _objAssoc.Where(objAssoc => objAssoc.MeetsCriteria(behaviorCriteria));

            if (possibleAssoc.Count() > 1 && possibleAssoc.Any(objAssoc => objAssoc.BehaviorCriteria.BehaviorOnly()))
            {
                possibleAssoc = possibleAssoc.Where(objAssoc => !objAssoc.BehaviorCriteria.BehaviorOnly());
            }

            return(possibleAssoc.FirstOrDefault());
        }
예제 #4
0
        public List <WatchVariable> GetWatchVariables(BehaviorCriteria behaviorCriteria)
        {
            var assoc = FindObjectAssociation(behaviorCriteria);

            if (assoc == null)
            {
                return(new List <WatchVariable>());
            }

            else
            {
                return(assoc.WatchVariables);
            }
        }
예제 #5
0
        public Image GetObjectMapImage(BehaviorCriteria behaviorCriteria)
        {
            if (behaviorCriteria.BehaviorAddress == 0)
            {
                return(EmptyImage);
            }

            var assoc = FindObjectAssociation(behaviorCriteria);

            if (assoc == null)
            {
                return(_defaultImage);
            }

            return(assoc.MapImage);
        }
예제 #6
0
        public Image GetObjectImage(BehaviorCriteria behaviorCriteria, bool transparent)
        {
            if (behaviorCriteria.BehaviorAddress == 0)
            {
                return(EmptyImage);
            }

            var assoc = FindObjectAssociation(behaviorCriteria);

            if (assoc == null)
            {
                return(transparent ? _transparentDefaultImage : _defaultImage);
            }

            return(transparent ? assoc.TransparentImage : assoc.Image);
        }
예제 #7
0
        public ObjectBehaviorAssociation FindObjectAssociation(BehaviorCriteria behaviorCriteria)
        {
            if (_cachedObjAssoc.ContainsKey(behaviorCriteria))
            {
                return(_cachedObjAssoc[behaviorCriteria]);
            }

            var possibleAssoc = _objAssoc.Where(objAssoc => objAssoc.MeetsCriteria(behaviorCriteria));

            if (possibleAssoc.Count() > 1 && possibleAssoc.Any(objAssoc => objAssoc.BehaviorCriteria.BehaviorOnly()))
            {
                possibleAssoc = possibleAssoc.Where(objAssoc => !objAssoc.BehaviorCriteria.BehaviorOnly());
            }

            var behaviorAssoc = possibleAssoc.FirstOrDefault();

            _cachedObjAssoc[behaviorCriteria] = behaviorAssoc;

            return(behaviorAssoc);
        }
예제 #8
0
        public bool CongruentTo(BehaviorCriteria otherCriteria)
        {
            if (otherCriteria.BehaviorAddress != BehaviorAddress)
            {
                return(false);
            }

            if (GfxId.HasValue && otherCriteria.GfxId.HasValue && GfxId.Value != otherCriteria.GfxId.Value)
            {
                return(false);
            }

            if (SubType.HasValue && otherCriteria.SubType.HasValue && SubType.Value != otherCriteria.SubType.Value)
            {
                return(false);
            }

            if (Appearance.HasValue && otherCriteria.Appearance.HasValue && Appearance.Value != otherCriteria.Appearance.Value)
            {
                return(false);
            }

            return(true);
        }
예제 #9
0
        public BehaviorCriteria?Generalize(BehaviorCriteria otherCriteria)
        {
            if (otherCriteria.BehaviorAddress != BehaviorAddress)
            {
                return(null);
            }

            if (GfxId.HasValue && otherCriteria.GfxId.HasValue && GfxId.Value != otherCriteria.GfxId.Value)
            {
                return new BehaviorCriteria()
                       {
                           BehaviorAddress = BehaviorAddress
                       }
            }
            ;

            if (SubType.HasValue && otherCriteria.SubType.HasValue && SubType.Value != otherCriteria.SubType.Value)
            {
                return new BehaviorCriteria()
                       {
                           BehaviorAddress = BehaviorAddress, GfxId = GfxId
                       }
            }
            ;

            if (Appearance.HasValue && otherCriteria.Appearance.HasValue && Appearance.Value != otherCriteria.Appearance.Value)
            {
                return new BehaviorCriteria()
                       {
                           BehaviorAddress = BehaviorAddress, GfxId = GfxId, SubType = SubType
                       }
            }
            ;

            return(this);
        }
예제 #10
0
 public bool MeetsCriteria(BehaviorCriteria behaviorCriteria)
 {
     return(BehaviorCriteria.CongruentTo(behaviorCriteria));
 }
예제 #11
0
        public bool RecognizedBehavior(BehaviorCriteria behaviorCriteria)
        {
            var assoc = FindObjectAssociation(behaviorCriteria);

            return(assoc != null);
        }