Beispiel #1
0
 public RectangleD(RectangleD rec)
 {
     x = rec.x;
     y = rec.y;
     width = rec.width;
     height = rec.height;
 }
Beispiel #2
0
 public GuidedBomb(Fight scene, Hashtable parameters, RectangleD rect, int owner)
     : base(scene, parameters)
 {
     this.rect = rect;
     this.owner = owner;
     Initialize();
 }
Beispiel #3
0
 public static bool Intersect( RectangleD a, RectangleD b)
 {
     if (a.Left < b.Right && a.Right > b.Left && a.Top < b.Bottom && a.Bottom > b.Top)
     {
         return true;
     }
     return false;
 }
Beispiel #4
0
 public Shield(Fight scene, Hashtable parameters, RectangleD rect, int owner, DevType[] dev)
     : base(scene, parameters)
 {
     this.owner = owner;
     this.dev = dev;
     MakeModel("");
     RecVisible.Copy(rect);
     RecCollision = RecVisible;
 }
Beispiel #5
0
 public AttackArea(Fight scene, Hashtable parameters, RectangleD rect)
     : base(scene, parameters)
 {
     model.Add("model", new ModelInfo("", Vector3.Zero, RectangleD.Empty, 0, rect, Vector3.Zero, Vector3.Zero));
     normalRectangle = new RectangleD();
     normalRectangle.Copy(RecCollision);
     Object o = model["recCollision"];
     if (o != null)
     {
         mi = (ModelInfo)o;
         mi.emissiveColor = new Vector3(1, 0, 1);
     }
     force = Vector2.Zero;
     damage = 0;
     expandSpeedX = expandSpeedY = 0;
     w = rect.Width;
     h = rect.Height;
 }
Beispiel #6
0
        public static Object GetColState(RectangleD recMe, RectangleD recHe)
        {
            bool left = false, right = false, top = false, bottom = false;

            if (recMe.Equal(RectangleD.Empty) || recHe.Equal(RectangleD.Empty)) return null;

            // x軸方向に重なってるとき
            // topとbottomを調べる
            // Heightが正なら、topはbottomより小さい。
            if (recMe.Left < recHe.Right && recMe.Right > recHe.Left)
            {
                if (recHe.Top < recMe.Top && recMe.Top < recHe.Bottom)
                {
                    top = true;
                }
                if (recHe.Top < recMe.Bottom && recMe.Bottom < recHe.Bottom)
                {
                    bottom = true;
                }
            }

            // y軸方向に重なってるとき
            // leftとrightを調べる
            // Heightが正なら、topはbottomより小さい。
            if (recMe.Top < recHe.Bottom && recMe.Bottom > recHe.Top)
            {
                if (recHe.Left < recMe.Left && recMe.Left < recHe.Right)
                {
                    left = true;
                }
                if (recHe.Left < recMe.Right && recMe.Right < recHe.Right)
                {
                    right = true;
                }
            }

            if (top || bottom || left || right)
            {
                return new ColState(left, right, top, bottom);
            }

            return null;
        }
Beispiel #7
0
        public ParticleManager(Fight scene, string type, Vector2 pos)
            : base(scene, null)
        {
            RectangleD position = new RectangleD();
            position.Locate(pos);
            model.Add("model", new ModelInfo("", Vector3.Zero, RectangleD.Empty, 0, position, Vector3.Zero, Vector3.Zero));
            time = TimeSpan.Zero;
            Object o;

            switch (type)
            {
                case "ExplosionParticles":
                    particles = GLOBAL.explosionParticles;
                    break;
                case "DeadParticles":
                    particles = GLOBAL.deadParticles;
                    break;
                case "AttackedParticles":
                case "AbsorbParticles":
                    particles = GLOBAL.attackedParticles;
                    break;
                case "SmokeParticles":
                    particles = GLOBAL.smokeParticles;
                    break;
                default:
                    particles = GLOBAL.explosionParticles;
                    break;
            }

            o = scene.Parameters[type];
            if (o != null)
            {
                parameters = (Hashtable)o;
                cnt = int.Parse((o = parameters["cnt"]) != null ? (string)o : "30");
                aliveTime = double.Parse((o = parameters["aliveTime"]) != null ? (string)o : "1");
                z = double.Parse((o = parameters["z"]) != null ? (string)o : "2");
                dt = aliveTime / cnt;
                nextTime = 0;
            }
        }
