Example #1
0
        private IFlower GetTargetFlowerCloserToBee(IBee bee, List <IFlower> blossomingFlowers)
        {
            int minimumDistance = -1;
            int flowerIndex     = -1;

            for (var i = 0; i < blossomingFlowers.Count; i++)
            {
                if (blossomingFlowers[i].FlowerPollenArea.Width != 0 && blossomingFlowers[i].FlowerPollenArea.Height != 0)
                {
                    var distance = _interactionManager.GetDistanceBetweenObjectAandObjectB(bee.BeeInOuterWorldSize, blossomingFlowers[i].FlowerPollenArea);
                    if (i == 0)
                    {
                        minimumDistance = distance;
                        flowerIndex     = i;
                    }
                    else if (distance < minimumDistance)
                    {
                        minimumDistance = distance;
                        flowerIndex     = i;
                    }
                }
            }
            var selectedFlower = (flowerIndex != -1) ? blossomingFlowers[flowerIndex] : null;

            return(selectedFlower);
        }
Example #2
0
        public IBee UpdateBeeInfo_OnTargetedMovement(IBee bee)
        {   //Indoors
            if (_beeCommon.BeeIsIndoors(bee.BeeEnvironmentBehavior))
            {
                SetBeeTargetedMovementDirection_Indoors(bee, _beehiveExitDoorDimmensions);
                SetBeeNewBehaviorOnHittingTarget_Indoors(bee, _beehiveExitDoorDimmensions);
            }

            //OuterWorld
            if (BeeIsGoingTowardsBeehiveEntrance(bee))
            {
                Rectangle beehiveEntranceDoor = _landscapeManager.GetBeehiveEntranceDoorDimmensions();
                SetBeeTargetedMovementDirection_OuterWorld(bee, beehiveEntranceDoor);
                SetBeeNewTargetedBehaviorOnHittingTarget_OuterWorld(bee, beehiveEntranceDoor);
            }

            if (BeeIsGoingTowardsFlower(bee))
            {
                SetTargetBehaviorBee_PollenFlower(bee);
                if (!HasAFlowerIDBeenAssignedToBee(bee))
                {
                    SetRandomBehaviorBee_OuterWorld(bee);
                }
                else
                {
                    IFlower selectedFlower = GetSelectedFlowerByID(bee.BeeTargetFlowerID);
                    if (selectedFlower != null)
                    {
                        SetBeeTargetedMovementDirection_OuterWorld(bee, selectedFlower.FlowerPollenArea);
                        SetBeeNewTargetedBehaviorOnHittingTarget_OuterWorld(bee, selectedFlower.FlowerPollenArea);
                    }
                }
            }
            return(bee);
        }
Example #3
0
            public void BeeFactory()
            {
                BeeFactory beeFactory = null;

                Console.WriteLine("Choose your bee from 1,2 or 3: ");
                string bee = Console.ReadLine();

                switch (bee)
                {
                case "1":
                    beeFactory = new QueenFactory(150, false);
                    break;

                case "2":
                    beeFactory = new DroneFactory(100, false);
                    break;

                case "3":
                    beeFactory = new WorkerFactory(80, false);
                    break;

                default:
                    break;
                }

                IBee bee1 = beeFactory.GetBee();
            }
Example #4
0
 /// <summary>
 /// Выяснить, допущена ли данная пчела к проходу в улей.
 /// </summary>
 /// <param name="bee">Пчела.</param>
 /// <returns>True - пчела допущена к проходу в улей.</returns>
 internal bool IsBeeAcceptedToEnter(IBee bee)
 {
     lock (lockObject)
     {
         return(this.list.ContainsKey(bee) && this.list[bee]);
     }
 }
Example #5
0
 /// <summary>
 /// Отменить разрешение на проход в улей (например,
 /// до следующей проверки).
 /// </summary>
 /// <param name="bee">Пчела.</param>
 internal void ResetBeeAcceptedState(IBee bee)
 {
     lock (lockObject)
     {
         list[bee] = false;
     }
 }
