Example #1
0
 /// <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);
 }
Example #2
0
        // 敵までの距離を計る
        // 移動力を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);
        }