示例#1
0
        private void TxtPositionMm_Validated(object sender, EventArgs e)
        {
            Ball b = MyMission.Instance().EnvRef.Balls[BallId];

            b.PositionMm.X = (int)Convert.ToSingle(TxtPositionMmX.Text);
            b.PositionMm.Z = (int)Convert.ToSingle(TxtPositionMmZ.Text);

            #region 设置的坐标数据合法性检查
            UrwpgSimHelper.ParametersCheckingBall(ref b);

            // 无论是否进行过数据修正都将保存的值往界面控件上重写一次
            TxtPositionMmX.Text = b.PositionMm.X.ToString();
            TxtPositionMmZ.Text = b.PositionMm.Z.ToString();
            #endregion
        }
示例#2
0
        /// <summary>
        /// 检查仿真方形障碍物的尺寸和位置参数合法性 若超出场地则调整到场地内
        /// </summary>
        /// <param name="obj">待检查尺寸和位置参数合法性的方形障碍物对象</param>
        public static void ParametersCheckingObstacle(ref RectangularObstacle obj)
        {
            Field f = Field.Instance();

            // 确保障碍物长度不超过场地X方向长度
            obj.LengthMm = (obj.LengthMm > f.FieldLengthXMm) ? f.FieldLengthXMm : obj.LengthMm;
            // 确保障碍物宽度不超过场地Z方向长度
            obj.WidthMm = (obj.WidthMm > f.FieldLengthZMm) ? f.FieldLengthZMm : obj.WidthMm;
            // 根据新的位置坐标和尺寸参数更新碰撞检测参数即4个顶点构成的列表
            obj.CalculateCollisionDetectionParas();
            int tmp  = 0;
            int minX = (int)UrwpgSimHelper.Min(obj.PolygonVertices[0].X, obj.PolygonVertices[1].X,
                                               obj.PolygonVertices[2].X, obj.PolygonVertices[3].X, ref tmp);

            if (minX < Field.Instance().LeftMm)
            {                                                       // 出了左边界
                obj.PositionMm.X += Field.Instance().LeftMm - minX; // 右移超出的距离
            }
            else
            {// 没出左边界
                int maxX = (int)UrwpgSimHelper.Max(obj.PolygonVertices[0].X, obj.PolygonVertices[1].X,
                                                   obj.PolygonVertices[2].X, obj.PolygonVertices[3].X, ref tmp);
                if (maxX > Field.Instance().RightMm)
                {                                                        // 出了右边界
                    obj.PositionMm.X -= maxX - Field.Instance().RightMm; // 左移超出的距离
                }
            }

            int minZ = (int)UrwpgSimHelper.Min(obj.PolygonVertices[0].Z, obj.PolygonVertices[1].Z,
                                               obj.PolygonVertices[2].Z, obj.PolygonVertices[3].Z, ref tmp);

            if (minZ < Field.Instance().TopMm)
            {                                                      // 出了上边界
                obj.PositionMm.Z += Field.Instance().TopMm - minZ; // 下移超出的距离
            }
            else
            {// 没出上边界
                int maxZ = (int)UrwpgSimHelper.Max(obj.PolygonVertices[0].Z, obj.PolygonVertices[1].Z,
                                                   obj.PolygonVertices[2].Z, obj.PolygonVertices[3].Z, ref tmp);
                if (maxZ > Field.Instance().BottomMm)
                {                                                         // 出了下边界
                    obj.PositionMm.Z -= maxZ - Field.Instance().BottomMm; // 上移超出的距离
                }
            }
        }
示例#3
0
        /// <summary>
        /// 检查仿真机器鱼的位置参数合法性 若超出场地则调整到场地内
        /// </summary>
        /// <param name="obj">待检查位置参数合法性的方形障碍物对象</param>
        public static void ParametersCheckingRoboFish(ref RoboFish obj)
        {
            Field f = Field.Instance();

            // 执行重绘动作更新当前仿真机器鱼的PolygonVertices值
            MyMission.Instance().IMissionRef.Draw();
            int tmp  = 0;
            int minX = (int)UrwpgSimHelper.Min(obj.PolygonVertices[0].X, obj.PolygonVertices[1].X,
                                               obj.PolygonVertices[2].X, obj.PolygonVertices[3].X, ref tmp);

            if (minX < Field.Instance().LeftMm)
            {                                                       // 出了左边界
                obj.PositionMm.X += Field.Instance().LeftMm - minX; // 右移超出的距离
            }
            else
            {// 没出左边界
                int maxX = (int)UrwpgSimHelper.Max(obj.PolygonVertices[0].X, obj.PolygonVertices[1].X,
                                                   obj.PolygonVertices[2].X, obj.PolygonVertices[3].X, ref tmp);
                if (maxX > Field.Instance().RightMm)
                {                                                        // 出了右边界
                    obj.PositionMm.X -= maxX - Field.Instance().RightMm; // 左移超出的距离
                }
            }

            int minZ = (int)UrwpgSimHelper.Min(obj.PolygonVertices[0].Z, obj.PolygonVertices[1].Z,
                                               obj.PolygonVertices[2].Z, obj.PolygonVertices[3].Z, ref tmp);

            if (minZ < Field.Instance().TopMm)
            {                                                      // 出了上边界
                obj.PositionMm.Z += Field.Instance().TopMm - minZ; // 下移超出的距离
            }
            else
            {// 没出上边界
                int maxZ = (int)UrwpgSimHelper.Max(obj.PolygonVertices[0].Z, obj.PolygonVertices[1].Z,
                                                   obj.PolygonVertices[2].Z, obj.PolygonVertices[3].Z, ref tmp);
                if (maxZ > Field.Instance().BottomMm)
                {                                                         // 出了下边界
                    obj.PositionMm.Z -= maxZ - Field.Instance().BottomMm; // 上移超出的距离
                }
            }
        }
示例#4
0
        private void BtnConfirm_Click(object sender, EventArgs e)
        {
            RoboFish f = MyMission.Instance().TeamsRef[TeamId].Fishes[CmbPlayers.SelectedIndex];

            //int flag = (MyMission.Instance().TeamsRef[TeamId].Para.MyHalfCourt == HalfCourt.RIGHT) ? -1 : 1;

            f.ColorFish = BtnFrontColor.BackColor;
            f.ColorId   = BtnBackColor.BackColor;

            f.PrePositionMm = f.PositionMm; // 保存移动前的坐标
            f.PositionMm.X  = (int)Convert.ToSingle(TxtPositionMmX.Text);
            f.PositionMm.Z  = (int)Convert.ToSingle(TxtPositionMmZ.Text);

            f.BodyDirectionRad     = xna.MathHelper.ToRadians(Convert.ToSingle(TxtDirectionDeg.Text));
            f.VelocityDirectionRad = f.BodyDirectionRad;

            #region 设置的坐标数据合法性检查
            UrwpgSimHelper.ParametersCheckingRoboFish(ref f);

            // 无论是否进行过数据修正都将保存的值往界面控件上重写一次
            TxtPositionMmX.Text = f.PositionMm.X.ToString();
            TxtPositionMmZ.Text = f.PositionMm.Z.ToString();
            #endregion
        }