Ejemplo n.º 1
0
    private void DoClick(object sender, ClickedEventArgs e)
    {
        if (teleportOnClick)
        {
            // First get the current Transform of the the reference space (i.e. the Play Area, e.g. CameraRig prefab)
            var t = reference;
            if (t == null)
            {
                return;
            }

            // Get the current Y position of the reference space
            float refY = t.position.y;

            // Create a plane at the Y position of the Play Area
            // Then create a Ray from the origin of the controller in the direction that the controller is pointing
            Plane plane = new Plane(Vector3.up, -refY);
            Ray   ray   = new Ray(transform.position, transform.forward);

            // Set defaults
            bool  hasGroundTarget = false;
            float dist            = 0f;
            if (teleportType == TeleportType.TeleportTypeUseTerrain) // If we picked to use the terrain
            {
                RaycastHit      hitInfo;
                TerrainCollider tc = Terrain.activeTerrain.GetComponent <TerrainCollider>();
                hasGroundTarget = tc.Raycast(ray, out hitInfo, 1000f);
                dist            = hitInfo.distance;
            }
            else if (teleportType == TeleportType.TeleportTypeUseCollider) // If we picked to use the collider
            {
                RaycastHit hitInfo;
                hasGroundTarget = Physics.Raycast(ray, out hitInfo);
                dist            = hitInfo.distance;
            }
            else // If we're just staying flat on the current Y axis
            {
                // Intersect a ray with the plane that was created earlier
                // and output the distance along the ray that it intersects
                hasGroundTarget = plane.Raycast(ray, out dist);
            }

            if (hasGroundTarget)
            {
                // Get the current Camera (head) position on the ground relative to the world
                Vector3 headPosOnGround = new Vector3(SteamVR_Render.Top().head.position.x, refY,
                                                      SteamVR_Render.Top().head.position.z);

                // We need to translate the reference space along the same vector
                // that is between the head's position on the ground and the intersection point on the ground
                // i.e. intersectionPoint - headPosOnGround = translateVector
                // currentReferencePosition + translateVector = finalPosition
                t.position = t.position + (ray.origin + (ray.direction * dist)) - headPosOnGround;
            }
        }
    }
Ejemplo n.º 2
0
        private void Generate()
        {
            if (!m_Terrain || !m_SpawnData)
            {
                return;
            }

            Transform treesRoot = m_Terrain.transform.Find("Trees");
            Transform rocksRoot = m_Terrain.transform.Find("Rocks");

            if (m_SpawnData.m_TreeList.Length > 0 && !treesRoot)
            {
                treesRoot = CreateEmptyUnder("Trees", m_Terrain.transform);
            }
            if (!rocksRoot)
            {
                rocksRoot = CreateEmptyUnder("Rocks", m_Terrain.transform);
            }

            TerrainCollider terrainCollider = m_Terrain.GetComponent <TerrainCollider>();
            Vector3         terrainSize     = m_Terrain.terrainData.size;
            Vector3         terrainPosition = m_Terrain.GetPosition();

            for (int x = 0; x < terrainSize.x; x++)
            {
                for (int y = 0; y < terrainSize.z; y++)
                {
                    bool spawn = Random.Range(0, m_SpawnOdds) == (m_SpawnOdds / 2);
                    if (!spawn)
                    {
                        continue;
                    }

                    bool spawnTree = Random.Range(0, 2) == 0;
                    if (m_SpawnData.m_TreeList.Length == 0)
                    {
                        spawnTree = false;
                    }

                    DetailSpawnData.DetailSpawn prefab = spawnTree ? m_SpawnData.GetTreePrefab() : m_SpawnData.GetRockPrefab();

                    if (prefab != null)
                    {
                        float      raycastHeight = terrainPosition.y + terrainSize.y + 1;
                        Ray        ray           = new Ray(new Vector3(x, raycastHeight, y), Vector3.down);
                        RaycastHit hitInfo;

                        if (terrainCollider.Raycast(ray, out hitInfo, terrainSize.y * 2))
                        {
                            Instantiate(prefab.Object, hitInfo.point + prefab.PositionOffset, Quaternion.Euler(prefab.RandomRotation), spawnTree ? treesRoot : rocksRoot);
                        }
                    }
                }
            }
        }
