Пример #1
0
 public void IncrementBrushRadius(int dir)
 {
     toolRadius += toolRadius * dir * radiusIncrementMultiplier;
     if (tool != null)
     {
         tool.OnBrushRadiusChange(toolRadius);
         tool.OnMouseScroll(dir * radiusIncrementMultiplier, hitdat, lastdt, toolRadius, placeablePrefab);
     }
 }
Пример #2
0
    private void Update()
    {
        RaycastHit hit;
        Ray        ray         = Camera.main.ScreenPointToRay(Input.mousePosition);
        bool       impact      = Physics.Raycast(ray.origin, ray.direction, out hit, 10000f, LayerMask.GetMask("TerrainFloor"));
        Vector2    terrainPos  = Vector2.zero;
        float      tHeight     = 0;
        Vector3    floorHitPos = Vector3.zero;

        if (impact)
        {
            floorHitPos = hit.point;
            Vector3 v3pos = hit.point - terrain.transform.position;
            v3pos.x   /= terrain.terrainData.size.x;
            v3pos.y   /= terrain.terrainData.size.y;
            v3pos.z   /= terrain.terrainData.size.z;
            terrainPos = new Vector2(v3pos.x * terrain.terrainData.heightmapWidth,
                                     v3pos.z * terrain.terrainData.heightmapHeight);

            targetCircle.gameObject.SetActive(true);
            tHeight = terrain.SampleHeight(hit.point);
            targetCircle.position    = new Vector3(hit.point.x, tHeight + targetCircleFloatHeight, hit.point.z);
            targetCircle.eulerAngles = Vector3.zero;
            targetCircle.localScale  = new Vector3(toolRadius * 2, 1, toolRadius * 2);
            if (toolRadius != prevRadius)
            {
                prevRadius = toolRadius;
                activeTool.OnBrushRadiusChange(toolRadius);
            }
        }
        else
        {
            targetCircle.gameObject.SetActive(false);
        }



        impact = Physics.Raycast(ray.origin, ray.direction, out hit, 10000f, LayerMask.GetMask("Terrain"));
        Vector3        terrainHitPoint = impact ? hit.point : Vector3.zero;
        TerrainHitData data            = new TerrainHitData();

        data.physicalHitPoint    = terrainHitPoint;
        data.terrain             = terrain;
        data.terrainHitPos       = terrainPos;
        data.heightAtFloorPos    = tHeight;
        data.floorHitPos         = floorHitPos;
        data.floorHitPlusTHeight = new Vector3(floorHitPos.x, terrain.SampleHeight(floorHitPos), floorHitPos.z);
        float dt = Time.deltaTime;

        if (activeTool != null && !EventSystem.current.IsPointerOverGameObject())
        {
            float scrollAmt = Input.GetAxis("Mouse ScrollWheel");
            if (scrollAmt != 0f)
            {
                toolRadius += toolRadius * scrollAmt * toolRadiusScrollMult;
                activeTool.OnMouseScroll(scrollAmt, data, dt, toolRadius, selectedObject);
            }

            #region MouseButtonCalls
            if (Input.GetMouseButtonDown(0))
            {
                activeTool.OnMouseDown(0, data, dt, toolRadius, selectedObject);
            }
            else if (Input.GetMouseButton(0))
            {
                activeTool.OnMouseHeld(0, data, dt, toolRadius, selectedObject);
            }
            else if (Input.GetMouseButtonUp(0))
            {
                activeTool.OnMouseUp(0, data, dt, toolRadius, selectedObject);
            }

            if (Input.GetMouseButtonDown(1))
            {
                activeTool.OnMouseDown(1, data, dt, toolRadius, selectedObject);
            }
            else if (Input.GetMouseButton(1))
            {
                activeTool.OnMouseHeld(1, data, dt, toolRadius, selectedObject);
            }
            else if (Input.GetMouseButtonUp(1))
            {
                activeTool.OnMouseUp(1, data, dt, toolRadius, selectedObject);
            }

            if (Input.GetMouseButtonDown(2))
            {
                activeTool.OnMouseDown(2, data, dt, toolRadius, selectedObject);
            }
            else if (Input.GetMouseButton(2))
            {
                activeTool.OnMouseHeld(2, data, dt, toolRadius, selectedObject);
            }
            else if (Input.GetMouseButtonUp(2))
            {
                activeTool.OnMouseUp(2, data, dt, toolRadius, selectedObject);
            }
            #endregion
        }

        if (Input.GetMouseButton(1))
        {
            Cursor.lockState       = CursorLockMode.Locked;
            transform.eulerAngles += Vector3.up * Input.GetAxis("Mouse X")
                                     * lookSensitivity;                          // * Time.deltaTime;
            xRotOffset           += -Input.GetAxis("Mouse Y") * lookSensitivity; // * Time.deltaTime;
            xRotOffset            = Mathf.Clamp(xRotOffset, -90f, 90f);
            transform.eulerAngles = new Vector3(xRotOffset, transform.eulerAngles.y, transform.eulerAngles.z);
        }
        else
        {
            Cursor.lockState = CursorLockMode.None;
        }

        transform.position += transform.forward * Input.GetAxis("ForeBack") * Time.deltaTime * moveSpeed
                              + transform.right * Input.GetAxis("Horizontal") * Time.deltaTime * moveSpeed
                              + transform.up * Input.GetAxis("Vertical") * Time.deltaTime * moveSpeed;

        activeTool.ToolUpdate(data, dt);
    }