public RectangleD(RectangleD rec) { x = rec.x; y = rec.y; width = rec.width; height = rec.height; }
public GuidedBomb(Fight scene, Hashtable parameters, RectangleD rect, int owner) : base(scene, parameters) { this.rect = rect; this.owner = owner; Initialize(); }
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; }
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; }
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; }
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; }
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; } }
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; }
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(); }
/// <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); }
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(); }
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; }
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)); }
public void Copy(RectangleD rect) { x = rect.X; y = rect.Y; height = rect.Height; width = rect.Width; }
/// <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; }
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"); }
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; }