Ejemplo n.º 3
0
    // Update is called once per frame
    void Update()
    {
        if (m_stopped)
        {
            return;
        }

        if (SeekTarget != null)
        {
            Vector3 seekTarget = SeekTarget.transform.position;
            seekTarget.y = transform.position.y;
            m_agent.SetDestination(seekTarget);

            if ((seekTarget - transform.position).sqrMagnitude <
                (m_radiusToStartFishReelEvent * m_radiusToStartFishReelEvent))
            {
                m_fish.TriggerFishEvent();
                SetStopped(true);
            }
            return;
        }

        m_lookAheadEulerAngles.x += Random.value * m_wanderAngleUpdateRate.x;
        m_lookAheadEulerAngles.y += Random.value * m_wanderAngleUpdateRate.y;
        if (m_newPosTimer > m_reseekDuration)
        {
            m_lookAheadPos = transform.forward * m_lookAheadDist + transform.position;
            m_lookAheadRot = Quaternion.AngleAxis(m_lookAheadEulerAngles.x, Vector3.up) *
                             Quaternion.AngleAxis(m_lookAheadEulerAngles.y, Vector3.right);

            m_wanderTarget = m_lookAheadPos + ((m_lookAheadRot * Vector3.forward) * m_lookAheadRadius);
            Vector3 dirToTarget = m_wanderTarget - transform.position;

            Vector3 seekDir        = dirToTarget;
            Ray     toWanderTarget = new Ray(transform.position, dirToTarget);
            if (m_terrainCollider.Raycast(toWanderTarget, out RaycastHit hitinfo, m_lookAheadDist))
            {
                Vector3 newDir = Vector3.Reflect(seekDir, transform.forward);
                seekDir = newDir;

                m_reflectedLookAheadPos = transform.position + newDir;
            }

            Vector3 seekPos = seekDir + transform.position;
            if ((seekPos - m_startPos).sqrMagnitude > (m_maxRadius * m_maxRadius))
            {
                seekPos = m_startPos;
            }

            m_agent.SetDestination(seekPos);
            m_newPosTimer = 0.0f;
        }

        m_newPosTimer += Time.deltaTime;
    }
Ejemplo n.º 4
0
    public Vector3?ScreenPointToMapPosition(Vector2 point)
    {
        var        ray = Camera.main.ScreenPointToRay(point);
        RaycastHit hit;

        if (!MapCollider.Raycast(ray, out hit, Mathf.Infinity))
        {
            return(null);
        }
        return(hit.point);
    }
Ejemplo n.º 5
0
        public GameObjectRayHit RaycastTerrainObject(Ray ray, GameObject terrainObject, TerrainCollider terrainCollider)
        {
            RaycastHit rayHit;

            if (terrainCollider.Raycast(ray, out rayHit, float.MaxValue))
            {
                return(new GameObjectRayHit(ray, rayHit));
            }

            return(null);
        }
Ejemplo n.º 6
0
    private void updateSelector()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        try
        {
            if (board.Raycast(ray, out RaycastHit hitInfo, Mathf.Infinity))
            {
                Vector3 selectorTransform = hitInfo.point;                      // New vector to snap selector to grid
                selectorTransform.x         = Mathf.Round(hitInfo.point.x);
                selectorTransform.z         = Mathf.Round(hitInfo.point.z);
                selectorTransform.y         = 0.1f;                             // Hover over Board
                selector.transform.position = selectorTransform;
            }
        }
        catch
        {
            Debug.Log("Unable to update location for Tile Selector");
        }
    }
Ejemplo n.º 7
0
    private Vector3?ScreenMapLook()
    {
        Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (!map.Raycast(ray, out hit, Mathf.Infinity))
        {
            return(null);
        }

        return(hit.point);
    }