Example #6
0
 public void Move(IBee bee, Rectangle environmentDimmensions)
 {
     //Random Behavior
     if (_beeCommon.BeeBehaviorIsRandom(bee.BeeEnvironmentBehavior))
     {
         bee = _beeBehaviorResolver.UpdateBeeInfo_OnRandomMovement(bee, environmentDimmensions);
     }
     //targeted Behavior
     if (_beeCommon.BeeBehaviorIsTargeted(bee.BeeEnvironmentBehavior))
     {
         bee = _beeBehaviorResolver.UpdateBeeInfo_OnTargetedMovement(bee);
     }
     //Move Bee Indoors
     if (_beeCommon.BeeIsIndoors(bee.BeeEnvironmentBehavior))
     {
         Point newLocationPoint = _linearMovementStrategy.GetNewLinearMovementPoint(bee.BeeIndoorsMovementDirection);
         bee.BeeIndoorsSize = _interactionManager.GetNewLocationPoint(bee.BeeIndoorsSize, newLocationPoint);
     }
     //Move Bee Outer World
     if (_beeCommon.BeeIsInOuterWorld(bee.BeeEnvironmentBehavior))
     {
         Point newLocationPoint = _linearMovementStrategy.GetNewLinearMovementPoint(bee.BeeOuterWorldMovementDirection);
         bee.BeeInOuterWorldSize = _interactionManager.GetNewLocationPoint(bee.BeeInOuterWorldSize, newLocationPoint);
     }
 }
Example #7
0
        public override void Update(IBee bee, ISessionContext context)
        {
            var elapsed     = context.Elapsed;
            var lastUpdated = elapsed;

            if (false == bee.PropertyExists(LastUpdated))
            {
                bee[LastUpdated] = elapsed;
            }
            else
            {
                lastUpdated = (TimeSpan)bee[LastUpdated];
            }

            var timeout = elapsed - lastUpdated;

            if (timeout >= Timeout)
            {
                var beehive = context.GetBeehive(bee.NativeBeehiveIndex);
                var temp    = new Bee(bee.NativeBeehiveIndex, new WorkingBeeBehavoiur());

                beehive.Bees.Add(temp);
                temp[LastUpdated] = elapsed;
            }
        }
Example #8
0
 /// <summary>
 /// Зарегистрировать пчелу, как допущенную к проходу.
 /// </summary>
 /// <param name="bee">Пчела.</param>
 internal void AcceptBeeToEnter(IBee bee)
 {
     lock (lockObject)
     {
         list[bee] = true;
     }
 }
Example #9
0
 private void SetTargetBehaviorBee_BeehiveExitDoor(IBee bee)
 {
     bee.BeeIsOnDisplayIndoors          = false;
     bee.BeeIsOnDisplayOuterWorld       = true;
     bee.BeeIndoorsMovementDirection    = MovementDirectionEnum.Static;
     bee.BeeEnvironmentBehavior         = BeeEnvironmentBehaviorEnum.OuterWorldTargetBeehiveEntrance;
     bee.BeeOuterWorldMovementDirection = _beeCommon.GetSelectedMovement(bee.BeeEnvironmentBehavior);
 }
Example #10
0
 private void SetRandomBehaviorBee_OuterWorld(IBee bee)
 {
     bee.BeeIsOnDisplayIndoors          = false;
     bee.BeeIsOnDisplayOuterWorld       = true;
     bee.BeeIndoorsMovementDirection    = MovementDirectionEnum.Static;
     bee.BeeEnvironmentBehavior         = BeeEnvironmentBehaviorEnum.OuterWorldRandom;
     bee.BeeOuterWorldMovementDirection = _beeCommon.GetSelectedMovement(bee.BeeEnvironmentBehavior);
 }
        /// <summary>
        /// Зарегистрировать пчелу в улье, т.е. установить её связь с ульем.
        /// </summary>
        /// <param name="bee">Пчела.</param>
        private void RegisterBee(IBee bee)
        {
            this.allBees.Enqueue(bee);
            bee.BeehiveNumber = this.state.BeehiveNumber;

            bee.ActionPerformed       += this.BeeOnActionPerformed;
            bee.RequestForBeehiveData += this.BeeOnRequestBeehiveData;
        }
Example #12
0
        public static void CreateBee_ExpectedDrone()
        {
            IBee result = BeesFactory.CreateBee("Drone", 20, 4);

            IBee expected = new Drone("Drone", 20, 4);

            Assert.AreEqual(result.GetType(), expected.GetType());
        }
