public CircleCollisionData(CircleCollisionSetting setting) { Data = new List <ColliderWrapper>(); _wrapperDictionary = new Dictionary <ICircleCollider, ColliderWrapper>(); UpdateSetting(setting); }
public void UpdateSetting(CircleCollisionSetting setting) { Setting = setting; if (ZorderInfo == null || ZorderInfo.Length != setting.MaxZOrder) { ZorderInfo = new IndexInfo[setting.MaxZOrder]; for (int i = 0; i < ZorderInfo.Length; i++) { ZorderInfo[i] = new IndexInfo(); } } }
public static int GetZOrder(ICircleCollider collider, CircleCollisionSetting setting) { Rectangle rect = setting.GetAreaRectangle(); int zorder = 0; for (int i = 0; i < setting.Depth; i++) { bool isCircleBigger = rect.Width <= collider.GetColliderRadius() * 2; bool isDepthMax = i == setting.Depth - 1; if (isCircleBigger || isDepthMax) { break; } Vector2 toCircle = collider.GetColliderCenter() - rect.Position; Vector2 nextCenter = rect.Position - rect.Size / 4; zorder *= 4; zorder += 1; if (toCircle.x >= 0) { zorder += 1; nextCenter.x += rect.Width / 2; } if (toCircle.y >= 0) { zorder += 2; nextCenter.y += rect.Height / 2; } rect.Position = nextCenter; rect.Size /= 2; } return(zorder); }
public void UpdateSetting(CircleCollisionSetting setting) { Data.UpdateSetting(setting); }
public CircleCollisionManager(CircleCollisionSetting setting) { Data = new CircleCollisionData(setting); Searcher = new CircleCollisionSearcher(Data); UpdateSetting(setting); }