Ejemplo n.º 8
0
    void FixedUpdate()
    {
        if (ghost != null && dragging)
        {
            Ray ray = targetCamera.ScreenPointToRay(Input.mousePosition);

            RaycastHit hitInfo;
            if (terrain.Raycast(ray, out hitInfo, Mathf.Infinity)) // using infinity for the ray length for example
            {
                ghost.transform.position = CalculatePosition(hitInfo.point);
            }
        }
    }
Ejemplo n.º 9
0
        public override bool Raycast(Ray ray, out Octave3DColliderRayHit colliderRayHit)
        {
            colliderRayHit = null;

            RaycastHit rayHit;

            if (_terrainCollider.Raycast(ray, out rayHit, float.MaxValue))
            {
                colliderRayHit = new Octave3DColliderRayHit(ray, rayHit.distance, rayHit.point, rayHit.normal, this);
            }

            return(colliderRayHit != null);
        }
Ejemplo n.º 10
0
    /*
     * Identify a point on the map from a 2d point on the screen
     */
    public RaycastHit?ScreenPointToMapPosition(Vector2 point)
    {
        var        ray = Camera.main.ScreenPointToRay(point);
        RaycastHit hit;

        //if we have not hit anything, then just return null
        if (!MapCollider.Raycast(ray, out hit, Mathf.Infinity))
        {
            return(null);
        }

        return(hit);
    }
Ejemplo n.º 11
0
    private Vector3 getWorldCoordonatesFromClick(Vector3 mousePosition)
    {
        Ray ray;

        ray = Camera.main.ScreenPointToRay(mousePosition);
        RaycastHit hitData;

        if (terrainCollider != null && terrainCollider.Raycast(ray, out hitData, Mathf.Infinity))
        {
            return(hitData.point);
        }
        return(new Vector3(-1, -1, -1));
    }
Ejemplo n.º 12
0
    private bool CanLand()
    {
        if (height > maxDistanceToLand)
        {
            return(false);
        }

        Ray        ray = new Ray(new Vector3(transform.position.x, transform.position.y, transform.position.z), Vector3.down);
        RaycastHit hit;

        terrainCollider = GameObject.FindObjectOfType <TerrainCollider>();
        return(terrainCollider.Raycast(ray, out hit, 2.0f) && hit.distance <= maxDistanceToLand);
    }
Ejemplo n.º 13
0
    private void Update()
    {
        if (isFired)
        {
            return;
        }
        timer += Time.deltaTime;

        if (Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(KeyCode.Mouse1))
        {
            gameObject.SetActive(false);
            enabled = false;
            Manager.Instance.SkillOnMouse = false;
            return;
        }
        RaycastHit hit;

        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (terrainCollider.Raycast(ray, out hit, 145f))
        {
            transform.position = hit.point;
        }
        if (CheckDistance())
        {
            canBeCasted         = true;
            rend.material.color = Color.green;
        }
        else
        {
            canBeCasted = false;
            Scale();
            rend.material.color = new Color(0.7f, 0.3f, 0.1f);
        }
        if (timer < 0.5f)
        {
            return;
        }

        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            if (canBeCasted)
            {
                Fire();
            }
            else
            {
                EventLog.Instance.AddAction(LogType.Error, Distance, transform.position);
            }
        }
    }
Ejemplo n.º 14
0
        public Vector3 BrushPos()
        {
            Ray        ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
            RaycastHit hit;

            if (terrainCollider.Raycast(ray, out hit, Mathf.Infinity))
            {
                return(hit.point);
            }
            else
            {
                return(strokeBounds.center);                //returning somewhere within stroke
            }
        }
        public static float GetHeight(this TerrainCollider ground, float x, float z, float maxHeight = 1000.0f)
        {
            var        ray = new Ray(new Vector3(x, maxHeight, z), Vector3.down);
            RaycastHit hit;

            if (ground.Raycast(ray, out hit, maxHeight))
            {
                return(hit.point.y);
            }
            else
            {
                return(0);
            }
        }
