/// <summary> /// 该方法主要防止切换状态造成的闪烁 /// </summary> /// <param name="status0"></param> /// <param name="status1"></param> /// <returns></returns> private static bool IsRepeatAnmimation(RangeStatus status0, RangeStatus status1) { if (status0 == status1) { return(true); } if (status0 == RangeStatus.Focus && status1 == RangeStatus.FixedFocus) { return(true); } if (status0 == RangeStatus.FixedFocus && status1 == RangeStatus.Focus) { return(true); } return(false); }
// 敵までの距離を計る // 移動力を100扱いにして、最短距離、平均距離を計算していく // is_friendsで味方の距離と敵の距離どちらか選択できる(中立や第三勢力は不可) RangeStatus CalcRangeStatus(int map_x, int map_y, bool is_friends) { var rs = new RangeStatus(); rs.map_x = map_x; rs.map_y = map_y; rs.evaluation_min = -1; rs.evaluation_avg = 0; rs.evaluation_num = 0; var game_main = GameMain.GetInstance(); var g3d_map = game_main.g3d_map; var unit_manager = game_main.unit_manager; const int movement_force = 100; move_area.is_range_only = true; move_area.Check(map_x, map_y, movement_force, select_unit.bt.status["JUMP"].now); move_area.is_range_only = false; foreach (var um in unit_manager.units) { if (!um.unit.bt.is_alive) { continue; } if (is_friends == (select_unit_group == um.group)) { // その座標までの距離を取得 var i = um.unit.map_x + um.unit.map_y * move_area.map_w; var range = move_area.squares[i].step_count; // Console.WriteLine("\t range {0}", range); if (range > 0) { if (rs.evaluation_num == 0 || range < rs.evaluation_min) { rs.evaluation_min = range; } rs.evaluation_num++; rs.evaluation_avg += range; } } } rs.evaluation_avg = rs.evaluation_avg / rs.evaluation_num; return(rs); }