Example #1
0
        public static BoundsInt CenteredOn(Position center, int range)
        {
            int size = 2 * range + 1;

            return(new BoundsInt(center.x - range, center.y - range, 0,
                                 size, size, 1));
        }
Example #2
0
    public void ReplacePosition(Osnowa.Osnowa.Core.Position newPosition)
    {
        var index     = GameComponentsLookup.Position;
        var component = (Osnowa.Osnowa.Core.ECS.PositionComponent)CreateComponent(index, typeof(Osnowa.Osnowa.Core.ECS.PositionComponent));

        component.Position = newPosition;
        ReplaceComponent(index, component);
    }
Example #3
0
    public void ReplacePositionAfterLastTurn(Osnowa.Osnowa.Core.Position newPosition)
    {
        var index     = GameComponentsLookup.PositionAfterLastTurn;
        var component = (Osnowa.Osnowa.Example.ECS.Presence.PositionAfterLastTurnComponent)CreateComponent(index, typeof(Osnowa.Osnowa.Example.ECS.Presence.PositionAfterLastTurnComponent));

        component.Position = newPosition;
        ReplaceComponent(index, component);
    }
Example #4
0
    public void ReplacePlayerDecision(GameLogic.GameCore.Decision newDecision, Osnowa.Osnowa.Core.Position newDirection, Osnowa.Osnowa.Core.Position newPosition)
    {
        var index     = GameComponentsLookup.PlayerDecision;
        var component = (Osnowa.Osnowa.Core.ECS.Input.PlayerDecisionComponent)CreateComponent(index, typeof(Osnowa.Osnowa.Core.ECS.Input.PlayerDecisionComponent));

        component.Decision  = newDecision;
        component.Direction = newDirection;
        component.Position  = newPosition;
        ReplaceComponent(index, component);
    }
        public void Init(IExampleContext context, InitialHeightIngredientConfig config, WorldGeneratorConfig worldGeneratorConfig, IRandomNumberGenerator rng)
        {
            _config      = config;
            _rng         = rng;
            _noiseOffset = new Position(_rng.Next(10000), _rng.Next(10000));

            base.Init(context, config, worldGeneratorConfig);

            Values = new ValueMap(1, worldGeneratorConfig.XSize, worldGeneratorConfig.YSize);
        }
Example #6
0
    public GameEntity SetPlayerDecision(GameLogic.GameCore.Decision newDecision, Osnowa.Osnowa.Core.Position newDirection, Osnowa.Osnowa.Core.Position newPosition)
    {
        if (hasPlayerDecision)
        {
            throw new Entitas.EntitasException("Could not set PlayerDecision!\n" + this + " already has an entity with Osnowa.Osnowa.Core.ECS.Input.PlayerDecisionComponent!",
                                               "You should check if the context already has a playerDecisionEntity before setting it or use context.ReplacePlayerDecision().");
        }
        var entity = CreateEntity();

        entity.AddPlayerDecision(newDecision, newDirection, newPosition);
        return(entity);
    }
Example #7
0
    public void ReplacePlayerDecision(GameLogic.GameCore.Decision newDecision, Osnowa.Osnowa.Core.Position newDirection, Osnowa.Osnowa.Core.Position newPosition)
    {
        var entity = playerDecisionEntity;

        if (entity == null)
        {
            entity = SetPlayerDecision(newDecision, newDirection, newPosition);
        }
        else
        {
            entity.ReplacePlayerDecision(newDecision, newDirection, newPosition);
        }
    }
        public override IEnumerator Recalculating()
        {
            Position                middle = new Position(Values.XSize / 2, Values.YSize / 2);
            float                   furthestDistanceToMiddle = Position.Distance(Position.MinValue, middle);
            float                   noiseScale            = _config.Scale;
            AnimationCurve          toCenterFalloffCurve  = _config.MaxFactorDistanceFromCenterToFalloff;
            Dictionary <int, float> afterNoiseAdjustments = InitializeAfterNoiseAdjustments(_config.Octaves);

            foreach (Position position in Values.AllCellMiddles())
            {
                Position probedPositionForNoise = position + _noiseOffset;

                float persistence01 = 0.5f;

                float heightValue = Perlin.Noise(probedPositionForNoise.x * noiseScale, probedPositionForNoise.y * noiseScale,
                                                 _config.Octaves, persistence01);
                int adjustmentKey = (int)Math.Round(persistence01 * 10);
                heightValue *= afterNoiseAdjustments[adjustmentKey];

                float distanceToMiddle         = Position.Distance(position, middle);
                float relativeDistanceToMiddle = distanceToMiddle / furthestDistanceToMiddle;
                heightValue *= toCenterFalloffCurve.Evaluate(relativeDistanceToMiddle);
                Values.Set(position, heightValue);
            }

            float cutOffValue = CalculateSeaLevelToMatchGroundPercentage();

            GameContext.SeaLevel = cutOffValue;

            bool Qualifier(int x, int y) => Values.Get(x, y) < cutOffValue;

            var bounds     = new FloodBounds(Values.XSize, Values.YSize);
            var parameters = new FloodParameters(0, 0)
            {
                Qualifier         = Qualifier,
                BoundsRestriction = bounds,
                NeighbourhoodType = NeighbourhoodType.Four
            };

            int[,] closedSeaPositions = new int[bounds.SizeX, bounds.SizeY];
            new FloodSpiller().SpillFlood(parameters, closedSeaPositions);

            BuryDepressions(cutOffValue, closedSeaPositions);

            yield return(new WaitForSeconds(0.1f));
        }
        private float CalculateSeaLevelToMatchGroundPercentage()
        {
            int          randomPointsCount = 100;
            List <float> allProbedValues   = new List <float>(randomPointsCount);

            for (int i = 0; i < randomPointsCount; i++)
            {
                var   position = new Position(_rng.Next(Values.XSize), _rng.Next(Values.YSize));
                float value    = Values.Get(position);
                allProbedValues.Add(value);
            }

            allProbedValues.Sort();
            allProbedValues.Reverse();

            int   cutOffValueIndex = (int)(_config.GroundPercentage * randomPointsCount);
            float cutOffValue      = allProbedValues[cutOffValueIndex];

            return(cutOffValue);
        }
Example #10
0
 /// <summary>
 /// Returns source BoundsInt which are stretched so that they contain consideredPosition. Ignores z component of bounds.
 /// </summary>
 public static BoundsInt With(BoundsInt source, Position consideredPosition)
 {
     if (consideredPosition.x < source.xMin)
     {
         source.xMin = consideredPosition.x;
     }
     if (consideredPosition.y < source.yMin)
     {
         source.yMin = consideredPosition.y;
     }
     if (consideredPosition.x >= source.xMax)
     {
         source.xMax = consideredPosition.x + 1;
     }
     if (consideredPosition.y >= source.yMax)
     {
         source.yMax = consideredPosition.y + 1;
     }
     return(source);
 }