Exemple #1
0
    public PropsSpecification GeneratePropsSpecification(FloorSpecification floorSpecification)
    {
        _propGenerators = GetComponents <PropGenerationWidget>().ToList();
        var specification = new PropsSpecification(floorSpecification.Size);

        _propGenerators.ForEach(c => c.AddProps(specification, floorSpecification));
        return(specification);
    }
Exemple #2
0
    public override void AddProps(PropsSpecification propsSpecification, FloorSpecification floorSpecification)
    {
        var propsCount = Mathf.RoundToInt(floorSpecification.Size.x * floorSpecification.Size.y * _propsDensity);

        for (int i = 0; i < propsCount; i++)
        {
            var coords = new Vector2Int(_random.RandomInt(floorSpecification.Size.x),
                                        _random.RandomInt(floorSpecification.Size.y));
            var angle = _random.RandomElement(new List <float>()
            {
                0, 90, 180, 270
            });
            var propPrefab = _random.RandomElement(_possibleProps);
            if (floorSpecification.FloorPresenceArray[coords.x, coords.y])
            {
                propsSpecification.SetDefinition(coords,
                                                 new PropInstanceDefinition()
                {
                    Angle = angle, Prefab = propPrefab
                });
            }
        }
    }
Exemple #3
0
    public void InstantiateProps(PropsSpecification propsSpecification)
    {
        DestroyCurrentWalls();
        var size         = propsSpecification.Size;
        var centerOffset = size / 2;

        for (int x = 0; x < size.x; x++)
        {
            for (int y = 0; y < size.y; y++)
            {
                var definition = propsSpecification.Props[x, y];
                if (definition != null)
                {
                    var prop = GameObject.Instantiate(definition.Prefab, _propsParent);
                    prop.transform.localPosition =
                        new Vector3(x, 0, y) - new Vector3(centerOffset.x, 0, centerOffset.y) + new Vector3(definition.OffsetFromCenter.x, 0, definition.OffsetFromCenter.y);
                    prop.transform.localRotation = Quaternion.Euler(0, definition.Angle, 0);

                    prop.name = $"Prop-{x}-{y} - {definition.Prefab.name}";
                }
            }
        }
    }
Exemple #4
0
    public override void AddProps(PropsSpecification propsSpecification, FloorSpecification floorSpecification)
    {
        var propsGroupsCount = Mathf.RoundToInt(floorSpecification.Size.x * floorSpecification.Size.y * _propsGroupsDensity);

        for (int i = 0; i < propsGroupsCount; i++)
        {
            var coords = new Vector2Int(_random.RandomInt(floorSpecification.Size.x),
                                        _random.RandomInt(floorSpecification.Size.y));

            var groupRadius = Mathf.CeilToInt(_random.RandomFloat(_groupRadiusRange.x, _groupRadiusRange.y));

            var countInGroup = _random.RandomFloat(_propsDensityPerGroupRange.x, _propsDensityPerGroupRange.y) * (groupRadius + 1) * (groupRadius + 1);

            for (int j = 0; j < countInGroup; j++)
            {
                var thisPropCoords = coords + new Vector2Int(_random.RandomInt(-groupRadius, groupRadius),
                                                             _random.RandomInt(-groupRadius, groupRadius));
                if (thisPropCoords.x >= 0 && thisPropCoords.y >= 0 && thisPropCoords.x < floorSpecification.Size.x &&
                    thisPropCoords.y < floorSpecification.Size.y)
                {
                    var angle            = _random.RandomFloat(0, 360);
                    var propPrefab       = _random.RandomElement(_possibleProps);
                    var offsetFromCenter = new Vector2(_random.RandomFloat(-0.5f, 0.5f), _random.RandomFloat(-0.5f, 0.5f));

                    if (floorSpecification.FloorPresenceArray[thisPropCoords.x, thisPropCoords.y])
                    {
                        propsSpecification.SetDefinition(thisPropCoords,
                                                         new PropInstanceDefinition()
                        {
                            Angle = angle, Prefab = propPrefab, OffsetFromCenter = offsetFromCenter
                        });
                    }
                }
            }
        }
    }
Exemple #5
0
    private void ClearOutBlackHoleArea(FloorSpecification floorSpecification, WallsSpecification wallsSpecification, PropsSpecification propsSpecification)
    {
        var size   = floorSpecification.Size;
        var center = size / 2;

        for (int x = 0; x < size.x; x++)
        {
            for (int y = 0; y < size.y; y++)
            {
                var distanceToCenter = Vector2.Distance(new Vector2(x, y), center);
                if (distanceToCenter < _blackHoleAreaSize)
                {
                    floorSpecification.FloorPresenceArray[x, y] = true;
                    wallsSpecification.EmptyWalls(new Vector2Int(x, y));
                    propsSpecification.SetDefinition(new Vector2Int(x, y), null);
                }
            }
        }
    }
Exemple #6
0
 public abstract void AddProps(PropsSpecification specification, FloorSpecification floorSpecification);