Example #13
0
 private void SetBeeTargetBlossomingFlowerID(IBee bee)
 {
     if (bee.BeeTargetFlowerID == -1 && BeeIsGoingTowardsFlower(bee))
     {
         var selectedFlower = GetTargetFlowerCloserToBee(bee, _flowerManager.GetBlossomingFlowers());
         bee.BeeTargetFlowerID = (selectedFlower != null) ? selectedFlower.FlowerID : -1;
     }
 }
Example #14
0
 private void SetBeeTargetedMovementDirection_OuterWorld(IBee bee, Rectangle environmentTargetDimmensions)
 {
     if (_beeCommon.BeeIsInOuterWorld(bee.BeeEnvironmentBehavior))
     {
         var beeLocationPoint    = new Point(bee.BeeInOuterWorldSize.X, bee.BeeInOuterWorldSize.Y);
         var targetLocationPoint = new Point(environmentTargetDimmensions.X, environmentTargetDimmensions.Y);
         bee.BeeOuterWorldMovementDirection = _beeCommon.GetSelectedMovement(bee.BeeEnvironmentBehavior, beeLocationPoint, targetLocationPoint);
     }
 }
Example #15
0
        public override void Update(IBee bee, UpdateContext context)
        {
            if (0 == (lifetime - age))
            {
                bee.Die();
                return;
            }

            age++;
        }
Example #16
0
 private void SetBeeNewBehaviorOnHittingTarget_Indoors(IBee bee, Rectangle environmentTargetDimmensions)
 {
     if (_beeCommon.BeeIsIndoors(bee.BeeEnvironmentBehavior))
     {
         var beeReachesObject = _interactionManager.ObjectAIntersectsObjectB(bee.BeeIndoorsSize, environmentTargetDimmensions);
         if (beeReachesObject)
         {
             SetRandomBehaviorBee_OuterWorld(bee);
         }
     }
 }
Example #17
0
        public bool RemoveBeeAtEndOFLifeCycle(IBee bee)
        {
            var selectedBee = UpdateBeeLifeCycle(bee);

            if (selectedBee.BeeIsOnDisplayIndoors && selectedBee.BeeLifeCycleTotalCount <= 0)
            {
                bees.Remove(selectedBee);
                return(true);
            }
            return(false);
        }
Example #18
0
 private void SetOppositeMovementDirectionOnReachingOuterWorldLimits(IBee bee, Rectangle environmentDimmensions)
 {
     if (_beeCommon.BeeIsInOuterWorld(bee.BeeEnvironmentBehavior))
     {
         var beeHitsLimits = _interactionManager.ObjectAIsBeyondObjectB(bee.BeeInOuterWorldSize, environmentDimmensions);
         if (beeHitsLimits)
         {
             bee.BeeOuterWorldMovementDirection = _movementSelector.GetOppositeMovement(bee.BeeOuterWorldMovementDirection);
         }
     }
 }
Example #19
0
 private void SetTargetBehaviorBee_PollenFlower(IBee bee)
 {
     SetBeeTargetBlossomingFlowerID(bee);
     if (!IsTargetFlowerStillBlossoming(bee))
     {
         if (HasAFlowerIDBeenAssignedToBee(bee))
         {
             RemoveFlowerIDFromBee(bee);
         }
         SetBeeTargetBlossomingFlowerID(bee);
     }
 }
Example #20
0
 public IBee UpdateBeeInfo_OnRandomMovement(IBee bee, Rectangle environmentDimmensions)
 {
     //Indoors
     SetRandomChangeOfMovementDirectionIndoors(bee);
     SetRandomChangeOfBehaviorIndoors(bee);
     SetOppositeMovementDirectionOnReachingIndoorsLimits(bee, environmentDimmensions);
     //OuterWorld
     SetRandomChangeOfMovementDirectionOuterWorld(bee);
     SetRandomChangeOfBehaviorOuterWorld(bee);
     SetOppositeMovementDirectionOnReachingOuterWorldLimits(bee, environmentDimmensions);
     return(bee);
 }