Ejemplo n.º 16
0
	private void HandleHolo() {
		if (!_currentHolo) return;

		var t = transform;
		_terrainCollider.Raycast(new Ray(t.position, -t.forward), out var hit, PositiveInfinity);
		_currentHolo.transform.position = hit.point;

		if (!_controls.fire1) return;
		var buildingHolo = _currentHolo.GetComponent<BuildingHolo>();
		if (!buildingHolo.CanBeBuilt()) return;

		_build.CmdBuild(_currentHolo.transform.position, _currentHoloType);
		Destroy(_currentHolo);
		_currentHolo = null;
	}
Ejemplo n.º 17
0
 void FixedUpdate()
 {
     if (terrainColliderForUpdate)
     {
         RaycastHit hit = new RaycastHit();
         if (terrainColliderForUpdate.Raycast(new Ray(transform.position + Vector3.up * checkOffset, Vector3.down), out hit, Mathf.Infinity))
         {
             // enable only in the case when my collider seems to be over terrain surface
             for (int i = 0; i < terrainColliders.Length; i++)
             {
                 Physics.IgnoreCollision(_collider, terrainColliders[i], false);
             }
         }
         terrainColliderForUpdate = null;
     }
 }
Ejemplo n.º 18
0
        //void DoClick(object sender, ClickedEventArgs e)
        void DoClick()
        {
            GameObject go = Fsm.GetOwnerDefaultTarget(controller);
            var        i  = -1;

            if ((int)trackedObj.index > i++)
            {
                var t = reference;
                if (t == null)
                {
                    return;
                }

                float refY = t.position.y;

                Plane plane = new Plane(Vector3.up, -refY);
                Ray   ray   = new Ray(go.transform.position, go.transform.forward);

                bool  hasGroundTarget = false;
                float dist            = 0f;
                if (teleportType == TeleportType.TeleportTypeUseTerrain)
                {
                    RaycastHit      hitInfo;
                    TerrainCollider tc = Terrain.activeTerrain.GetComponent <TerrainCollider>();
                    hasGroundTarget = tc.Raycast(ray, out hitInfo, 1000f);
                    dist            = hitInfo.distance;
                }
                else if (teleportType == TeleportType.TeleportTypeUseCollider)
                {
                    RaycastHit hitInfo;
                    Physics.Raycast(ray, out hitInfo);
                    dist = hitInfo.distance;
                }
                else
                {
                    hasGroundTarget = plane.Raycast(ray, out dist);
                }

                if (hasGroundTarget)
                {
                    Vector3 headPosOnGround = new Vector3(SteamVR_Render.Top().head.localPosition.x, 0.0f, SteamVR_Render.Top().head.localPosition.z);
                    t.position = ray.origin + ray.direction * dist - new Vector3(t.GetChild(0).localPosition.x, 0f, t.GetChild(0).localPosition.z) - headPosOnGround;

                    Fsm.Event(sendEvent);
                }
            }
        }
Ejemplo n.º 19
0
    private void MoveGhostWithMouse()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        RaycastHit hitInfo;

        if (terrainCollider.Raycast(ray, out hitInfo, 1000))
        {
            currentGhostPos.x = hitInfo.point.x;
            currentGhostPos.y = currentGhost.transform.position.y;
            currentGhostPos.z = hitInfo.point.z;
            ghostRot          = Quaternion.FromToRotation(Vector3.up, hitInfo.normal);
        }

        currentGhost.transform.position = currentGhostPos;
        currentGhost.transform.rotation = ghostRot;
    }