Beispiel #8
0
        bool SphereSpecialBAnimation(GameTime gameTime)
        {
            #region 1.初期化
            if (sphereSBCnt <= 0 && time <= gameTime.ElapsedGameTime)
            {
                mi.recVisible.Copy(normalRectangle);
                mi.depth = 1;
                sphereSBCnt = 0;
                sphereSBDAngle = 360.0 / (double)sphereSBBomb.Length * (direction.X > 0 ? 1 : -1);
                sphereSBAngle = (direction.X > 0 ? 0 : 180);
                time = TimeSpan.FromSeconds(sphereSBTimeSpan);
                gage = 0;
            }

            #endregion

            #region 2.アニメーション

            double dt = gameTime.ElapsedGameTime.TotalSeconds;

            // Write your logic
            if (time >= TimeSpan.FromSeconds(sphereSBTimeSpan))
            {
                Object o = scene.Parameters["SpecialGuidedBomb"];
                if (o != null)
                {
                    double x = mi.recCollision.Center.X + sphereSBRad * Math.Cos(MathHelper.ToRadians((float)sphereSBAngle));
                    double y = mi.recCollision.Center.Y + sphereSBRad * Math.Sin(MathHelper.ToRadians((float)sphereSBAngle));
                    RectangleD rect = new RectangleD(x - 0.5, y - 0.5, 1, 1);
                    sphereSBBomb[sphereSBCnt] = new GuidedBomb(scene, (Hashtable)o, rect, player.id);
                    scene.EntityList.Add(sphereSBBomb[sphereSBCnt]);
                }
                sphereSBAngle += sphereSBDAngle;
                sphereSBCnt++;
                time = TimeSpan.Zero;
                Cue c = GLOBAL.soundBank.GetCue("B");
                c.Play();
            }

            if (sphereSBCnt >= sphereSBBomb.Length)
            {
                endAnimation = true;
            }

            #endregion

            #region 3、次のアニメーションへの遷移判定
            Animation prevAnim = anim;
            NextAnimation[] nextAnim = new NextAnimation[]{
                new NextAnimation(Animation.Dead,false,CheckDead,true),
                new NextAnimation(Animation.Attacked,false,CheckAttacked,true),
                new NextAnimation(Animation.Ground,false,CheckGround,endAnimation),
                new NextAnimation(Animation.Float,false,CheckFloat,endAnimation),
                new NextAnimation(Animation.Run,true,null,endAnimation),
                new NextAnimation(Animation.Walk,true,null,endAnimation),
                new NextAnimation(Animation.Stop,false,null,endAnimation),
                new NextAnimation(Animation.SpecialB,false,null,true),
            };

            anim = FindNextAnimation(nextAnim, gameTime);
            if (anim == Animation.None)
            {
                anim = prevAnim;
            }

            #endregion

            #region 4、アニメーションが遷移するときの処理
            if (anim != prevAnim)
            {
                commandFlg[(int)Animation.B] = false;
                commandFlg[(int)Animation.UpB] = false;
                commandFlg[(int)Animation.DownB] = false;
                commandFlg[(int)Animation.SpecialB] = false;
                sphereSBCnt = 0;
            }

            #endregion

            return true;
        }
Beispiel #9
0
        void Initialize()
        {
            character = new Character[2];
            character[0] = scene.Character1P;
            character[1] = scene.Character2P;

            Vector2 v = character[0].RecVisible.Center;
            v += character[1].RecVisible.Center;
            v.X *= 0.5f;
            v.Y *= 0.5f;
            cameraTarget = new Vector3(v, 0.0f);

            angle = double.Parse((string)(parameters["angle"]));

            fieldOfView = float.Parse((string)(parameters["fieldOfView"]));

            aspectRatio = (float)GLOBAL.game1.GraphicsDevice.Viewport.Width / GLOBAL.game1.GraphicsDevice.Viewport.Height;

            nearPlaneDistanse = float.Parse((string)(parameters["nearPlaneDistanse"]));

            farPlaneDistance = float.Parse((string)(parameters["farPlaneDistance"]));

            aliveZone = new RectangleD();

            Object o = scene.Parameters[scene.Stage];
            if ( o != null )
            {
                Hashtable param = (Hashtable)o;
                aliveZone.Y = double.Parse((o = param["aliveZoneY"]) != null ? (string)o : "0");
                aliveZone.Height = double.Parse((o = param["aliveZoneH"]) != null ? (string)o : "0");
                aliveZone.Width = aliveZone.Height * GLOBAL.WindowWidth / GLOBAL.WindowHeight;
                aliveZone.X = -0.5 * aliveZone.Width;
                param["aliveZoneW"] = "" + aliveZone.Width;
                param["aliveZoneX"] = "" + aliveZone.X;
            }

            minZ = float.Parse((string)(parameters["minZ"]));
            double t1 = fieldOfView * 0.5 - angle;
            double t2 = fieldOfView * 0.5 + angle;
            maxZ = aliveZone.Height / (Math.Tan(MathHelper.ToRadians((float)t1)) + Math.Tan(MathHelper.ToRadians((float)t2)));
            maxX = 0;
            maxY = aliveZone.Top3D - maxZ * Math.Tan((MathHelper.ToRadians((float)t1)));
            maxY = aliveZone.Bottom3D + maxZ * Math.Tan((MathHelper.ToRadians((float)t2)));

            cameraUpVector = new Vector3(
                float.Parse((string)(parameters["cameraUpVectorX"])),
                float.Parse((string)(parameters["cameraUpVectorY"])),
                float.Parse((string)(parameters["cameraUpVectorZ"]))
                );

            RectangleD rec1, rec2;
            rec1 = character[0].RecVisible;
            rec2 = character[1].RecVisible;

            // カメラのZ座標
            double t = Math.Max(Math.Abs(rec1.X - rec2.X) / aliveZone.Width, Math.Abs(rec1.Y - rec2.Y) / aliveZone.Height);
            double z = Math.Max(minZ, maxZ * 2 * t);

            // カメラの注視点と位置
            RectangleD rect3 = new RectangleD(
                aliveZone.X * (1 - t),
                aliveZone.Y * (1 - t) + t * maxY,
                aliveZone.Width * (1 - t),
                aliveZone.Height * (1 - t)
                );

            rect3 = RectangleD.ExtendRect(rect3, 2, 2);

            double dy = z * Math.Tan(MathHelper.ToRadians((float)angle));
            rect3.Offset(0, -dy);

            v = rec1.Center;
            v += rec2.Center;
            v.X *= 0.5f; v.X = (float)Math.Max(v.X, rect3.Left); v.X = (float)Math.Min(v.X, rect3.Right);
            v.Y *= 0.5f; v.Y = (float)Math.Max(v.Y, rect3.Bottom3D); v.Y = (float)Math.Min(v.Y, rect3.Top3D);
            Position = initTarget = new Vector3(v, 0.0f);
            Target = initPos = new Vector3(cameraTarget.X, cameraTarget.Y + (float)dy, (float)z);

            Flush();
        }
