public override void Active() { base.Active(); //TODO 更新コンテナに自分を入れる //DamageAreaの設置 startPosition = BezierStage.GetControllPointPosition(startPoint_LB[0], startPoint_LB[1] + 1); endPosition = BezierStage.GetControllPointPosition(startPoint_LB[0], startPoint_LB[1] + 7); Vector2 damageAreaRY = BezierStage.GetControllPointPosition(startPoint_LB[0], startPoint_LB[1] + 4); Vector2 damageAreaSize = new Vector2( endPosition.X - startPosition.X, damageAreaRY.Y - startPosition.Y); damageArea = new C_Collider_PointInHintArea("WastelandDamage", startPosition + damageAreaSize / 2, damageAreaSize); damageArea.Active(); TaskManager.AddTask(damageArea); //Route生成用エリアの設置 Vector2 createRouteAreaLT = BezierStage.GetControllPointPosition(startPoint_LB[0], startPoint_LB[1] + 1); Vector2 createRouteAreaRB = BezierStage.GetControllPointPosition(startPoint_LB[0], startPoint_LB[1] + 7); createRouteAreaLT.Y -= 50; Vector2 createRouteAreaSize = createRouteAreaRB - createRouteAreaLT; createRouteArea = new C_Collider_Square("CanCreateRoute", createRouteAreaLT + createRouteAreaSize / 2, createRouteAreaSize); createRouteArea.Active(); TaskManager.AddTask(createRouteArea); //ChildControll用エリア設置 C_Collider_PointInHintArea childJump1 = new C_Collider_PointInHintArea("ChildJump", startPosition, Vector2.One * 60); C_Collider_PointInHintArea childJump2 = new C_Collider_PointInHintArea("ChildJump", endPosition, Vector2.One * 60); childJump1.Active(); childJump2.Active(); TaskManager.AddTask(childJump1); TaskManager.AddTask(childJump2); stopRight = new C_Collider_PointInHintArea("ChildStopR", startPosition, Vector2.One * 100); stopLeft = new C_Collider_PointInHintArea("ChildStopL", endPosition, Vector2.One * 100); stopRight.Active(); stopLeft.Active(); TaskManager.AddTask(stopRight); TaskManager.AddTask(stopLeft); }
public static bool CircleSquare(C_Collider_Square square, C_Collider_Circle circle) { bool isCollide = false; for (int i = 0; i < square.points.Count; i++) { Vector2 centre = circle.centerPosition; float radius = circle.radius; int nextIndex = (int)Method.Warp(0, square.points.Count, i + 1); Vector2 thisPoint = square.points[i]; Vector2 nextPoint = square.points[nextIndex]; Vector2 normal = Vector2.Zero; isCollide = Method.CircleSegment(ref centre, radius, thisPoint, nextPoint, ref normal); if (isCollide) { return(isCollide); } } return(isCollide); }