예제 #1
0
        /// <summary>
        /// Получает эффекты воздействия этого феномена на точку пространства.
        /// Использует метаданные попавшей под воздействия формы жизни для корректировки
        /// эффектов.
        /// </summary>
        /// <param name="point">Точка пространства</param>
        /// <param name="lifeFormMetadata">Метаданные формы жизни</param>
        /// <returns></returns>
        public List <StateMetadata> GetEffects(Point point, LifeFormMetadata lifeFormMetadata)
        {
            List <StateMetadata> stateMetadata = new List <StateMetadata> {
            };

            //Реализация GetEffects(Point point, LifeFormMetadata lifeFormMetadata)

            return(stateMetadata);
        }
예제 #2
0
        /// <summary>
        /// Определяет, оказывает ли феномен воздействие на форму жизни и возвращает
        /// результат этого воздействия
        /// </summary>
        /// <param name="point">Точка</param>
        /// <param name="lifeFormMetadataMetadata">метаданные форммы жизни, находящейся в этой точке</param>
        /// <returns>Эффект воздействия феномена</returns>
        public List <StateMetadata> GetEffects(Point point, LifeFormMetadata lifeFormMetadataMetadata)
        {
            log.Trace(LogPhenomenMessages.PhenomenGetEffects, "SunPhenomen", point.X, point.Y);
            if (point == null)
            {
                ArgumentException ex = new ArgumentNullException(nameof(point));
                log.Error(LogPhenomenMessages.NullArgument, "Point", ex);
                throw ex;
            }

            if (lifeFormMetadataMetadata == null)
            {
                ArgumentNullException ex = new ArgumentNullException(nameof(lifeFormMetadataMetadata));
                log.Error(LogPhenomenMessages.NullArgument, "LifeFormMetadata", ex);
                throw ex;
            }


            if (!isIn(point))
            {
                ArgumentException ex = new ArgumentException("Point isn't in phenomen area.", nameof(point));
                log.Error(LogPhenomenMessages.PointNotFound);
                throw ex;
            }


            if (!lifeFormMetadataMetadata.ContainsKey("GenotypeState"))
            {
                ArgumentException ex = new ArgumentException("life form metadata isn't contains Genotype state metadata", nameof(lifeFormMetadataMetadata));
                log.Error(LogPhenomenMessages.GenotypeStateNotFound);
                throw ex;
            }


            if (!lifeFormMetadataMetadata["GenotypeState"].ContainsKey("Action") ||
                lifeFormMetadataMetadata["GenotypeState"]["Action"] != ActionPhotosynthesisName)
            {
                log.Info(LogPhenomenMessages.GenotypeStateAction);
                return(new List <StateMetadata>(0));
            }


            double depthFactor = 1 / (1 + (point.Y - _place[0].Y) / _place[1].Y);


            log.Info(LogPhenomenMessages.DepthFactorCalc, depthFactor.ToString());
            StateMetadata stateMetadata = new StateMetadata("EnergyState", BaseIntensity * _powerFactor * depthFactor, null);

            List <StateMetadata> ret = new List <StateMetadata>(1);

            ret.Add(stateMetadata);
            log.Trace(LogPhenomenMessages.EndMethod, "SunPhenomen.GetEffects");
            return(ret);
        }
예제 #3
0
 /// <inheritdoc />
 /// <summary>
 /// Инициализирует форму жизни "бот" из ее метаданных
 /// </summary>
 /// <param name="metadata">Метаданные Бота</param>
 public BotLifeForm(LifeFormMetadata metadata) : base(metadata)
 {
     //TODO check metadata.
 }
예제 #4
0
 public List <StateMetadata> GetEffects(Point point, LifeFormMetadata lifeFormMetadata)
 {
     throw new NotImplementedException();
 }