iso rect experiment

This commit is contained in:
2015-08-29 23:29:13 +06:00
parent 41574c293a
commit 8d7f4e0093
4 changed files with 216 additions and 2 deletions

View File

@@ -166,6 +166,7 @@ namespace IsoTools {
public class InternalState {
public bool Dirty = false;
public bool Visited = false;
public Rect IsoRect = new Rect();
public Bounds Bounds3d = new Bounds();
public float Offset3d = 0.0f;
public Vector3 MinSector = Vector3.zero;
@@ -227,6 +228,7 @@ namespace IsoTools {
transform.position = IsoUtils.Vec3ChangeZ(
isoWorld.IsoToScreen(position),
transform.position.z);
FixInternalIsoRect();
}
FixLastProperties();
MartDirtyIsoWorld();
@@ -240,6 +242,16 @@ namespace IsoTools {
}
}
void FixInternalIsoRect() {
if ( isoWorld ) {
var l = isoWorld.IsoToScreen(position + IsoUtils.Vec3FromY(size.y)).x;
var r = isoWorld.IsoToScreen(position + IsoUtils.Vec3FromX(size.x)).x;
var b = isoWorld.IsoToScreen(position).y;
var t = isoWorld.IsoToScreen(position + size).y;
Internal.IsoRect = new Rect(l, t, r - l, t - b);
}
}
void FixLastProperties() {
#if UNITY_EDITOR
_lastSize = size;
@@ -299,6 +311,7 @@ namespace IsoTools {
void OnDrawGizmos() {
if ( isShowBounds && isoWorld ) {
IsoUtils.DrawCube(isoWorld, position + size * 0.5f, size, Color.red);
IsoUtils.DrawRect(isoWorld, Internal.IsoRect, transform.position.z, Color.green);
}
}

View File

@@ -454,6 +454,22 @@ namespace IsoTools {
radius * iso_world.tileSize * 2.0f);
}
}
public static void DrawRect(IsoWorld iso_world, Rect rect, float z, Color color) {
if ( iso_world ) {
Handles.color = color;
var points = new Vector3[]{
new Vector3(rect.x, rect.y, z),
new Vector3(rect.x, rect.y + rect.height, z),
new Vector3(rect.x + rect.width, rect.y + rect.height, z),
new Vector3(rect.x + rect.width, rect.y, z)
};
Handles.DrawLine(points[0], points[1]);
Handles.DrawLine(points[1], points[2]);
Handles.DrawLine(points[2], points[3]);
Handles.DrawLine(points[3], points[0]);
}
}
#endif
}
}

View File

@@ -140,6 +140,7 @@ namespace IsoTools {
}
public void RemoveIsoObject(IsoObject iso_object) {
ClearIsoObjectDepends(iso_object);
_objects.Remove(iso_object);
_visibles.Remove(iso_object);
_oldVisibles.Remove(iso_object);
@@ -236,7 +237,9 @@ namespace IsoTools {
}
bool IsIsoObjectDepends(IsoObject a, IsoObject b) {
return IsIsoObjectDepends(a.position, a.size, b.position, b.size);
return
a.Internal.IsoRect.Overlaps(b.Internal.IsoRect) &&
IsIsoObjectDepends(a.position, a.size, b.position, b.size);
}
int SectorIndex(Vector3 num_pos) {