Example #21
0
 private void SetRandomChangeOfBehaviorIndoors(IBee bee)
 {
     if (_beeCommon.BeeIsIndoors(bee.BeeEnvironmentBehavior))
     {
         if (bee.NextBeeBehaviorType == bee.BeeIterationBehaviorTypeCounter)
         {
             bee.BeeEnvironmentBehavior          = _movementBehaviorCommandInvoker.SelectBehaviorRandomly(BeeEnvironmentEnum.Indoors);
             bee.BeeIterationBehaviorTypeCounter = 0;
             return;
         }
         bee.BeeIterationBehaviorTypeCounter++;
     }
 }
Example #22
0
 private void SetRandomChangeOfMovementDirectionOuterWorld(IBee bee)
 {
     if (_beeCommon.BeeIsInOuterWorld(bee.BeeEnvironmentBehavior))
     {
         if (bee.NextBeeMovementCycle == bee.BeeIterationMovementCycleCounter)
         {
             bee.BeeOuterWorldMovementDirection   = _beeCommon.GetSelectedMovement(bee.BeeEnvironmentBehavior);
             bee.NextBeeMovementCycle             = rand.Next(_minNextMovementIteration, _maxNextMovementIteration);
             bee.BeeIterationMovementCycleCounter = 0;
             return;
         }
         bee.BeeIterationMovementCycleCounter++;
     }
 }
Example #23
0
        public IList<IBee> PopulateHive(GameSettings settings)
        {
            var hivePopulation = (settings.GetQueensConfig().Elements+ settings.GetWorkersConfig().Elements + settings.GetDronesConfig().Elements);
            var random = new Random((int)DateTime.Now.Ticks & 0x0000FFFF);
            var hive = new IBee[hivePopulation];

            //TODO: Use a availableSlot Array splicing used units

            GenerateBees(beeType: typeof(Queen), container: hive, rule: settings.GetQueensConfig());
            GenerateBees(beeType: typeof(Worker), container: hive, rule: settings.GetWorkersConfig());
            GenerateBees(beeType: typeof(Drone), container: hive, rule: settings.GetDronesConfig());

            return hive;
        }
Example #24
0
        private void GenerateBees(Type beeType, IBee[] container, GameRule rule)
        {
            var random = new Random((int)DateTime.Now.Ticks & 0x0000FFFF);
            do
            {
                var queenPosition = random.Next(0, container.Length);

                if (container[queenPosition] == null)
                {
                    container[queenPosition] = (IBee)Activator.CreateInstance(beeType, new Bee(rule));

                }

            } while (GetBeesNumber(container, beeType) < rule.Elements);
        }
Example #25
0
        public override IList<IBee> CheckStatus(IBee bee, IList<IBee> hive)
        {
            if (bee.LifeSpan == 0)
            {
                foreach (var _bee in hive)
                {
                    do
                    {
                        _bee.Hit();

                    } while (_bee.LifeSpan > 0);
                }
            }

            return hive;
        }
Example #26
0
 private bool IsTargetFlowerStillBlossoming(IBee bee)
 {
     if (!HasAFlowerIDBeenAssignedToBee(bee))
     {
         return(false);
     }
     if (bee.BeeTargetFlowerID != -1 && BeeIsGoingTowardsFlower(bee))
     {   //we get the flower by ID
         var selectedFlower = GetSelectedFlowerByID(bee.BeeTargetFlowerID);
         if (selectedFlower != null && selectedFlower.FlowerPollenArea.Width != 0 && selectedFlower.FlowerPollenArea.Height != 0)
         {
             return(true);
         }
     }
     return(false);
 }
Example #27
0
        private void SetBeeNewTargetedBehaviorOnHittingTarget_OuterWorld(IBee bee, Rectangle environmentTargetDimmensions)
        {
            if (_beeCommon.BeeIsInOuterWorld(bee.BeeEnvironmentBehavior))
            {
                var beeReachesTarget = _interactionManager.ObjectAIntersectsObjectB(bee.BeeInOuterWorldSize, environmentTargetDimmensions);
                if (BeeIsGoingTowardsBeehiveEntrance(bee) && beeReachesTarget)
                {
                    SetRandomBehaviorBee_Indoors(bee);
                }

                if (BeeIsGoingTowardsFlower(bee) && beeReachesTarget)
                {
                    BeeExtractPollenFromFlower(bee);
                    SetTargetBehaviorBee_BeehiveExitDoor(bee);
                }
            }
        }