Ejemplo n.º 20
0
    void Start()
    {
        if (mainCamera == null)
        {
            GameObject gameObj = GameObject.FindWithTag("MainCamera");
            if (gameObj == null || (mainCamera = gameObj.GetComponent <Transform>()) == null)
            {
                Debug.LogError("Unable to find camera to attach to");
                return;
            }
        }

        if (terrain == null)
        {
            Terrain terrainObj = GameObject.FindObjectOfType <Terrain>();
            if (terrainObj == null || (terrain = terrainObj.GetComponent <TerrainCollider>()) == null)
            {
                Debug.LogError("Unable to find terrain with collider to use");
            }
        }

        RaycastHit hit;

        if (!terrain.Raycast(new Ray(mainCamera.position, mainCamera.forward), out hit, Mathf.Infinity))
        {
            Debug.LogError("Camera is not looking at the terrain");
            return;
        }

        lookAtPoint       = hit.point;
        directionVector   = new Vector3(lookAtPoint.x - mainCamera.position.x, 0, lookAtPoint.z - mainCamera.position.z);
        centerOfCameraArc = new Vector3(
            lookAtPoint.x,
            mainCamera.position.y + Mathf.Tan(startAngle) * directionVector.magnitude,
            lookAtPoint.z);

        directionVector = directionVector.normalized;
        Vector3 normalVector = new Vector3(0, 1, 0);                   // Always facing upright above the lookAtPoint.

        axisOfRotation = Vector3.Cross(normalVector, directionVector); // Should have length 1, no need to normalize again.

        // Start angle is the minimum angle.
        currentAngle           = startAngle;
        originalCameraPosition = mainCamera.position;
        originalUpVector       = mainCamera.up;
    }
Ejemplo n.º 21
0
        public GameObjectRayHit RaycastTerrainObject(Ray ray, GameObject terrainObject)
        {
            TerrainCollider terrainCollider = terrainObject.GetComponent <TerrainCollider>();

            if (terrainCollider == null)
            {
                return(null);
            }

            RaycastHit rayHit;

            if (terrainCollider.Raycast(ray, out rayHit, float.MaxValue))
            {
                return(new GameObjectRayHit(ray, rayHit));
            }

            return(null);
        }
Ejemplo n.º 22
0
        public static void PushOutFromTerrain(TerrainCollider terrainCollider, float segmentRadius, ref Vector3 point)
        {
            Terrain terrain = terrainCollider.GetComponent <Terrain>();

            Vector3 rayOrigin = point;

            rayOrigin.y = terrainCollider.transform.position.y + terrain.SampleHeight(point) + segmentRadius;

            Ray ray = new Ray(rayOrigin, Vector3.down);

            RaycastHit hit;

            if (terrainCollider.Raycast(ray, out hit, segmentRadius * 2f))
            {
                float hitToPointDist = (point - hit.point).magnitude;

                float underMul = 1f;
                if (hit.point.y > point.y + segmentRadius * 0.9f)
                {
                    underMul = 8f;
                }
                else
                if (hit.point.y > point.y)
                {
                    underMul = 4f;
                }

                if (hitToPointDist < segmentRadius * underMul)
                {
                    Vector3 toNormal = hit.point - point;
                    Vector3 pushNormal;

                    if (underMul > 1f)
                    {
                        pushNormal = toNormal + toNormal.normalized * segmentRadius;
                    }
                    else
                    {
                        pushNormal = toNormal - toNormal.normalized * segmentRadius;
                    }
                    point = point + pushNormal;
                }
            }
        }
Ejemplo n.º 23
0
    Vector2 Hit(Camera camera, Vector2 screenPosition)   // returns uv
    {
        RaycastHit hit;
        Ray        ray = camera.ScreenPointToRay(screenPosition);

        if (boardCollider.Raycast(ray, out hit, 200.0f))
        {
            var localHit =
                boardCollider.transform.InverseTransformPoint(hit.point);
            var bounds  = boardCollider.bounds;
            var extents = bounds.extents * 2;
            var uv      = new Vector2(
                localHit.x / extents.x,
                localHit.z / extents.z);
            Debug.Log($"bounds.min = {bounds.min}, extents = {extents}, hit.point = {hit.point}, localHit = {localHit}, uv = {uv}");
            return(uv);
        }
        return(Vector2.zero);
    }
    public void PlaceAtScreenPosition(Vector2 position)
    {
        if (Camera.current == null)
        {
            return;
        }

        position.y = Camera.current.pixelHeight - position.y;
        Ray ray = Camera.current.ScreenPointToRay(position);

        RaycastHit      hit;
        TerrainCollider collider = this.GetComponent <TerrainCollider>();

        if (collider.Raycast(ray, out hit, Mathf.Infinity))
        {
            Place(hit.point);
            LastHit = hit.point;
        }
    }