Beispiel #10
0
        /// <summary>
        /// r.Centerを起点として横にex, 縦にeyだけrを伸ばした矩形を返す
        /// </summary>
        /// <param name="r"></param>
        /// <param name="ex"></param>
        /// <param name="ey"></param>
        /// <returns></returns>
        public static RectangleD ExtendRect(RectangleD src, double ex, double ey, RectangleD dist = null)
        {
            double x, y, w, h;
            Vector2 v = src.Center;

            x = v.X - src.Width * 0.5 * ex;
            y = v.Y - src.Height * 0.5 * ey;
            w = src.Width * ex;
            h = src.Height * ey;

            if (dist != null)
            {
                dist.X = x;
                dist.Y = y;
                dist.Width = w;
                dist.Height = h;
            }

            return new RectangleD(x, y, w, h);
        }
Beispiel #11
0
        public Vector3 rotation, defaultRotation; // モデルの回転角度

        #endregion Fields

        #region Constructors

        public ModelInfo( string name, Vector3 originalSize, RectangleD recVisible, double depth, RectangleD recCollision, Vector3 rotation, Vector3 emissiveColor )
        {
            this.name = name;
            this.model = null;
            this.originalSize = originalSize;
            this.recVisible = recVisible;
            this.defaultRecVisible = new RectangleD(recVisible);
            this.depth = depth;
            this.defaultDepth = depth;
            this.recCollision = recCollision;
            this.defaultRecCollision = new RectangleD(recCollision);
            this.rotation = rotation;
            this.defaultRotation = new Vector3(rotation.X, rotation.Y, rotation.Z);
            this.emissiveColor = emissiveColor;
            this.defaultEmissiveColor = new Vector3(emissiveColor.X, emissiveColor.Y, emissiveColor.Z);
            this.addAlpha = -1;
            Load();
        }
Beispiel #12
0
        public override bool Update(GameTime gameTime)
        {
            RectangleD rec1, rec2;
            rec1 = character[0].RecVisible;
            rec2 = character[1].RecVisible;

            // カメラのZ座標
            double t = Math.Max(Math.Abs(rec1.X - rec2.X) / aliveZone.Width, Math.Abs(rec1.Y - rec2.Y) / aliveZone.Height);
            double z = Math.Max(minZ, maxZ * 2 * t);

            // カメラの注視点と位置
            RectangleD rect3 = new RectangleD(
                aliveZone.X * (1 - t),
                aliveZone.Y * (1 - t) + t * maxY,
                aliveZone.Width * (1 - t),
                aliveZone.Height * (1 -t)
                );

            rect3 = RectangleD.ExtendRect(rect3, 2,2);

            double dy = z * Math.Tan(MathHelper.ToRadians((float)angle));
            rect3.Offset(0, -dy);

            Vector2 v = rec1.Center;
            v += rec2.Center;
            v.X *= 0.5f; v.X = (float)Math.Max(v.X, rect3.Left); v.X = (float)Math.Min(v.X, rect3.Right);
            v.Y *= 0.5f; v.Y = (float)Math.Max(v.Y, rect3.Bottom3D); v.Y = (float)Math.Min(v.Y, rect3.Top3D);
            cameraTarget = new Vector3(v, 0.0f);

            cameraPosition = new Vector3(cameraTarget.X, cameraTarget.Y + (float)dy, (float)z);

            Flush();
            return true;
        }
Beispiel #13
0
        public void MakeModel(string paramName)
        {
            object o = null;
            if (paramName != "") paramName += "_";

            string name = (o = parameters[paramName + "name"]) != null ? (string)o :
                          (o = parameters["ModelDeadBlock"]) != null ? (string)o : "DeadBlock";
            Vector3 originalSize = new Vector3(
                float.Parse((o = parameters[paramName + "originalSizeX"]) != null ? (string)o : "200.0"),
                float.Parse((o = parameters[paramName + "originalSizeY"]) != null ? (string)o : "200.0"),
                float.Parse((o = parameters[paramName + "originalSizeZ"]) != null ? (string)o : "200.0")
                );
            RectangleD recVisible = new RectangleD(
                float.Parse((o = parameters[paramName + "recVisibleX"]) != null ? (string)o : "0.0"),
                float.Parse((o = parameters[paramName + "recVisibleY"]) != null ? (string)o : "0.0"),
                float.Parse((o = parameters[paramName + "recVisibleW"]) != null ? (string)o : "0.0"),
                float.Parse((o = parameters[paramName + "recVisibleH"]) != null ? (string)o : "0.0")
                );
            float depth = float.Parse((o = parameters[paramName + "depth"]) != null ? (string)o : "1.0");
            RectangleD recCollision = new RectangleD(
                float.Parse((o = parameters[paramName + "recCollisionX"]) != null ? (string)o : "0.0"),
                float.Parse((o = parameters[paramName + "recCollisionY"]) != null ? (string)o : "0.0"),
                float.Parse((o = parameters[paramName + "recCollisionW"]) != null ? (string)o : "0.0"),
                float.Parse((o = parameters[paramName + "recCollisionH"]) != null ? (string)o : "0.0")
                );
            Vector3 rotation = new Vector3(
                float.Parse((o = parameters[paramName + "rotationX"]) != null ? (string)o : "0.0"),
                float.Parse((o = parameters[paramName + "rotationY"]) != null ? (string)o : "0.0"),
                float.Parse((o = parameters[paramName + "rotationZ"]) != null ? (string)o : "0.0")
                );
            Vector3 emissiveColor = new Vector3(
                float.Parse((o = parameters[paramName + "emissiveColorX"]) != null ? (string)o : "1.0"),
                float.Parse((o = parameters[paramName + "emissiveColorY"]) != null ? (string)o : "1.0"),
                float.Parse((o = parameters[paramName + "emissiveColorZ"]) != null ? (string)o : "1.0")
                );
            model.Add("model", new ModelInfo(name, originalSize, recVisible, depth, recCollision, rotation, emissiveColor));
        }
