예제 #1
0
    //Crea una caja fisica en su posición, si colisiona con un edificio accede al nodo que lo contiene y comprueba si este está construido.
    //Si lo está, quiere decir que él también, se setea como contruido. Si no lo está y this si lo está le destruye su edificio porque no es una posición válida
    public void CheckIfBuildingColliding()
    {
        BoxCollider col = myBuildingType.GetCollider();

        if (col != null)
        {
            Vector3    worldCenter = col.transform.TransformPoint(col.center);
            Collider[] colliders   = Physics.OverlapBox(worldCenter, col.size * 0.4f, myBuildingType.transform.rotation, buildingLayer);

            if (colliders.Length != 0)
            {
                foreach (Collider collider in colliders)
                {
                    Node parent = collider.transform.GetComponentInParent <Node>();
                    if (parent != this)
                    {
                        if (parent.GetIsBuilt() && !IsNeightboor(parent))
                        {
                            canBeBuilt = false;
                            myBuildingType.ChangeMaterial(nodeManager.unAvailablePositionMat);
                        }
                        else
                        {
                            canBeBuilt = true;
                            myBuildingType.ChangeMaterial(nodeManager.availablePositionMat);
                        }
                    }
                    else if (colliders.Length == 1)
                    {
                        canBeBuilt = true;
                        myBuildingType.ChangeMaterial(nodeManager.availablePositionMat);
                    }
                }
            }
            else
            {
                canBeBuilt = true;
                myBuildingType.ChangeMaterial(nodeManager.availablePositionMat);
            }
        }
    }
예제 #2
0
    //Recibe un edificio y un material y lo instancia en la escena
    public void SetAvailableBuilding(GameObject _building, Material availableMat)
    {
        if (!isBuilt)
        {
            if (availableBuilding != null)
            {
                Destroy(availableBuilding);
            }

            availableBuilding = Instantiate(_building, transform.position, _building.transform.rotation, transform);

            myBuildingType = availableBuilding.transform.GetComponent <BuildingType>();
            myBuildingType.SetManager(nodeManager, this);
            if (myBuildingType.GetBuildingType() == BuildingType.EBuildingType.PIPE)
            {
                myBuildingType.ConnectPipe();
            }


            myBuildingType.ChangeMaterial(availableMat);
        }
    }