Fixed axis slope calculation to be based on tile width/height as it

should be.  Made tile coordinate painting be centered within tile and
spaced based on actual font dimensions.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@146 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Walter Korman
2001-08-02 05:08:23 +00:00
parent 0bdda14562
commit 499646fe94
2 changed files with 35 additions and 22 deletions
@@ -1,5 +1,5 @@
//
// $Id: IsoSceneView.java,v 1.20 2001/08/02 00:42:02 shaper Exp $
// $Id: IsoSceneView.java,v 1.21 2001/08/02 05:08:23 shaper Exp $
package com.threerings.miso.scene;
@@ -20,10 +20,11 @@ import java.util.ArrayList;
public class IsoSceneView implements EditableSceneView
{
/**
* Construct an IsoSceneView object and initialize it with the
* given tile manager.
* Construct an IsoSceneView object.
*
* @param tilemgr the tile manager.
* @param spritemgr the sprite manager.
* @param model the data model.
*/
public IsoSceneView (TileManager tilemgr, SpriteManager spritemgr,
IsoSceneModel model)
@@ -207,12 +208,21 @@ public class IsoSceneView implements EditableSceneView
*/
protected void paintCoords (Graphics2D gfx, int x, int y, int sx, int sy)
{
FontMetrics fm = gfx.getFontMetrics(_font);
gfx.setFont(_font);
gfx.setColor(Color.white);
gfx.drawString("" + x, sx + _model.tilehwid - 2,
sy + _model.tilehhei - 2);
gfx.drawString("" + y, sx + _model.tilehwid - 2,
sy + _model.tilehei - 2);
int cx = _model.tilehwid, cy = _model.tilehhei;
int fhei = fm.getAscent();
// draw x-coordinate
String str = "" + x;
gfx.drawString(str, sx + cx - fm.stringWidth(str), sy + cy);
// draw y-coordinate
str = "" + y;
gfx.drawString(str, sx + cx - fm.stringWidth(str), sy + cy + fhei);
}
/**
@@ -310,12 +320,12 @@ public class IsoSceneView implements EditableSceneView
// calculate line parallel to the y-axis (from mouse pos to x-axis)
ly[0].setLocation(sx, sy);
int bY = (int)(sy - (_model.SLOPE_Y * sx));
int bY = (int)(sy - (_model.slopeY * sx));
// determine intersection of x- and y-axis lines
ly[1].x = (int)((bY - (_model.bX + _model.origin.y)) /
(_model.SLOPE_X - _model.SLOPE_Y));
ly[1].y = (int)((_model.SLOPE_Y * ly[1].x) + bY);
(_model.slopeX - _model.slopeY));
ly[1].y = (int)((_model.slopeY * ly[1].x) + bY);
// determine distance of mouse pos along the x axis
int xdist = (int) MathUtil.distance(
@@ -339,8 +349,8 @@ public class IsoSceneView implements EditableSceneView
*/
protected void tileToScreen (int x, int y, Point spos)
{
spos.x = _model.lineX[0].x + ((x - y - 1) * _model.tilehwid);
spos.y = _model.lineX[0].y + ((x + y) * _model.tilehhei);
spos.x = _model.origin.x + ((x - y - 1) * _model.tilehwid);
spos.y = _model.origin.y + ((x + y) * _model.tilehhei);
}
public void setScene (Scene scene)
@@ -1,11 +1,13 @@
//
// $Id: IsoSceneViewModel.java,v 1.1 2001/08/02 00:42:02 shaper Exp $
// $Id: IsoSceneViewModel.java,v 1.2 2001/08/02 05:08:23 shaper Exp $
package com.threerings.miso.scene;
import java.awt.Dimension;
import java.awt.Point;
import com.threerings.miso.Log;
/**
* The IsoSceneModel provides a holding place for the myriad
* parameters and bits of data that describe the details of an
@@ -36,6 +38,9 @@ public class IsoSceneModel
/** The y-intercept of the x-axis line. */
public int bX;
/** The slope of the x- and y-axis lines. */
public float slopeX, slopeY;
/** The last calculated x- and y-axis mouse position tracking lines. */
public Point lineX[], lineY[];
@@ -77,6 +82,10 @@ public class IsoSceneModel
// calculate the number of tile rows to render
tilerows = (Scene.TILE_WIDTH * Scene.TILE_HEIGHT) - 1;
// calculate the slope of the x- and y-axis lines
slopeX = (float)tilehei / (float)tilewid;
slopeY = -slopeX;
}
/**
@@ -131,16 +140,10 @@ public class IsoSceneModel
// determine the starting point
lineX[0].setLocation(origin.x, origin.y);
bX = (int)-(SLOPE_X * origin.x);
bX = (int)-(slopeX * origin.x);
// determine the ending point
lineX[1].x = lineX[0].x + (tilehwid * Scene.TILE_WIDTH);
lineX[1].y = lineX[0].y + (int)((SLOPE_X * lineX[1].x) + bX);
lineX[1].y = lineX[0].y + (int)((slopeX * lineX[1].x) + bX);
}
/** The slope of the x-axis line. */
protected final float SLOPE_X = 0.5f;
/** The slope of the y-axis line. */
protected final float SLOPE_Y = -0.5f;
}