Example #28
0
        //Create a Bee
        //paint Bee
        //update lifecycle Bee
        //remove Bee
        public void CreateBee()
        {
            IBee       bee          = (IBee)_lifeFactory.CreateLivingBeing(LivingEntityEnum.Bee);
            List <int> availableIds = bees.Select(a => a.BeeId).ToList();

            bee.BeeId = _utilitiesResolver.GetMinimumNumberFromASequenceOfNumbers(availableIds);
            bee.BeeLifeCycleTotalCount = rand.Next(_minBeeLifeCycle, _maxBeeLifeCycle);

            int selectedIndex = GetRandomWingIndex(BeeEnvironmentEnum.Indoors);
            BeeWingMovementCycle beeWingAnimationInfo = _beeWingsMovementInvoker.GetBeeSelectedWingAnimation(selectedIndex, BeeEnvironmentEnum.Indoors);

            bee.BeeIndexWingAnimation = beeWingAnimationInfo.BeeWingMovementIndex;

            bee.BeeIsOnDisplayIndoors        = true;
            bee.BeeIndoorsWingAnimationImage = beeWingAnimationInfo.BeeWingMovementImage;
            var beeRandomLocationPoint = GetIndoorsRandomLocationPoint();
            var beeIndoorSize          = new Size(_widthBeeIndoors, _heightBeeIndoors);

            bee.BeeIndoorsSize = new Rectangle(beeRandomLocationPoint, beeIndoorSize);

            bee.BeeEnvironmentBehavior = _movementBehaviorCommandInvoker.SelectBehaviorRandomly(BeeEnvironmentEnum.Indoors);
            Point exitDoorLocationPoint = new Point(_beehiveExitDoorDimmensions.X, _beehiveExitDoorDimmensions.Y);

            bee.BeeIndoorsMovementDirection = _beeCommon.GetSelectedMovement(bee.BeeEnvironmentBehavior, beeRandomLocationPoint, exitDoorLocationPoint);

            bee.BeeIsOnDisplayOuterWorld = false;
            BeeWingMovementCycle BeeWingsInOuterWorld = _beeWingsMovementInvoker.GetBeeSelectedWingAnimation(selectedIndex, BeeEnvironmentEnum.OuterWorld);

            bee.BeeOuterWorldWingAnimationImage = BeeWingsInOuterWorld.BeeWingMovementImage;
            var beehiveWorldEntranceLocationPoint = new Point(_hiveInWorldEntranceDoorLocationX, _hiveInWorldEntranceDoorLocationY);
            var beeWorldSize = new Size(_widthBeeWorld, _heightBeeWorld);

            bee.BeeInOuterWorldSize            = new Rectangle(beehiveWorldEntranceLocationPoint, beeWorldSize);
            bee.BeeOuterWorldMovementDirection = MovementDirectionEnum.Static;

            bee.NextBeeMovementCycle             = rand.Next(_minNextMovementIteration, _maxNextMovementIteration);
            bee.BeeIterationMovementCycleCounter = 0;
            bee.NextBeeBehaviorType             = rand.Next(_minNextBehaviorIteration, _maxNextBehaviorIteration);
            bee.BeeIterationBehaviorTypeCounter = 0;

            bee.BeeTargetFlowerID         = -1;
            bee.BeePollenCarryingCapacity = rand.Next(_beeMinimumPollenCarryingCapacity, _beeMaximumPollenCarryingCapacity);
            bee.BeePollenCollected        = 0;
            bees.Add(bee);
        }
Example #29
0
        private IBee BeeExtractPollenFromFlower(IBee bee)
        {
            var selectedFlower = GetSelectedFlowerByID(bee.BeeTargetFlowerID);

            if (selectedFlower != null)
            {
                var flowerRemainingPollen = selectedFlower.FlowerPollenContainer - bee.BeePollenCarryingCapacity;

                bee.BeePollenCollected = bee.BeePollenCarryingCapacity;
                selectedFlower.FlowerPollenContainer = flowerRemainingPollen;
                if (flowerRemainingPollen <= 0)
                {
                    selectedFlower.FlowerPollenContainer = 0;
                    bee.BeePollenCollected = 0;
                }
            }
            return(bee);
        }