Ejemplo n.º 25
0
    void DoClick(object sender, ClickedEventArgs e)
    {
        if (teleportOnClick)
        {
            var t = reference;
            if (t == null)
            {
                return;
            }

            float refY = t.position.y;

            Plane plane = new Plane(Vector3.up, -refY);
            Ray   ray   = new Ray(this.transform.position, transform.forward);

            bool  hasGroundTarget = false;
            float dist            = 0f;
            if (teleportType == TeleportType.TeleportTypeUseTerrain)
            {
                RaycastHit      hitInfo;
                TerrainCollider tc = Terrain.activeTerrain.GetComponent <TerrainCollider>();
                hasGroundTarget = tc.Raycast(ray, out hitInfo, 1000f);
                dist            = hitInfo.distance;
            }
            else if (teleportType == TeleportType.TeleportTypeUseCollider)
            {
                RaycastHit hitInfo;
                Physics.Raycast(ray, out hitInfo);
                dist = hitInfo.distance;
            }
            else
            {
                hasGroundTarget = plane.Raycast(ray, out dist);
            }

            if (hasGroundTarget)
            {
                Vector3 headPosOnGround = new Vector3(SteamVR_Render.Top().head.localPosition.x, 0.0f, SteamVR_Render.Top().head.localPosition.z);
                t.position = ray.origin + ray.direction * dist - new Vector3(t.GetChild(0).localPosition.x, 0f, t.GetChild(0).localPosition.z) - headPosOnGround;
            }
        }
    }
Ejemplo n.º 26
0
    void Start()
    {
        skin = Resources.Load("GUISkin") as GUISkin;

        if (mainCamera == null)
        {
            GameObject go = GameObject.FindGameObjectWithTag("MainCamera");
            if (go != null)
            {
                mainCamera = go.transform;
            }
        }

        if (terrain == null)
        {
            Terrain terrainObj = GameObject.FindObjectOfType <Terrain>();
            if (terrainObj == null || (terrain = terrainObj.GetComponent <TerrainCollider>()) == null)
            {
                Debug.LogError("Unable to find terrain with collider to use");
            }
        }

        RaycastHit hit;

        if (!terrain.Raycast(new Ray(mainCamera.position, mainCamera.forward), out hit, Mathf.Infinity))
        {
            Debug.LogError("Camera is not looking at the terrain");
            return;
        }

        lookAtPoint       = hit.point;
        directionVector   = new Vector3(lookAtPoint.x - mainCamera.position.x, 0, lookAtPoint.z - mainCamera.position.z).normalized;
        centerOfCameraArc = new Vector3(
            lookAtPoint.x,
            0,
            lookAtPoint.z);
        Debug.Log("Center of camera:" + centerOfCameraArc);
        Debug.Log("Original pos:" + mainCamera.position);

        originalCameraPosition = mainCamera.position;
        originalUpVector       = mainCamera.up;
    }
