mirror of
https://github.com/BlackMATov/unity-iso-tools.git
synced 2025-12-13 15:52:03 +07:00
micro optimizations
This commit is contained in:
@@ -167,7 +167,7 @@ namespace IsoTools.Internal {
|
|||||||
iso_object.Internal.ScreenBounds,
|
iso_object.Internal.ScreenBounds,
|
||||||
iso_object);
|
iso_object);
|
||||||
_minIsoXY = IsoUtils.Vec2Min(_minIsoXY, iso_object.position);
|
_minIsoXY = IsoUtils.Vec2Min(_minIsoXY, iso_object.position);
|
||||||
if ( !iso_object.Internal.Dirty && _curVisibles.Contains(iso_object) ) {
|
if ( !iso_object.Internal.Dirty ) {
|
||||||
iso_object.Internal.Dirty = true;
|
iso_object.Internal.Dirty = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -259,8 +259,8 @@ namespace IsoTools.Internal {
|
|||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
static void LookUpCellForLDepends(IsoObject obj_a, IsoObject obj_b) {
|
static void LookUpCellForLDepends(IsoObject obj_a, IsoObject obj_b) {
|
||||||
if ( obj_a != obj_b &&
|
if ( !obj_b.Internal.Dirty &&
|
||||||
!obj_b.Internal.Dirty &&
|
obj_a != obj_b &&
|
||||||
IsIsoObjectDepends(obj_a.position, obj_a.size, obj_b.position, obj_b.size) )
|
IsIsoObjectDepends(obj_a.position, obj_a.size, obj_b.position, obj_b.size) )
|
||||||
{
|
{
|
||||||
obj_a.Internal.SelfDepends.Add(obj_b);
|
obj_a.Internal.SelfDepends.Add(obj_b);
|
||||||
@@ -269,8 +269,8 @@ namespace IsoTools.Internal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void LookUpCellForRDepends(IsoObject obj_a, IsoObject obj_b) {
|
static void LookUpCellForRDepends(IsoObject obj_a, IsoObject obj_b) {
|
||||||
if ( obj_a != obj_b &&
|
if ( !obj_b.Internal.Dirty &&
|
||||||
!obj_b.Internal.Dirty &&
|
obj_a != obj_b &&
|
||||||
IsIsoObjectDepends(obj_b.position, obj_b.size, obj_a.position, obj_a.size) )
|
IsIsoObjectDepends(obj_b.position, obj_b.size, obj_a.position, obj_a.size) )
|
||||||
{
|
{
|
||||||
obj_b.Internal.SelfDepends.Add(obj_a);
|
obj_b.Internal.SelfDepends.Add(obj_a);
|
||||||
@@ -279,32 +279,56 @@ namespace IsoTools.Internal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool IsIsoObjectDepends(Vector3 a_min, Vector3 a_size, Vector3 b_min, Vector3 b_size) {
|
static bool IsIsoObjectDepends(Vector3 a_min, Vector3 a_size, Vector3 b_min, Vector3 b_size) {
|
||||||
var a_max = a_min + a_size;
|
//var a_max = a_min + a_size;
|
||||||
var b_max = b_min + b_size;
|
//var b_max = b_min + b_size;
|
||||||
var a_yesno = a_max.x > b_min.x && a_max.y > b_min.y && b_max.z > a_min.z;
|
|
||||||
if ( a_yesno ) {
|
|
||||||
var b_yesno = b_max.x > a_min.x && b_max.y > a_min.y && a_max.z > b_min.z;
|
|
||||||
if ( b_yesno ) {
|
|
||||||
|
|
||||||
|
var a_min_x = a_min.x;
|
||||||
|
var a_min_y = a_min.y;
|
||||||
|
var a_min_z = a_min.z;
|
||||||
|
|
||||||
|
var a_size_x = a_size.x;
|
||||||
|
var a_size_y = a_size.y;
|
||||||
|
var a_size_z = a_size.z;
|
||||||
|
|
||||||
|
var b_min_x = b_min.x;
|
||||||
|
var b_min_y = b_min.y;
|
||||||
|
var b_min_z = b_min.z;
|
||||||
|
|
||||||
|
var b_size_x = b_size.x;
|
||||||
|
var b_size_y = b_size.y;
|
||||||
|
var b_size_z = b_size.z;
|
||||||
|
|
||||||
|
var a_max_x = a_min_x + a_size_x;
|
||||||
|
var a_max_y = a_min_y + a_size_y;
|
||||||
|
var a_max_z = a_min_z + a_size_z;
|
||||||
|
|
||||||
|
var b_max_x = b_min_x + b_size_x;
|
||||||
|
var b_max_y = b_min_y + b_size_y;
|
||||||
|
var b_max_z = b_min_z + b_size_z;
|
||||||
|
|
||||||
|
var a_yesno = a_max_x > b_min_x && a_max_y > b_min_y && b_max_z > a_min_z;
|
||||||
|
if ( a_yesno ) {
|
||||||
|
var b_yesno = b_max_x > a_min_x && b_max_y > a_min_y && a_max_z > b_min_z;
|
||||||
|
if ( b_yesno ) {
|
||||||
//var da_p = new Vector3(a_max.x - b_min.x, a_max.y - b_min.y, b_max.z - a_min.z);
|
//var da_p = new Vector3(a_max.x - b_min.x, a_max.y - b_min.y, b_max.z - a_min.z);
|
||||||
//var db_p = new Vector3(b_max.x - a_min.x, b_max.y - a_min.y, a_max.z - b_min.z);
|
//var db_p = new Vector3(b_max.x - a_min.x, b_max.y - a_min.y, a_max.z - b_min.z);
|
||||||
//var dp_p = a_size + b_size - IsoUtils.Vec3Abs(da_p - db_p);
|
//var dp_p = a_size + b_size - IsoUtils.Vec3Abs(da_p - db_p);
|
||||||
|
|
||||||
var dA_x = a_max.x - b_min.x;
|
var dA_x = a_max_x - b_min_x;
|
||||||
var dA_y = a_max.y - b_min.y;
|
var dA_y = a_max_y - b_min_y;
|
||||||
var dA_z = b_max.z - a_min.z;
|
var dA_z = b_max_z - a_min_z;
|
||||||
|
|
||||||
var dB_x = b_max.x - a_min.x;
|
var dB_x = b_max_x - a_min_x;
|
||||||
var dB_y = b_max.y - a_min.y;
|
var dB_y = b_max_y - a_min_y;
|
||||||
var dB_z = a_max.z - b_min.z;
|
var dB_z = a_max_z - b_min_z;
|
||||||
|
|
||||||
var dD_x = dB_x - dA_x;
|
var dD_x = dB_x - dA_x;
|
||||||
var dD_y = dB_y - dA_y;
|
var dD_y = dB_y - dA_y;
|
||||||
var dD_z = dB_z - dA_z;
|
var dD_z = dB_z - dA_z;
|
||||||
|
|
||||||
var dP_x = a_size.x + b_size.x - (dD_x > 0.0f ? dD_x : -dD_x);
|
var dP_x = a_size_x + b_size_x - (dD_x < 0.0f ? -dD_x : dD_x);
|
||||||
var dP_y = a_size.y + b_size.y - (dD_y > 0.0f ? dD_y : -dD_y);
|
var dP_y = a_size_y + b_size_y - (dD_y < 0.0f ? -dD_y : dD_y);
|
||||||
var dP_z = a_size.z + b_size.z - (dD_z > 0.0f ? dD_z : -dD_z);
|
var dP_z = a_size_z + b_size_z - (dD_z < 0.0f ? -dD_z : dD_z);
|
||||||
|
|
||||||
if ( dP_x <= dP_y && dP_x <= dP_z ) {
|
if ( dP_x <= dP_y && dP_x <= dP_z ) {
|
||||||
return dA_x > dB_x;
|
return dA_x > dB_x;
|
||||||
|
|||||||
@@ -74,11 +74,10 @@ namespace IsoTools.Internal {
|
|||||||
|
|
||||||
for ( int i = 0, e = cur_visibles.Count; i < e; ++i ) {
|
for ( int i = 0, e = cur_visibles.Count; i < e; ++i ) {
|
||||||
var iso_object = cur_visibles[i];
|
var iso_object = cur_visibles[i];
|
||||||
//TODO: remove `old_visibles.Contains`?
|
if ( iso_object.Internal.Dirty ) {
|
||||||
if ( iso_object.Internal.Dirty || !old_visibles.Contains(iso_object) ) {
|
|
||||||
mark_dirty = true;
|
|
||||||
screen_solver.SetupIsoObjectDepends(iso_object);
|
screen_solver.SetupIsoObjectDepends(iso_object);
|
||||||
iso_object.Internal.Dirty = false;
|
iso_object.Internal.Dirty = false;
|
||||||
|
mark_dirty = true;
|
||||||
}
|
}
|
||||||
if ( iso_object.mode == IsoObject.Mode.Mode3d ) {
|
if ( iso_object.mode == IsoObject.Mode.Mode3d ) {
|
||||||
if ( UpdateIsoObjectBounds3d(iso_object) ) {
|
if ( UpdateIsoObjectBounds3d(iso_object) ) {
|
||||||
@@ -90,8 +89,9 @@ namespace IsoTools.Internal {
|
|||||||
for ( int i = 0, e = old_visibles.Count; i < e; ++i ) {
|
for ( int i = 0, e = old_visibles.Count; i < e; ++i ) {
|
||||||
var iso_object = old_visibles[i];
|
var iso_object = old_visibles[i];
|
||||||
if ( !cur_visibles.Contains(iso_object) ) {
|
if ( !cur_visibles.Contains(iso_object) ) {
|
||||||
mark_dirty = true;
|
|
||||||
screen_solver.ClearIsoObjectDepends(iso_object);
|
screen_solver.ClearIsoObjectDepends(iso_object);
|
||||||
|
iso_object.Internal.Dirty = true;
|
||||||
|
mark_dirty = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -191,8 +191,8 @@ namespace IsoTools {
|
|||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
public class InternalState {
|
public class InternalState {
|
||||||
public bool Dirty = false;
|
public bool Dirty = true;
|
||||||
public bool Placed = false;
|
public bool Placed = true;
|
||||||
public IsoRect ScreenBounds = IsoRect.zero;
|
public IsoRect ScreenBounds = IsoRect.zero;
|
||||||
public IsoMinMax MinMax3d = IsoMinMax.zero;
|
public IsoMinMax MinMax3d = IsoMinMax.zero;
|
||||||
public float Offset3d = 0.0f;
|
public float Offset3d = 0.0f;
|
||||||
|
|||||||
Reference in New Issue
Block a user