Example #30
0
 private void SetRandomChangeOfBehaviorOuterWorld(IBee bee)
 {
     if (_beeCommon.BeeIsInOuterWorld(bee.BeeEnvironmentBehavior))
     {
         if (bee.NextBeeBehaviorType == bee.BeeIterationBehaviorTypeCounter)
         {
             bee.BeeEnvironmentBehavior = _movementBehaviorCommandInvoker.SelectBehaviorRandomly(BeeEnvironmentEnum.OuterWorld);
             //If the selected random behavior is OuterWorldTargetBeehiveEntrance we execute the selector again
             //until the bee goes to random or to target flower
             if (bee.BeeEnvironmentBehavior == BeeEnvironmentBehaviorEnum.OuterWorldTargetBeehiveEntrance)
             {
                 SetRandomChangeOfBehaviorOuterWorld(bee);
             }
             bee.BeeIterationBehaviorTypeCounter = 0;
             return;
         }
         bee.BeeIterationBehaviorTypeCounter++;
     }
 }
Example #31
0
        public override void Update(IBee bee, UpdateContext context)
        {
            var beehive          = bee.Beehive;
            var currentBeesCount = beehive.Bees.Count();

            if (beehive.MaximumNumberOfBees > currentBeesCount)
            {
                var choice = random.NextDouble();

                if (choice < 0.9d)
                {
                    return;
                }

                var newbee = new Bee(beehive, currentBeesCount + 1, new WorkingBeeBehaviour(random.Next(100, 500)));

                beehive.AddBee(newbee);
            }
        }
        /// <summary>
        /// Начать производство пчёл.
        /// </summary>
        private async void ProduceBee()
        {
            await Task.Delay(this.balance.QueenBalance.TimeToProduceBee);

            if (!this.isWorking)
            {
                return;
            }

            IBee newBee = this.CreateRandomBee();

            this.SafePerformAction(new BeeActionNotification
            {
                SenderBee  = this,
                RelatedBee = newBee,
                ActionType = BeeActionType.ProduceBee
            });

            await Task.Factory.StartNew(this.ProduceBee);
        }
Example #33
0
        public IBee SetNextBeeWingMovementCycle(IBee bee, BeeEnvironmentEnum beeEnvironment)
        {
            var nextIndex = bee.BeeIndexWingAnimation + 1;

            if (nextIndex == _beeWingsMovementInvoker.GetTotalBeeAmimationWingFrames(beeEnvironment))
            {
                nextIndex = 0;
            }
            BeeWingMovementCycle nextBeeWingMovement = _beeWingsMovementInvoker.GetBeeSelectedWingAnimation(nextIndex, beeEnvironment);

            bee.BeeIndexWingAnimation = nextBeeWingMovement.BeeWingMovementIndex;
            if (_beeCommon.BeeIsIndoors(bee.BeeEnvironmentBehavior))
            {
                bee.BeeIndoorsWingAnimationImage = nextBeeWingMovement.BeeWingMovementImage;
            }
            if (_beeCommon.BeeIsInOuterWorld(bee.BeeEnvironmentBehavior))
            {
                bee.BeeOuterWorldWingAnimationImage = nextBeeWingMovement.BeeWingMovementImage;
            }
            return(bee);
        }
Example #34
0
 private int GetBeesNumber(IBee[] hive, Type beeType)
 {
     return hive.Where(b => b != null && b.GetType().Equals(beeType)).Select(b => b).Count();
 }
Example #35
0
        public Worker(IBee bee) :base(bee)
        {

        }
Example #36
0
        public Drone(IBee bee):base(bee)
        {

        }
Example #37
0
 public Bee(IBee bee) : base()
 {
     LifeSpan = bee.LifeSpan;
     DamageOnHit = bee.DamageOnHit;
 }
Example #38
0
 public virtual IList<IBee> CheckStatus(IBee bee, IList<IBee> hive)
 {
     return hive;
 }
Example #39
0
        public Queen(IBee bee) : base(bee)
        {

        }