Ejemplo n.º 1
0
 private float CalculateBracketAngle (
     float facing_deg, Vector avoid_bracket_dir_a, Vector avoid_bracket_dir_b,
     bool is_left, Limb limb
 ) {
     if (!limb.IsActiveBracket()) { return 0.0f; }
     Vector bracket_dir = Panel.GetBracketDirection(
         is_left,
         limb.main.IsUnknown() || limb.main.IsPassiveDown() ? -1 : limb.main.panel.index,
         limb.sub.IsUnknown() || limb.sub.IsPassiveDown() ? -1 : limb.sub.panel.index,
         limb.extra.IsUnknown() || limb.extra.IsPassiveDown() ? -1 : limb.extra.panel.index
     );
     if (facing_deg == 0.0f) {
         if (bracket_dir.dx == 1.0f && bracket_dir.dy == 0.0f) {
             return 0.0f;
         }
     } else if (facing_deg == 180.0f) {
         if (bracket_dir.dx == -1.0f && bracket_dir.dy == 0.0f) {
             return 0.0f;
         }
     }
     float alignment_a = (bracket_dir.dot(avoid_bracket_dir_a) + 1.0f) / 2.0f;
     float alignment_b = (bracket_dir.dot(avoid_bracket_dir_b) + 1.0f) / 2.0f;
     float alignment = alignment_a < alignment_b ?
         alignment_a : alignment_b;
     return BAD_BRACKET_DEGREE_COST * ExpInterpolate(alignment, BAD_BRACKET_DEGREE_EXP_CONST);
 }