Beispiel #14
0
 public void Copy(RectangleD rect)
 {
     x = rect.X;
     y = rect.Y;
     height = rect.Height;
     width = rect.Width;
 }
Beispiel #15
0
 /// <summary>
 /// 同じ矩形を表しているか(各要素が等しいか)
 /// </summary>
 /// <param name="he"></param>
 /// <returns></returns>
 public bool Equal(RectangleD he)
 {
     return X == he.X && Y == he.Y && Width == he.Width && Height == he.Height;
 }
Beispiel #16
0
        void InitializePrameters()
        {
            Object o = null;

            time = TimeSpan.Zero;
            input = GLOBAL.inputManager;

            // モデルの作成とパラメータの設定
            string ch = (player.character == CHARACTER.CUBE ? "ModelCube" : "ModelSphere");
            MakeModel(ch);

            string name = (o = parameters["DirectionIndicator_name"]) != null ? (string)o : "";
            Vector3 originalSize = new Vector3(
                float.Parse((o = parameters["DirectionIndicator_originalSizeX"]) != null ? (string)o : "0.0"),
                float.Parse((o = parameters["DirectionIndicator_originalSizeY"]) != null ? (string)o : "0.0"),
                float.Parse((o = parameters["DirectionIndicator_originalSizeZ"]) != null ? (string)o : "0.0")
                );
            RectangleD recVisible = new RectangleD(
                double.Parse((o = parameters["DirectionIndicator_recVisibleX"]) != null ? (string)o : "0.0"),
                double.Parse((o = parameters["DirectionIndicator_recVisibleY"]) != null ? (string)o : "0.0"),
                double.Parse((o = parameters["DirectionIndicator_recVisibleW"]) != null ? (string)o : "0.0"),
                double.Parse((o = parameters["DirectionIndicator_recVisibleH"]) != null ? (string)o : "0.0")
                );
            float depth = float.Parse((o = parameters["DirectionIndicator_depth"]) != null ? (string)o : "1.0");
            Vector3 rotation = Vector3.Zero;
            Vector3 emissiveColor;

            mi = ((ModelInfo)model["model"]);
            if (player.id == 0)
            {
                mi.emissiveColor = new Vector3(
                    float.Parse((o = parameters["1P_emissiveColorX"]) != null ? (string)o : "1.0"),
                    float.Parse((o = parameters["1P_emissiveColorY"]) != null ? (string)o : "1.0"),
                    float.Parse((o = parameters["1P_emissiveColorZ"]) != null ? (string)o : "1.0")
                    );
                mi.recVisible = new RectangleD(
                    double.Parse((o = parameters["1P_recVisibleX"]) != null ? (string)o : "0.0"),
                    double.Parse((o = parameters["1P_recVisibleY"]) != null ? (string)o : "0.0"),
                    double.Parse((o = parameters["1P_recVisibleW"]) != null ? (string)o : "0.0"),
                    double.Parse((o = parameters["1P_recVisibleH"]) != null ? (string)o : "0.0")
                );
                direction = new Vector3(1, 0, 0);
                rotation = new Vector3(0, 0, 0);
            }
            else
            {
                mi.emissiveColor = new Vector3(
                    float.Parse((o = parameters["2P_emissiveColorX"]) != null ? (string)o : "1.0"),
                    float.Parse((o = parameters["2P_emissiveColorY"]) != null ? (string)o : "1.0"),
                    float.Parse((o = parameters["2P_emissiveColorZ"]) != null ? (string)o : "1.0")
                    );
                mi.recVisible = new RectangleD(
                    double.Parse((o = parameters["2P_recVisibleX"]) != null ? (string)o : "0.0"),
                    double.Parse((o = parameters["2P_recVisibleY"]) != null ? (string)o : "0.0"),
                    double.Parse((o = parameters["2P_recVisibleW"]) != null ? (string)o : "0.0"),
                    double.Parse((o = parameters["2P_recVisibleH"]) != null ? (string)o : "0.0")
                );
                direction = new Vector3(-1, 0, 0);
                rotation = new Vector3(0, 180, 0);
            }

            mi.recCollision = mi.recVisible;
            recVisible.Offset(mi.recVisible.Center.X - recVisible.Center.X, 0);

            emissiveColor = mi.emissiveColor;

            model.Add("DirectionIndicator", new ModelInfo(name, originalSize, recVisible, depth, RectangleD.Empty, rotation, emissiveColor));

            dist = ((ModelInfo)model["DirectionIndicator"]).recVisible.Bottom3D - RecVisible.Top3D;

            normalRectangle = new RectangleD(mi.recVisible);

            cnt_ColStateWithAttacker = cnt_ColStateWithSolid = 0;
            MAX_COLSTATEWithAttacker = MAX_COLSTATEWithSolid = 60;
            colStateWithAttacker = new Hashtable[MAX_COLSTATEWithAttacker];
            colStateWithSolid = new Hashtable[MAX_COLSTATEWithSolid];

            MAX_ADJUSTTOHIST = 60;
            adjustToHist = new int[MAX_ADJUSTTOHIST];
            for (int i = 0; i < adjustToHist.Length; i++)
            {
                adjustToHist[i] = -1;
            }

            life = int.Parse((o = parameters["life"]) != null ? (string)o : "3");

            /*
             * ゲージ
             */
            gage = 0;
            gageV = double.Parse((o = parameters["gageV"]) != null ? (string)o : "1.0");
            MAX_GAGE = double.Parse((o = parameters["MAX_GAGE"]) != null ? (string)o : "100.0");

            /*
             * アニメーション
             */
            // 共通して使用する変数
            anim = Animation.Stop;
            velocity = Vector2.Zero;               // 速度
            endAnimation = false;      // アニメーションが終わったかどうかのフラグ
            tmpJumpFlg = 0;            // ジャンプフラグの退避用変数
            attackArea = null;   // 見えない攻撃範囲(通常攻撃などで使用)
            ex = ey = 1;      // 拡大率
            tmpVelocity = Vector2.Zero;            // 速度の退避用変数
            ox =  oy = 0;                  // 差分
            pileFlg = 0;                // スマッシュのアニメーションに使うフラグ
            maxPileTime = double.Parse((o = parameters["maxPileTime"]) != null ? (string)o : "3.0");             // ため時間の上限
            tmpEmissiveColor = Vector3.Zero;       // EmissiveColorの退避用変数

            // Stop
            stopAccel = double.Parse((o = parameters["stopAccel"]) != null ? (string)o : "1.0");         // 静止しようとする加速度

            // Walk
            maxWalkSpeed = double.Parse((o = parameters["maxWalkSpeed"]) != null ? (string)o : "1.0");  // 歩く速さの上限
            double peekTime = double.Parse((o = parameters["walkPeekTime"]) != null ? (string)o : "1.0");
            walkAccel = maxWalkSpeed / peekTime;            // 歩きの加速度

            // Run
            maxRunSpeed = double.Parse((o = parameters["maxRunSpeed"]) != null ? (string)o : "3.0");// 走りの加速度
            peekTime = double.Parse((o = parameters["runPeekTime"]) != null ? (string)o : "1.0");   // 走る速さの上限
            runAccel = maxRunSpeed / peekTime;

            // Jump
            jumpTime1 = double.Parse((o = parameters["jumpTime1"]) != null ? (string)o : "0");               // ジャンプの溜めの時間
            jumpA = double.Parse((o = parameters["jumpA"]) != null ? (string)o : "0");                   // ジャンプの溜めのときのモデル伸縮幅
            jumpFlg = 0;                    // 今、何段目のジャンプをしているか
            MAX_JUMP = int.Parse((o = parameters["MAX_JUMP"]) != null ? (string)o : "2");                   // 何段ジャンプが出来るか
            peekTime = double.Parse((o = parameters["jumpPeekTime1"]) != null ? (string)o : "1.0");
            double peekHeight = double.Parse((o = parameters["jumpPeekHeight1"]) != null ? (string)o : "1.0");
            jumpSpeed1 = 2 * peekHeight / peekTime;
            jumpSpeed = jumpSpeed1;
            gravity = jumpSpeed1 / peekTime;
            peekTime = double.Parse((o = parameters["jumpPeekTime2"]) != null ? (string)o : "1.0");
            peekHeight = double.Parse((o = parameters["jumpPeekHeight2"]) != null ? (string)o : "1.0");
            jumpSpeed2 = 2 * peekHeight / peekTime;
            maxJumpSpeedX = double.Parse((o = parameters["maxJumpSpeedX"]) != null ? (string)o : "3.0");

             // Float
            peekTime = double.Parse((o = parameters["slidePeekTime"]) != null ? (string)o : "1.0");
            maxSlideSpeed = double.Parse((o = parameters["maxSlideSpeed"]) != null ? (string)o : "1.0");
            slideAccel = maxSlideSpeed / peekTime;        // 浮遊時に横に動こうしたときの加速度
            maxFallSpeed = double.Parse((o = parameters["maxFallSpeed"]) != null ? (string)o : "1.0");
            fallAccel = gravity * double.Parse((o = parameters["fallAccel"]) != null ? (string)o : "1.0"); ;     // 高速落下しているときの落下スピード (gravityに対する比率で指定)
            floatRot = 0;            // 二段目以降のジャンプでの回転角度
            floatRotSpeed = double.Parse((o = parameters["floatRotSpeed"]) != null ? (string)o : "360.0"); ;     // 二段目以降のジャンプでの回転速度

            // Ground
            groundTime = double.Parse((o = parameters["groundTime"]) != null ? (string)o : "1");              // アニメーションの時間
            groundA = double.Parse((o = parameters["groundA"]) != null ? (string)o : "0.2");                 // 伸縮幅
            maxGroundSpeed = double.Parse((o = parameters["maxGroundSpeed"]) != null ? (string)o : "3");          // 横方向の最大速度
            groundAccel = double.Parse((o = parameters["groundAccel"]) != null ? (string)o : "1");             // 横方向の加速度

            // Climb
            climbRot = 0.0;                                                                                 // 回転角度。Degree
            climbRotSpeed = double.Parse((o = parameters["climbRotSpeed"]) != null ? (string)o : "1000.0"); // 回転速度。Degree

            // Sit
            sitTime = double.Parse((o = parameters["sitTime"]) != null ? (string)o : "0");                         // アニメーションの時間
            sitA = double.Parse((o = parameters["sitA"]) != null ? (string)o : "0");

            avoidGTime = double.Parse((o = parameters["avoidGTime"]) != null ? (string)o : "0");        // アニメーションの時間

            avoidRSpeed = double.Parse((o = parameters["avoidRSpeed"]) != null ? (string)o : "0");
            avoidRTime = double.Parse((o = parameters["avoidRTime"]) != null ? (string)o : "0");        // アニメーションの時間

            avoidSSpeed = double.Parse((o = parameters["avoidSSpeed"]) != null ? (string)o : "0");
            avoidSTime = double.Parse((o = parameters["avoidSTime"]) != null ? (string)o : "0");        // アニメーションの時間

            brownTime = double.Parse((o = parameters["brownTime"]) != null ? (string)o : "0");
            maxBrownTime = double.Parse((o = parameters["maxBrownTime"]) != null ? (string)o : "0");
            minBrownTime = double.Parse((o = parameters["minBrownTime"]) != null ? (string)o : "0");
            maxGetDamage = double.Parse((o = parameters["maxGetDamage"]) != null ? (string)o : "0"); ;
            maxBrownSpeed = double.Parse((o = parameters["maxBrownSpeed"]) != null ? (string)o : "0");     // 最大の吹っ飛び速度
            brownFallAccel = gravity * double.Parse((o = parameters["brownFallAccel"]) != null ? (string)o : "1");    // 下ボタンを押しているときの重力加速度
            brownSlideAccel = slideAccel * double.Parse((o = parameters["brownSlideAccel"]) != null ? (string)o : "1");   // 横ボタンを押しているときの横方向の加速度

            brownRotSpeed = 0;
            _brownRotSpeed = double.Parse((o = parameters["brownRotSpeed"]) != null ? (string)o : "0");
            brownRot = 0;

            breakFallSpeed = double.Parse((o = parameters["breakFallSpeed"]) != null ? (string)o : "0");    // 跳ね返りの速さ
            maxBreakFallSpeed = double.Parse((o = parameters["maxBreakFallSpeed"]) != null ? (string)o : "0"); // 衝突面と平行な方向の速度の最大値

            checkDownSpeedSquared = double.Parse((o = parameters["checkDownSpeedSquared"]) != null ? (string)o : "25");

            attackedTime = double.Parse((o = parameters["attackedTime"]) != null ? (string)o : "0.5");      // アニメーションの時間
            brownAngle = double.Parse((o = parameters["brownAngle"]) != null ? (string)o : "15");
            minAttackedRatio = double.Parse((o = parameters["minAttackedRatio"]) != null ? (string)o : "1");
            maxAttackedRatio = double.Parse((o = parameters["maxAttackedRatio"]) != null ? (string)o : "5");
            maxDamage = double.Parse((o = parameters["maxDamage"]) != null ? (string)o : "200");

            deadTime = double.Parse((o = parameters["deadTime"]) != null ? (string)o : "1.0");          // アニメーションの時間

            o = scene.Parameters[scene.Stage];
            if ( o != null )
            {
                Object o1;
                double y = double.Parse((o1 = ((Hashtable)o)["aliveZoneY"]) != null ? (string)o1 : "-100");
                double h = double.Parse((o1 = ((Hashtable)o)["aliveZoneH"]) != null ? (string)o1 : "200");
                double w = h * GLOBAL.WindowWidth / GLOBAL.WindowHeight;
                double x = -0.5 * w;

                aliveZone = new RectangleD(x, y, w, h);// この外に出れば死ぬ
                rebornPos = new Vector2(
                    float.Parse((o1 = ((Hashtable)o)["rebornPos" + player.id + "X"]) != null ? (string)o1 : "0"),
                    float.Parse((o1 = ((Hashtable)o)["rebornPos" + player.id + "Y"]) != null ? (string)o1 : "10")
                    );
            }
            else
            {
                aliveZone = RectangleD.Empty;
                rebornPos = Vector2.Zero;
            }

            ARot = 0;                // 回転角度
            ARotSpeed = double.Parse((o = parameters["ARotSpeed"]) != null ? (string)o : "360");       // 回転速度
            AeX = double.Parse((o = parameters["AeX"]) != null ? (string)o : "1.2");    // 攻撃範囲のRecCollisionに対する大きさ比率
            AeY = double.Parse((o = parameters["AeY"]) != null ? (string)o : "1.2");    // 攻撃範囲のRecCollisionに対する大きさ比率
            ADamage = double.Parse((o = parameters["ADamage"]) != null ? (string)o : "5");
            APower = double.Parse((o = parameters["APower"]) != null ? (string)o : "10");

            sideAeY = double.Parse((o = parameters["sideAeY"]) != null ? (string)o : "0.9");
            sideAeX = 1 / sideAeY / sideAeY;  // 攻撃範囲のRecCollisionに対する大きさ比率
            sideASpeed = double.Parse((o = parameters["sideASpeed"]) != null ? (string)o : "0");                              // 移動速度
            sideATime1 = double.Parse((o = parameters["sideATime1"]) != null ? (string)o : "1");                              // 伸びきるのにかかる時間
            sideAExtendSpeed = (sideAeX - 1) / sideATime1;                                                                          // 伸縮する速度
            sideATime2 = double.Parse((o = parameters["sideATime2"]) != null ? (string)o : "1");                              // 伸びきってから縮み始めるまでの時間
            sideATime3 = double.Parse((o = parameters["sideATime3"]) != null ? (string)o : "1");                              // 縮みきるのにかかる時間
            sideADamage = double.Parse((o = parameters["sideADamage"]) != null ? (string)o : "5");
            sideAPower = double.Parse((o = parameters["sideAPower"]) != null ? (string)o : "10");

            upAeX = double.Parse((o = parameters["upAeY"]) != null ? (string)o : "0.9");
            upAeY = 1 / upAeX / upAeX;                                                                              // 攻撃範囲のRecCollisionに対する大きさ比率
            upATime1 = double.Parse((o = parameters["upATime1"]) != null ? (string)o : "1");                                // 伸びきるのにかかる時間
            upAExtendSpeed = (upAeY - 1) / upATime1;                          // 伸縮する速度
            upATime2 = double.Parse((o = parameters["upATime2"]) != null ? (string)o : "1");                                // 伸びきってから縮み始めるまでの時間
            upATime3 = double.Parse((o = parameters["upATime3"]) != null ? (string)o : "1");                                // 縮みきるのにかかる時間
            upADamage = double.Parse((o = parameters["upADamage"]) != null ? (string)o : "5");
            upAPower = double.Parse((o = parameters["upAPower"]) != null ? (string)o : "10");

            downAeY = double.Parse((o = parameters["downAeY"]) != null ? (string)o : "0.9");
            downAeX = 1 / downAeY / downAeY;  // 攻撃範囲のRecCollisionに対する大きさ比率
            downATime1 = double.Parse((o = parameters["downATime1"]) != null ? (string)o : "1");                              // 伸びきるのにかかる時間
            downAExtendSpeed = (downAeX - 1) / downATime1;                                                                          // 伸縮する速度
            downATime2 = double.Parse((o = parameters["downATime2"]) != null ? (string)o : "1");                              // 伸びきってから縮み始めるまでの時間
            downATime3 = double.Parse((o = parameters["downATime3"]) != null ? (string)o : "1");                              // 縮みきるのにかかる時間
            downADamage = double.Parse((o = parameters["downADamage"]) != null ? (string)o : "5");
            downAPower = double.Parse((o = parameters["downAPower"]) != null ? (string)o : "10");

            sideSmashTimeRatio = double.Parse((o = parameters["sideSmashTimeRatio"]) != null ? (string)o : "1");               // ため終わった後のアニメーションの時間
            sideSmashRot = 0;                // 回転角度
            sideSmashRotSpeed = 0;           // 回転速度
            sideSmashRotAccel = double.Parse((o = parameters["sideSmashRotAccel"]) != null ? (string)o : "1");         // 回転加速度
            sideSmashRotSpeedRatio = double.Parse((o = parameters["sideSmashRotSpeedRatio"]) != null ? (string)o : "3");    // タメ時間に対する回転速度の比率
            sideSmashSpeed = 0;            // 移動速度
            sideSmashSpeedRatio = double.Parse((o = parameters["sideSmashSpeedRatio"]) != null ? (string)o : "3");       // タメ時間に対する移動速度の比率
            minSideSmashSpeed = double.Parse((o = parameters["minSideSmashSpeed"]) != null ? (string)o : "3");         // 移動速度の最小値
            maxSideSmashSpeed = double.Parse((o = parameters["maxSideSmashSpeed"]) != null ? (string)o : "10");        // 移動速度の最大値
            sideSmasheX = double.Parse((o = parameters["sideSmasheX"]) != null ? (string)o : "0");
            sideSmasheY = double.Parse((o = parameters["sideSmasheY"]) != null ? (string)o : "0");        // 攻撃範囲のRecCollisionに対する大きさ比率
            minSideSmashDamage = double.Parse((o = parameters["minSideSmashDamage"]) != null ? (string)o : "5");
            minSideSmashPower = double.Parse((o = parameters["minSideSmashPower"]) != null ? (string)o : "10");
            maxSideSmashDamage = double.Parse((o = parameters["maxSideSmashDamage"]) != null ? (string)o : "5");
            maxSideSmashPower = double.Parse((o = parameters["maxSideSmashPower"]) != null ? (string)o : "10");
            maxSideSmashTime = double.Parse((o = parameters["maxSideSmashTime"]) != null ? (string)o : "1");
            minSideSmashTime = double.Parse((o = parameters["minSideSmashTime"]) != null ? (string)o : "1");
            sideSmashTime = 0;

            upSmashTime = double.Parse((o = parameters["upSmashTime"]) != null ? (string)o : "1");               // ため終わった後のアニメーションの時間
            minUpSmashDamage = double.Parse((o = parameters["minUpSmashDamage"]) != null ? (string)o : "5");
            minUpSmashPower = double.Parse((o = parameters["minUpSmashPower"]) != null ? (string)o : "10");
            maxUpSmashDamage = double.Parse((o = parameters["maxUpSmashDamage"]) != null ? (string)o : "5");
            maxUpSmashPower = double.Parse((o = parameters["maxUpSmashPower"]) != null ? (string)o : "10");
            upSmashRot = 0;
            upSmashRotSpeed = 0;
            upSmashRotAccel = double.Parse((o = parameters["upSmashRotAccel"]) != null ? (string)o : "360");
            maxUpSmashTime = double.Parse((o = parameters["maxUpSmashTime"]) != null ? (string)o : "10");
            minUpSmashTime = double.Parse((o = parameters["minUpSmashTime"]) != null ? (string)o : "10");
            upSmashA = 0;
            upSmasheX = double.Parse((o = parameters["upSmasheX"]) != null ? (string)o : "1.2");
            upSmasheY = double.Parse((o = parameters["upSmasheY"]) != null ? (string)o : "1.2");
            maxUpSmashA = double.Parse((o = parameters["maxUpSmashA"]) != null ? (string)o : "10");
            upSmashExtendSpeed = double.Parse((o = parameters["upSmashExtendSpeed"]) != null ? (string)o : "10");

            downSmashTime = double.Parse((o = parameters["downSmashTime"]) != null ? (string)o : "1");               // ため終わった後のアニメーションの時間
            minDownSmashDamage = double.Parse((o = parameters["minDownSmashDamage"]) != null ? (string)o : "5");
            minDownSmashPower = double.Parse((o = parameters["minDownSmashPower"]) != null ? (string)o : "10");
            maxDownSmashDamage = double.Parse((o = parameters["maxDownSmashDamage"]) != null ? (string)o : "5");
            maxDownSmashPower = double.Parse((o = parameters["maxDownSmashPower"]) != null ? (string)o : "10");
            downSmashRot = 0;
            downSmashRotSpeed = 0;
            downSmashRotAccel = double.Parse((o = parameters["downSmashRotAccel"]) != null ? (string)o : "360");
            maxDownSmashTime = double.Parse((o = parameters["maxDownSmashTime"]) != null ? (string)o : "10");
            minDownSmashTime = double.Parse((o = parameters["minDownSmashTime"]) != null ? (string)o : "10");
            downSmashA = 0;
            downSmasheX = double.Parse((o = parameters["downSmasheX"]) != null ? (string)o : "1.2");
            downSmasheY = double.Parse((o = parameters["downSmasheY"]) != null ? (string)o : "1.2");
            maxDownSmashA = double.Parse((o = parameters["maxDownSmashA"]) != null ? (string)o : "10");
            downSmashExtendSpeed = double.Parse((o = parameters["downSmashExtendSpeed"]) != null ? (string)o : "10");

            cubeBBomb = new CubicBomb[int.Parse((o = parameters["cubeBNum"]) != null ? (string)o : "5")];
            sphereBBomb = new GuidedBomb[int.Parse((o = parameters["sphereBNum"]) != null ? (string)o : "5")];

            cubeUpBA = double.Parse((o = parameters["cubeUpBA"]) != null ? (string)o : "0.3");
            cubeUpBTime1 = double.Parse((o = parameters["cubeUpBTime1"]) != null ? (string)o : "0.2");
            peekHeight = double.Parse((o = parameters["cubeUpBPeekHeight"]) != null ? (string)o : "10");
            cubeUpBTime2 = double.Parse((o = parameters["cubeUpBTime2"]) != null ? (string)o : "10");
            cubeUpBSpeed1 = peekHeight / cubeUpBTime2;
            cubeUpBSpeed2 = jumpSpeed1 * double.Parse((o = parameters["cubeUpBSpeed2"]) != null ? (string)o : "0.7");
            cubeUpBTime3 = double.Parse((o = parameters["cubeUpBTime3"]) != null ? (string)o : "10");
            cubeUpBBottom3D = 0;
            cubeUpBBottom3D2 = 0;

            cubeDownBMaxFallSpeed = double.Parse((o = parameters["cubeDownBMaxFallSpeed"]) != null ? (string)o : "5");
            cubeDownBEmissiveColor =  new Vector3(
                    float.Parse((o = parameters["cubeDownBEmissiveColorX"]) != null ? (string)o : "5"),
                    float.Parse((o = parameters["cubeDownBEmissiveColorY"]) != null ? (string)o : "5"),
                    float.Parse((o = parameters["cubeDownBEmissiveColorZ"]) != null ? (string)o : "5")
                    );
            attackedAbsorb = false;

            int maxBomb = int.Parse((o = parameters["maxCubeSBBomb"]) != null ? (string)o : "10");
            cubeSBBomb = new CubicBomb[maxBomb];
            cubeSBCnt = 0;
            cubeSBRad = double.Parse((o = parameters["cubeSBRad"]) != null ? (string)o : "10");
            cubeSBAngle = 0;
            cubeSBDAngle = 0;
            cubeSBTimeSpan = double.Parse((o = parameters["cubeSBTimeSpan"]) != null ? (string)o : "10");

            maxBomb = int.Parse((o = parameters["maxSphereSBBomb"]) != null ? (string)o : "10");
            sphereSBBomb = new GuidedBomb[maxBomb];
            sphereSBCnt = 0;
            sphereSBRad = double.Parse((o = parameters["sphereSBRad"]) != null ? (string)o : "10");
            sphereSBAngle = 0;
            sphereSBDAngle = 0;
            sphereSBTimeSpan = double.Parse((o = parameters["sphereSBTimeSpan"]) != null ? (string)o : "10");
        }
