private void ShowLaser(RaycastHit hit)
    {
        laser.SetActive(true);
        laserTransform.position = Vector3.Lerp(trackedObj.transform.position, hit.point, .5f);
        laserTransform.LookAt(hit.point);
        laserTransform.localScale = new Vector3(laserTransform.localScale.x, laserTransform.localScale.y,
                                                hit.distance);
        reticle.SetActive(true);
        teleportReticleTransform.position = hit.point;

        var hitMask = LayerMaskUtility.BitPositionToMask(hit.transform.gameObject.layer);

        if ((TeleportMask.value & hitMask) != 0)
        {
            laser.GetComponent <Renderer>().material.color = Color.blue;
        }
        else if ((StandOnMask.value & hitMask) != 0)
        {
            laser.GetComponent <Renderer>().material.color = Color.green;
        }
        else
        {
            laser.GetComponent <Renderer>().material.color = Color.red;
        }
    }
    private void Teleport(RaycastHit hit)
    {
        var difference = CameraRigTransform.position - HeadTransform.position;

        difference.y = CameraRigTransform.position.y;

        var hitMask = LayerMaskUtility.BitPositionToMask(hit.transform.gameObject.layer);

        if ((TeleportMask.value & hitMask) != 0)
        {
            difference.y -= hit.point.y;
            CameraRigTransform.position = hit.point + difference;
        }
        else if ((StandOnMask.value & hitMask) != 0)
        {
            CameraRigTransform.GetComponent <MovementChangeBehaviour>().MovementState = State.Tower;
            CameraRigTransform.position = hit.point;
            ChangeTowerRole(hit);
        }
    }
示例#3
0
    private void ShowLaser(RaycastHit hit)
    {
        laser.SetActive(true);
        laserTransform.position = Vector3.Lerp(trackedObj.transform.position, hit.point, .5f);
        laserTransform.LookAt(hit.point);
        laserTransform.localScale          = new Vector3(laserTransform.localScale.x, laserTransform.localScale.y, hit.distance);
        selectionTower.transform.position  = hit.point;
        selectionTower.transform.position += towerGroundOffset;

        var hitMask = LayerMaskUtility.BitPositionToMask(hit.transform.gameObject.layer);

        if (PlaceMask.value == hitMask)
        {
            laser.GetComponent <Renderer>().material.color = Color.yellow;
        }
        else
        {
            laser.GetComponent <Renderer>().material.color = Color.red;
            showSelectionTower = false;
        }
    }
    private void Teleport(RaycastHit hit)
    {
        var difference = CameraRigTransform.position - HeadTransform.position;

        //difference.y = CameraRigTransform.position.y;
        difference.y = 0;

        var hitMask = LayerMaskUtility.BitPositionToMask(hit.transform.gameObject.layer);

        Debug.Log(string.Format("StandOnMask: {0}, HitMask: {1}", StandOnMask.value, hitMask));
        if ((StandOnMask.value & hitMask) != 0)
        {
            var currentRole = CameraRigTransform.GetComponent <RoleChangeBehaviour>().TowerRole;

            if (TagUtility.CompareRoleWithTowerTag(currentRole, hit.transform.tag))
            {
                CameraRigTransform.position  = hit.point;
                CameraRigTransform.position += difference;
            }
        }
    }
示例#5
0
    private void Update()
    {
        laser.SetActive(false);
        if (selectionTower != null)
        {
            selectionTower.SetActive(showSelectionTower);
        }

        if (Controller.GetHairTriggerDown())
        {
            if (selectionTower == null)
            {
                selectionTower = Instantiate(SelectionTowerPrefab);
            }
            placeMode = true;
        }

        if (placeMode)
        {
            RaycastHit hit;
            if (Physics.Raycast(trackedObj.transform.position, transform.forward, out hit, float.PositiveInfinity))
            {
                ShowLaser(hit);
                HighlightPlaceAreas(true);
                lastHit = hit;
            }

            if (Controller.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad))
            {
                // oben
                if (Controller.GetAxis().y > Threshold)
                {
                    currentTowerPrefab = BrickBoyTowerPrefab;
                    showSelectionTower = true;
                    ChangeChildColor(Color.red);
                }
                // unten
                else if (Controller.GetAxis().y < -Threshold)
                {
                    currentTowerPrefab = null;
                    showSelectionTower = false;
                }
                // rechts
                else if (Controller.GetAxis().x > Threshold)
                {
                    currentTowerPrefab = MageTowerPrefab;
                    showSelectionTower = true;
                    ChangeChildColor(Color.magenta);
                }
                // links
                else if (Controller.GetAxis().x < -Threshold)
                {
                    currentTowerPrefab = ArcherTowerPrefab;
                    showSelectionTower = true;
                    ChangeChildColor(Color.green);
                }
            }
        }

        if (Controller.GetHairTriggerUp())
        {
            if (lastHit.HasValue)
            {
                var hitMask = LayerMaskUtility.BitPositionToMask(lastHit.Value.transform.gameObject.layer);
                if (placeMode && showSelectionTower && PlaceMask.value == hitMask)
                {
                    InstantiateTower();
                }
            }

            showSelectionTower = false;
            placeMode          = false;
            HighlightPlaceAreas(false);
        }
    }