Ejemplo n.º 1
0
    public void Init(World worldScript, BuildingInfo.Type bType, Building prefab)
    {
        world            = worldScript;
        myRotation       = Rotation.none;
        myBuildingPrefab = prefab;

        List <Tuple <int, int> > relativeCoordinates   = BuildingInfo.RetrieveRelativeCoordinates(bType);
        List <Tuple <int, int> > requiredRoadPositions = BuildingInfo.RetrieveRequiredRoadPositions(bType);

        foreach (Tuple <int, int> coord in relativeCoordinates)
        {
            BuildingSelectionSquare square = UnityEngine.Object.Instantiate(SquarePrefab);
            square.transform.position = new Vector2(originX + coord.Item1 + spriteOffset, originY + coord.Item2 + spriteOffset);
            square.relativeX          = coord.Item1;
            square.relativeY          = coord.Item2;
            square.myType             = BuildingSelectionSquare.Type.building;
            mySquares.Add(square);
        }

        foreach (Tuple <int, int> coord in requiredRoadPositions)
        {
            BuildingSelectionSquare square = UnityEngine.Object.Instantiate(SquarePrefab);
            square.transform.position = new Vector2(originX + coord.Item1 + spriteOffset, originY + coord.Item2 + spriteOffset);
            square.relativeX          = coord.Item1;
            square.relativeY          = coord.Item2;
            square.myType             = BuildingSelectionSquare.Type.entrance;
            mySquares.Add(square);
        }

        this.buildingType = bType;
    }
Ejemplo n.º 2
0
    // Supports negative values but doesn't do as good as above overall
    //public static Quaternion Ease(Quaternion curVal, Quaternion targetVal, float speed)
    //{
    //    float newX = Ease(curVal.eulerAngles.x, targetVal.eulerAngles.x, speed);
    //    float newY = Ease(curVal.eulerAngles.y, targetVal.eulerAngles.y, speed);
    //    float newZ = Ease(curVal.eulerAngles.z, targetVal.eulerAngles.z, speed);
    //    return Quaternion.Euler(newX, newY, newZ);
    //}


    public static void Rot90(BuildingSelectionSquare input)
    {
        int preX = input.relativeX;
        int preY = input.relativeY;

        input.relativeX = -preY;
        input.relativeY = preX;
    }
Ejemplo n.º 3
0
    public void Build()
    {
        Debug.Log($"Let's build the building: {buildingType}!");

        // Construct prefab
        Building createdBuilding = Instantiate(myBuildingPrefab);

        createdBuilding.Rotation = myRotation;
        createdBuilding.UpdateRotationSprite();

        this.world.AddBuilding(createdBuilding);

        foreach (BuildingSelectionSquare square in mySquares)
        {
            CodeTile curTile = square.TileUnderneath;

            // Both:
            curTile.ParentBuilding = createdBuilding;


            // Buildings:
            if (square.myType == BuildingSelectionSquare.Type.building)
            {
                curTile.UpdateTileType(CodeTile.Type.building);
                createdBuilding.TilesUnderneath.Add(curTile);
            }

            // Entrances:
            else
            {
                createdBuilding.Entrances.Add(curTile);

                if (createdBuilding.sign == null)
                {
                    SignPost sign = CreateSignPost(square.TileUnderneath.posX, square.TileUnderneath.posY, myRotation);
                    createdBuilding.sign = sign;
                    //sign.transform.SetParent(createdBuilding.transform);
                }
            }
        }
        this.world.TileMapUpdate();

        // Modify prefab:
        BuildingSelectionSquare bottomLeft = GetBottomLeftSquare();

        createdBuilding.originX = this.originX + bottomLeft.relativeX;
        createdBuilding.originY = this.originY + bottomLeft.relativeY;

        // Play sound effect

        // Notification:
        world.notificationCanvas.AddNotification(Notification.Type.userAction, $"Successfully constructed {createdBuilding.Name}.");
    }
Ejemplo n.º 4
0
    public BuildingSelectionSquare GetBottomLeftSquare()
    {
        BuildingSelectionSquare retSquare = null;
        int smallestX = 0;
        int smallestY = 0;

        foreach (BuildingSelectionSquare square in mySquares)
        {
            if (square.myType == BuildingSelectionSquare.Type.building)
            {
                if (square.relativeX <= smallestX && square.relativeY <= smallestY)
                {
                    retSquare = square;
                }
            }
        }
        return(retSquare);
    }