void OnDrawGizmos() { if (Application.isPlaying && Application.isEditor) { Color origColor = Gizmos.color; if (basicTankInfoDebugOn) { Tank aiTank = CombatHandler.Instance.AITankController.SelfTank; WeaponPart part = aiTank.Hull.GetAllWeapons()[0]; Gizmos.color = Color.red; Gizmos.DrawLine( part.CalculateFirePos(), part.CalculateFirePos() + part.CalculateFireVec() * 50f); Gizmos.color = Color.green; Gizmos.DrawLine( aiTank.transform.position, (Vector2)aiTank.transform.position + aiTank.GetForwardVec() * 50f); Gizmos.color = Color.blue; Gizmos.DrawLine( aiTank.transform.position, (Vector2)aiTank.transform.position + aiTank.GetBackwardVec() * 50f); } if (moveTestDebugOn) { Gizmos.color = Color.green; Gizmos.DrawWireSphere(targetPosForMoveTest, 20); } if (actuationDebugOn) { Tank aiTank = CombatHandler.Instance.AITankController.SelfTank; object obj = getRegisterdObj("actuation_arc_vectors"); if (obj != null) { List <Vector2> arcVectors = (List <Vector2>)obj; Gizmos.color = Color.green; Gizmos.DrawLine(aiTank.transform.position, aiTank.transform.position + (Vector3)arcVectors[0] * 50f); Gizmos.DrawLine(aiTank.transform.position, aiTank.transform.position + (Vector3)arcVectors[1] * 50f); Gizmos.color = Color.blue; Gizmos.DrawLine(aiTank.transform.position, aiTank.transform.position + (Vector3)arcVectors[2] * 50f); Gizmos.DrawLine(aiTank.transform.position, aiTank.transform.position + (Vector3)arcVectors[3] * 50f); } Vector2 size = aiTank.Hull.Schematic.Size; Vector2 forwardVec = aiTank.GetForwardVec(); Vector2 leftVec = forwardVec.Rotate(90); Vector2 rightVec = forwardVec.Rotate(-90); Vector3 leftWheelPos = (Vector2)aiTank.transform.position + leftVec * size.x / 2f; Vector3 rightWheelPos = (Vector2)aiTank.transform.position + rightVec * size.x / 2f; Gizmos.color = Color.magenta; Gizmos.DrawLine(leftWheelPos, leftWheelPos + ((Vector3)forwardVec * 100 * aiTank.Hull.LeftCurPower)); Gizmos.DrawLine(rightWheelPos, rightWheelPos + ((Vector3)forwardVec * 100 * aiTank.Hull.RightCurPower)); } Goal curGoal = (Goal)getRegisterdObj("goal"); if (mapDisplayDebugOn) { // Draw Map Map map = CombatHandler.Instance.AITankController.Map; for (int x = 0; x < map.Cols; ++x) { for (int y = 0; y < map.Rows; ++y) { bool blocked = !map.GetNodeAtIdx(x, y).NodeTraversable(); Vector2 pos = map.IdxToPosition(x, y); Gizmos.color = !blocked ? Color.green : Color.red; Gizmos.DrawWireCube(pos, new Vector3(map.TileDim, map.TileDim, map.TileDim)); } } } if (maneuverGoalDebugOn && curGoal != null && curGoal.GetType() == typeof(ManeuverGoal)) { if (maneuverCurMoveDir) { object obj = getRegisterdObj("maneuver_move_dir"); if (obj != null) { Vector2 vec = (Vector2)obj; Tank aiTank = CombatHandler.Instance.AITankController.SelfTank; Gizmos.color = Color.green; Gizmos.DrawLine(aiTank.transform.position, (Vector2)aiTank.transform.position + vec.normalized * 50f); } } if (maneuverNodesAtSearchTime) { object obj = getRegisterdObj("maneuver_nodes_at_searchtime"); if (obj != null) { List <LookaheadNode> nodeList = (List <LookaheadNode>)obj; Gizmos.color = Color.green; foreach (LookaheadNode node in nodeList) { Gizmos.DrawWireSphere(node.TankInfo.Pos, 20); } } } if (maneuverPathNotObstructedFilter) { object obj = getRegisterdObj("maneuver_path_unobstructed_filter"); if (obj != null) { List <LookaheadNode> nodeList = (List <LookaheadNode>)obj; Gizmos.color = Color.green; foreach (LookaheadNode node in nodeList) { Gizmos.DrawWireSphere(node.TankInfo.Pos, 20); } } } if (maneuverDestNotObstructedFilter) { object obj = getRegisterdObj("maneuver_dest_not_obstructed_filter"); if (obj != null) { List <LookaheadNode> nodeList = (List <LookaheadNode>)obj; Gizmos.color = Color.green; foreach (LookaheadNode node in nodeList) { Gizmos.DrawWireSphere(node.TankInfo.Pos, 20); } } } if (maneuverBulletFilter) { object obj = getRegisterdObj("maneuver_bullet_filter"); if (obj != null) { List <LookaheadNode> nodeList = (List <LookaheadNode>)obj; Gizmos.color = Color.green; foreach (LookaheadNode node in nodeList) { Gizmos.DrawWireSphere(node.TankInfo.Pos, 20); } } } if (maneuverAwayFromWallFilter) { object obj = getRegisterdObj("maneuver_away_from_wall_filter"); if (obj != null) { List <LookaheadNode> nodeList = (List <LookaheadNode>)obj; Gizmos.color = Color.green; foreach (LookaheadNode node in nodeList) { Gizmos.DrawWireSphere(node.TankInfo.Pos, 20); } } } if (maneuverRunawayNodes) { object obj = getRegisterdObj("maneuver_runaway_cost_infos"); if (obj != null) { List <ManeuverGoal.CostInfo> infos = (List <ManeuverGoal.CostInfo>)obj; float maxCost = infos.Max(c => c.Cost); foreach (ManeuverGoal.CostInfo info in infos) { Gizmos.color = new Color(info.Cost / maxCost, 0, 1f - info.Cost / maxCost); Gizmos.DrawWireSphere(info.Node.TankInfo.Pos, 20); } } } if (maneuverGoingforItNode) { object obj = getRegisterdObj("maneuver_going_cost_infos"); if (obj != null) { List <ManeuverGoal.CostInfo> infos = (List <ManeuverGoal.CostInfo>)obj; float maxCost = infos.Max(c => c.Cost); foreach (ManeuverGoal.CostInfo info in infos) { Gizmos.color = new Color(info.Cost / maxCost, 0, 1f - info.Cost / maxCost); Gizmos.DrawWireSphere(info.Node.TankInfo.Pos, 20); } } } if (maneuverBestNode) { object obj = getRegisterdObj("maneuver_best_node"); if (obj != null) { LookaheadNode node = (LookaheadNode)obj; Gizmos.color = Color.green; Gizmos.DrawWireSphere(node.TankInfo.Pos, 20); } } } if (predictFutureDebugOn) { object obj = getRegisterdObj("test_future_pos_lis"); if (obj != null) { List <Vector2> posList = (List <Vector2>)obj; Gizmos.color = Color.green; foreach (Vector2 pos in posList) { Gizmos.DrawWireSphere(pos, 20); } } } if (displayAITankRange) { Tank tank = CombatHandler.Instance.AITankController.SelfTank; WeaponPart maxRangeWeapon = null; foreach (WeaponPart part in tank.Hull.GetAllWeapons()) { if (maxRangeWeapon == null || maxRangeWeapon.Schematic.Range < part.Schematic.Range) { maxRangeWeapon = part; } } Gizmos.color = Color.green; Gizmos.DrawWireSphere(tank.transform.position, maxRangeWeapon.Schematic.Range); } Gizmos.color = origColor; } }