示例#1
0
    public int MaskBuilds(BuildSlot.PlaceSlotType t, bool def = true)
    {
        if (def)
        {
            switch (t)
            {
            case BuildSlot.PlaceSlotType.Foundation:
                return(LayerMask.GetMask("BuildSlot Foundation", "Default", "Building"));

            case BuildSlot.PlaceSlotType.Wall:
                return(LayerMask.GetMask("BuildSlot Wall", "Default", "Building"));

            case BuildSlot.PlaceSlotType.Floor:
                return(LayerMask.GetMask("BuildSlot Floor", "Default", "Building"));

            case BuildSlot.PlaceSlotType.Main:
                return(LayerMask.GetMask("BuildSlot Inner", "Default", "Building"));

            default:
                return(LayerMask.GetMask("Default", "Building"));
            }
        }
        else
        {
            switch (t)
            {
            case BuildSlot.PlaceSlotType.Foundation:
                return(LayerMask.GetMask("BuildSlot Foundation", "Building"));

            case BuildSlot.PlaceSlotType.Wall:
                return(LayerMask.GetMask("BuildSlot Wall", "Building"));

            case BuildSlot.PlaceSlotType.Floor:
                return(LayerMask.GetMask("BuildSlot Floor", "Building"));

            case BuildSlot.PlaceSlotType.Main:
                return(LayerMask.GetMask("BuildSlot Inner", "Building"));

            default:
                return(LayerMask.GetMask("Default", "Building"));
            }
        }
    }
示例#2
0
    public void UpdatePreview()
    {
        if (buildingType == BuildSlot.PlaceSlotType.Main)
        {
            rot = Quaternion.identity * Quaternion.Euler(0, 0, rotation * 90);
        }
        else if (buildingType == BuildSlot.PlaceSlotType.Wall)
        {
            rot = Quaternion.identity * Quaternion.Euler(0, 0, rotation * 180);
        }
        else
        {
            rot = Quaternion.identity;
        }

        buildingType = buildingParts[selectedPart].type;
        preview.GetComponent <Entity>().additionalData = buildingParts[selectedPart].part.ToString();
        RaycastHit hit;

        if (Physics.Raycast(look.position, look.forward, out hit, 10f, MaskBuilds(buildingType)))
        {
            List <int> layers = new List <int>();
            layers.AddRange(new int[] { LayerMask.NameToLayer("BuildSlot Foundation"), LayerMask.NameToLayer("BuildSlot Wall"), LayerMask.NameToLayer("BuildSlot Floor"), LayerMask.NameToLayer("BuildSlot Inner") });
            if (layers.Contains(hit.collider.gameObject.layer))
            {
                preview.transform.position = hit.collider.transform.position;
                preview.transform.rotation = hit.collider.transform.rotation * rot;
            }
            else
            {
                preview.transform.position = Vector3.zero;
            }
        }
        else
        {
            preview.GetComponent <Entity>().additionalData = "0";
        }
    }