Beispiel #1
0
        private void onChangeRegionHandler(ActiveObject target, Point source, Point destination)
        {
            IEnumerable<Point> enterRegions = Region.GetRegionRectangleDifference(new Rectangle(destination.X - 1, destination.Y - 1, 3, 3), new Rectangle(source.X - 1, source.Y - 1, 3, 3));

            // enable blocks.
            foreach (Point enterRegion in enterRegions)
            {
                if (GameModel.Instance.Grid.HasRegionByCoordinate(enterRegion))
                {
                    Region region = GameModel.Instance.Grid.GetRegion(enterRegion);
                    region.ActivateMembers(target);
                }
            }

            IEnumerable<Point> leaveRegions = Region.GetRegionRectangleDifference(new Rectangle(source.X - 1, source.Y - 1, 3, 3), new Rectangle(destination.X - 1, destination.Y - 1, 3, 3));

            // disable blocks.
            foreach (Point leaveRegion in leaveRegions)
            {
                if (GameModel.Instance.Grid.HasRegionByCoordinate(leaveRegion))
                {
                    Region region = GameModel.Instance.Grid.GetRegion(leaveRegion);
                    region.DeactivateMembers(target);
                }

            }
        }
Beispiel #2
0
 public void OnActive(ActiveObject target, Vector2 coordinates)
 {
     Vector2 diff = coordinates - _master.Position;
     if (diff.Length() < _distance)
     {
         _master.ApproachTo(target.Position, _force);
     }
 }
Beispiel #3
0
 public void OnActive(ActiveObject target, Vector2 coordinates)
 {
     Vector2 diff = coordinates - _master.Position;
     if (diff.Length() < _distance)
     {
         // TODO pick up item.
         _master.Destroy();
     }
 }
Beispiel #4
0
        public override void Enable(ActiveObject caller)
        {
            if (caller is Character)
            {
                GameModel.Instance.Character.OnMove += OnActive;
            }

            base.Enable(caller);
        }
Beispiel #5
0
 public void DeactivateMembers(ActiveObject caller)
 {
     foreach (ActiveObject member in _members)
     {
         if (member != caller)
         {
             member.Deactivate(caller);
         }
     }
 }
Beispiel #6
0
 public override void Deactivate(ActiveObject caller)
 {
     if (caller == this || caller is Character)
     {
         foreach (Behavior behavior in Behaviors)
         {
             if (behavior.Enabled)
             {
                 behavior.Disable();
             }
         }
     }
 }
Beispiel #7
0
 private void onEnterRegionHandler(ActiveObject caller, Point destination)
 {
     for (int x = destination.X - 1; x < destination.X + 2; ++x)
     {
         for (int y = destination.Y - 1; y < destination.Y + 2; ++y)
         {
             if (GameModel.Instance.Grid.HasRegionByCoordinate(new Point(x, y)))
             {
                 Region region = GameModel.Instance.Grid.GetRegion(new Point(x, y));
                 region.ActivateMembers(caller);
             }
         }
     }
 }
Beispiel #8
0
 private void onLeaveRegionHandler(ActiveObject caller, Point source)
 {
     for (int x = source.X - 1; x < source.X + 2; ++x)
     {
         for (int y = source.Y - 1; y < source.Y + 2; ++y)
         {
             if (GameModel.Instance.Grid.HasRegionByCoordinate(new Point(x, y)))
             {
                 Region region = GameModel.Instance.Grid.GetRegion(new Point(x, y));
                 region.DeactivateMembers(caller);
             }
         }
     }
 }
Beispiel #9
0
        /**
         * Update object position on grid.
         */
        public void MoveTo(ActiveObject target, Vector2 coordinates)
        {
            Point destinationRegion = DetermineRegion(coordinates);

            // assert.
            if (!ValidateRegion(destinationRegion))
            {
                return;
            }

            if (IsOnMap(target))
            {
                Point sourceRegion = GetCurrentRegion(target);
                if (sourceRegion != destinationRegion)
                {
                    Replace(target, sourceRegion, destinationRegion);
                }
            }
            else
            {
                Put(target, destinationRegion);
            }
        }
Beispiel #10
0
 /**
  * Replace already existed object from one region to another.
  */
 private void Replace(ActiveObject target, Point source, Point destination)
 {
     _regions[source.X, source.Y].RemoveMember(target);
     _regions[destination.X, destination.Y].AddMember(target);
     _objectMap[target] = destination;
     OnChangeRegion(target, source, destination);
 }
Beispiel #11
0
 public virtual void Enable(ActiveObject caller)
 {
     _enabled = true;
 }
Beispiel #12
0
 /**
  * Checks whether object already placed on map.
  */
 private bool IsOnMap(ActiveObject target)
 {
     return _objectMap.ContainsKey(target);
 }
Beispiel #13
0
 /**
  * Create new object on region map.
  */
 private void Put(ActiveObject target, Point destination)
 {
     _regions[destination.X, destination.Y].AddMember(target);
     _objectMap.Add(target, destination);
     OnEnterRegion(target, destination);
 }
Beispiel #14
0
 /**
  * Delete object from region map.
  */
 private void Drop(ActiveObject target, Point source)
 {
     _regions[source.X, source.Y].RemoveMember(target);
     _objectMap.Remove(target);
     OnLeaveRegion(target, source);
 }
Beispiel #15
0
 /**
  * Returns object current region.
  */
 private Point GetCurrentRegion(ActiveObject target)
 {
     return _objectMap[target];
 }
Beispiel #16
0
 public void RemoveMember(ActiveObject member)
 {
     _members.Remove(member);
 }
Beispiel #17
0
 /**
  * Remove object from region map.
  */
 public void Remove(ActiveObject target)
 {
     Point sourceRegion = GetCurrentRegion(target);
     Drop(target, sourceRegion);
 }
Beispiel #18
0
 public abstract void Deactivate(ActiveObject caller);
Beispiel #19
0
 public override void Activate(ActiveObject caller)
 {
     caller.Activate(this);
 }
Beispiel #20
0
 public void AddMember(ActiveObject member)
 {
     _members.Add(member);
 }
Beispiel #21
0
 public Pickup(ActiveObject master, float distance)
 {
     _master = master;
     _distance = distance;
 }
Beispiel #22
0
 public override void Deactivate(ActiveObject caller)
 {
     //caller.Deactivate(this);
 }