Ejemplo n.º 27
0
    // Update is called once per frame
    void Update()
    {
        if (!IsGrounded || !IsIkActivated)
        {
            return;
        }
        RaycastHit hit;
        Ray        left_ray = new Ray(LeftLeg.position, new Vector3(0f, -10f, 0f));

        _TerrainCollider.Raycast(left_ray, out hit, 10);
        Base.transform.Translate(new Vector3(0, 0, -0.005f), Space.Self);

        /*if (hit.collider != null)
         * {
         *  LeftLeg.position = hit.point + new Vector3(0, 0.1f, 0);
         * }*/


        //_TerrainData.GetInterpolatedNormal()
    }
    // This is a method that returns a point on the terrain that has been selected with the mouse when pressing a certain key
    public Vector3 GetTerrainCollisionInEditor(Event currentEvent, KeyCode keysCode)
    {
        Vector3 returnCollision = new Vector3();

        AttachedRiverScript riverScript = (AttachedRiverScript)target as AttachedRiverScript;

        Camera SceneCameraReceptor = new Camera();

        GameObject      terrain      = riverScript.parentTerrain;
        Terrain         terComponent = (Terrain)terrain.GetComponent(typeof(Terrain));
        TerrainCollider terCollider  = (TerrainCollider)terrain.GetComponent(typeof(TerrainCollider));
        TerrainData     terData      = terComponent.terrainData;

        Ray terrainRay = new Ray();

        if (Camera.current != null)
        {
            SceneCameraReceptor = Camera.current;

            RaycastHit raycastHit = new RaycastHit();

            Vector2 newMousePosition = new Vector2(currentEvent.mousePosition.x, Screen.height - (currentEvent.mousePosition.y + 25));

            terrainRay = SceneCameraReceptor.ScreenPointToRay(newMousePosition);

            if (terCollider.Raycast(terrainRay, out raycastHit, Mathf.Infinity))
            {
                returnCollision   = raycastHit.point;
                returnCollision.x = Mathf.RoundToInt((returnCollision.x / terData.size.x) * terData.heightmapResolution);
                returnCollision.y = returnCollision.y / terData.size.y;
                returnCollision.z = Mathf.RoundToInt((returnCollision.z / terData.size.z) * terData.heightmapResolution);
            }

            else
            {
                Debug.LogError("Error: No collision with terrain to create node");
            }
        }

        return(returnCollision);
    }
Ejemplo n.º 29
0
    public void CloseRiver()
    {
        MeshFilter meshFilter = (MeshFilter)riverObject.GetComponent(typeof(MeshFilter));
        Mesh       newMesh    = meshFilter.sharedMesh;

        Vector3[]       newVertices = newMesh.vertices;
        TerrainCollider terCollider = (TerrainCollider)terrainObject.GetComponent(typeof(TerrainCollider));

        for (int i = 0; i < newVertices.Length; i++)
        {
            Ray        riverRay   = new Ray(new Vector3(newVertices[i].x, newVertices[i].y + transform.position.y, newVertices[i].z), -Vector3.up);
            RaycastHit raycastHit = new RaycastHit();

            if (terCollider.Raycast(riverRay, out raycastHit, Mathf.Infinity))
            {
                newVertices[i].y = (raycastHit.point.y - 1.0f) - transform.position.y;
            }
        }

        newMesh.vertices = newVertices;
    }
Ejemplo n.º 30
0
 // Token: 0x06005BFE RID: 23550 RVA: 0x00201E88 File Offset: 0x00200288
 private void DoClick(object sender, ClickedEventArgs e)
 {
     if (this.teleportOnClick)
     {
         Transform reference = this.reference;
         if (reference == null)
         {
             return;
         }
         float y     = reference.position.y;
         Plane plane = new Plane(Vector3.up, -y);
         Ray   ray   = new Ray(base.transform.position, base.transform.forward);
         float d     = 0f;
         bool  flag;
         if (this.teleportType == SteamVR_Teleporter.TeleportType.TeleportTypeUseTerrain)
         {
             TerrainCollider component = Terrain.activeTerrain.GetComponent <TerrainCollider>();
             RaycastHit      raycastHit;
             flag = component.Raycast(ray, out raycastHit, 1000f);
             d    = raycastHit.distance;
         }
         else if (this.teleportType == SteamVR_Teleporter.TeleportType.TeleportTypeUseCollider)
         {
             RaycastHit raycastHit2;
             flag = Physics.Raycast(ray, out raycastHit2);
             d    = raycastHit2.distance;
         }
         else
         {
             flag = plane.Raycast(ray, out d);
         }
         if (flag)
         {
             Vector3 b = new Vector3(SteamVR_Render.Top().head.position.x, y, SteamVR_Render.Top().head.position.z);
             reference.position = reference.position + (ray.origin + ray.direction * d) - b;
         }
     }
 }