Exemplo n.º 1
0
    /// <summary>
    /// creates a handle in left axis. return the delta movement on the isometric wEst axis.
    /// </summary>
    /// <param name="isoPosition"></param> the isometric position of our object. Pass the transform.position component
    /// <returns></returns>
    float handleY(Vector3 pos)
    {
        GUI.SetNextControlName("y");
        Handles.color = new Color(1.0f, 1.0f, 1.0f, 0.75f);
        var dir   = Isometric.isoProjection(Isometric.vectorToIsoDirection(IsoDirection.West));
        var delta = Handles.Slider(pos, dir);
        var d     = delta - pos;

        var res = d.magnitude * ((Math.Sign(d.x) == Math.Sign(dir.x)) ? 1 : -1);

        return(res);
    }
Exemplo n.º 2
0
    /// <summary>
    /// creates a handle in Up axis. return the delta movement on the isometric up axis.
    /// </summary>
    /// <param name="isoPosition"></param> the isometric position of our object
    /// <returns></returns>
    float handleZ(Vector3 isoPosition)
    {
        GUI.SetNextControlName("z");
        Handles.color = new Color(1.0f, 0.0f, 0.0f, 0.75f);
        var dir   = Isometric.isoProjection(Isometric.vectorToIsoDirection(IsoDirection.Up));
        var delta = Handles.Slider(isoPosition, dir);
        var d     = delta - isoPosition;

        var res = d.magnitude * ((Math.Sign(d.y) == Math.Sign(dir.y)) ? 1 : -1);

        return(res);
    }
Exemplo n.º 3
0
    public static void DrawWireCube(Vector3 position, Vector3 size)
    {
        var half = size / 2;

        // draw front
        Handles.DrawLine(Isometric.isoProjection(position + new Vector3(-half.x, -half.y, half.z)), Isometric.isoProjection(position + new Vector3(half.x, -half.y, half.z)));
        Handles.DrawLine(Isometric.isoProjection(position + new Vector3(-half.x, -half.y, half.z)), Isometric.isoProjection(position + new Vector3(-half.x, half.y, half.z)));
        Handles.DrawLine(Isometric.isoProjection(position + new Vector3(half.x, half.y, half.z)), Isometric.isoProjection(position + new Vector3(half.x, -half.y, half.z)));
        Handles.DrawLine(Isometric.isoProjection(position + new Vector3(half.x, half.y, half.z)), Isometric.isoProjection(position + new Vector3(-half.x, half.y, half.z)));
        // draw back
        Handles.DrawLine(Isometric.isoProjection(position + new Vector3(-half.x, -half.y, -half.z)), Isometric.isoProjection(position + new Vector3(half.x, -half.y, -half.z)));
        Handles.DrawLine(Isometric.isoProjection(position + new Vector3(-half.x, -half.y, -half.z)), Isometric.isoProjection(position + new Vector3(-half.x, half.y, -half.z)));
        Handles.DrawLine(Isometric.isoProjection(position + new Vector3(half.x, half.y, -half.z)), Isometric.isoProjection(position + new Vector3(half.x, -half.y, -half.z)));
        Handles.DrawLine(Isometric.isoProjection(position + new Vector3(half.x, half.y, -half.z)), Isometric.isoProjection(position + new Vector3(-half.x, half.y, -half.z)));
        // draw corners
        Handles.DrawLine(Isometric.isoProjection(position + new Vector3(-half.x, -half.y, -half.z)), Isometric.isoProjection(position + new Vector3(-half.x, -half.y, half.z)));
        Handles.DrawLine(Isometric.isoProjection(position + new Vector3(half.x, -half.y, -half.z)), Isometric.isoProjection(position + new Vector3(half.x, -half.y, half.z)));
        Handles.DrawLine(Isometric.isoProjection(position + new Vector3(-half.x, half.y, -half.z)), Isometric.isoProjection(position + new Vector3(-half.x, half.y, half.z)));
        Handles.DrawLine(Isometric.isoProjection(position + new Vector3(half.x, half.y, -half.z)), Isometric.isoProjection(position + new Vector3(half.x, half.y, half.z)));
    }
Exemplo n.º 4
0
    void OnSceneGUI()
    {
        //calc the custom handle position in sceneview
        var isoHandlePos = Isometric.isoProjection(center);
        var t            = (IsoObject)target;


        if (GUI.changed)
        {
            centerNeedsUpdate = true;
        }
        var x = 0f;
        var y = 0f;
        var z = 0f;

        //Get deltas for (north, up, west)
        try {
            x = handleX(isoHandlePos);
            y = handleY(isoHandlePos);
            z = handleZ(isoHandlePos);
        } catch (ArithmeticException) {
        }


        //snaps the target to closest multiple
        if (IsoSnapping.doSnap)
        {
            Vector3 vec = IsoSnapping.Ceil(new Vector3(x, y, z));
            x = vec.x;
            y = vec.y;
            z = vec.z;
        }

        if (Event.current.shift)
        {
            x *= 0.1f;
            y *= 0.1f;
            z *= 0.1f;
        }

        if (t.displayBounds)
        {
            DrawWireCube(t.Position, t.Size);
        }

        switch (GUI.GetNameOfFocusedControl())
        {
        case "x":
            delta = new Vector3(x, 0, 0);
            break;

        case "y":
            delta = new Vector3(0, y, 0);
            break;

        case "z":
            delta = new Vector3(0, 0, z);
            break;

        default:
            break;
        }
        t.Position += delta;

        EditorUtility.SetDirty(t);
    }
Exemplo n.º 5
0
 void OnDrawGizmos()
 {
     Gizmos.color = Color.yellow;
     Gizmos.DrawSphere(Isometric.isoProjection(obj.Position), .3f);
 }
 void OnDrawGizmos()
 {
     Gizmos.color = Color.red;
     Gizmos.DrawRay(transform.position, Isometric.isoProjection(Isometric.vectorToIsoDirection(currentForwardDirection)));
 }