Beispiel #17
0
        bool SphereBAnimation(GameTime gameTime)
        {
            #region 1.初期化

            if (time <= gameTime.ElapsedGameTime)
            {
                mi.recVisible.Copy(normalRectangle);
                mi.depth = 1;
                int i = 0;

                for (i = 0; i < sphereBBomb.Length; i++)
                {
                    if (sphereBBomb[i] == null)
                    {
                        break;
                    }
                }

                if (i < sphereBBomb.Length)
                {
                    Object o = scene.Parameters["GuidedBomb"];
                    if (o != null)
                    {
                        RectangleD rect = new RectangleD();
                        rect.Copy(normalRectangle);
                        if (direction.X > 0)
                        {
                            rect.X += 1.5;
                        }
                        else
                        {
                            rect.X -= 1.5;
                        }
                        sphereBBomb[i] = new GuidedBomb(scene, (Hashtable)o, rect, player.id);
                        sphereBBomb[i].Follow(this);
                        scene.EntityList.Add(sphereBBomb[i]);
                        Cue c = GLOBAL.soundBank.GetCue("B");
                        c.Play();
                    }
                }

            }

            #endregion

            #region 2.アニメーション

            double dt = gameTime.ElapsedGameTime.TotalSeconds;

            // Write your logic

            endAnimation = true;

            if (CheckFloat(gameTime))
            {
                AnimFloat(gameTime);
            }
            else
            {
                AnimStop(gameTime);
            }

            mi.rotation = Vector3.Zero;

            #endregion

            #region 3、次のアニメーションへの遷移判定
            Animation prevAnim = anim;
            NextAnimation[] nextAnim = new NextAnimation[]{
                new NextAnimation(Animation.Dead,false,CheckDead,true),
                new NextAnimation(Animation.Attacked,false,CheckAttacked,true),
                new NextAnimation(Animation.Ground,false,CheckGround,endAnimation),
                new NextAnimation(Animation.Float,false,CheckFloat,endAnimation),
                new NextAnimation(Animation.Run,true,null,endAnimation),
                new NextAnimation(Animation.Walk,true,null,endAnimation),
                new NextAnimation(Animation.Stop,false,null,endAnimation),
                new NextAnimation(Animation.B,false,null,true),
            };

            anim = FindNextAnimation(nextAnim, gameTime);
            if (anim == Animation.None)
            {
                anim = prevAnim;
            }

            #endregion

            #region 4、アニメーションが遷移するときの処理
            if (anim != prevAnim)
            {
                commandFlg[(int)Animation.B] = false;
                commandFlg[(int)Animation.UpB] = false;
                commandFlg[(int)Animation.DownB] = false;
                commandFlg[(int)Animation.SpecialB] = false;
            }

            #endregion

            return true;
        }