• R/O
  • SSH
  • HTTPS

nlgp1: Commit


Commit MetaInfo

Revision848 (tree)
Zeit2011-03-23 17:08:24
Autorbiikame

Log Message

Nlgp1.Characters.Characterを修正

Ändern Zusammenfassung

Diff

--- trunk/Nlgp1/Nlgp1/Characters/Character.cs (revision 847)
+++ trunk/Nlgp1/Nlgp1/Characters/Character.cs (revision 848)
@@ -1,4 +1,5 @@
11 using System;
2+using System.Collections.Generic;
23 using Box2DX.Collision;
34 using Nlgp1.Attacks;
45 using Nlgp1.Attacks.Guns;
@@ -15,47 +16,46 @@
1516 public class Character : ISpriteOwner {
1617 public Character( int typeID , SpriteType spriteType , VectorI characterSize , Vector position ) {
1718 this.Sprite = new Sprite( LayerType.Character , typeID , spriteType , this , "CharacterImages" , characterSize , () => {
18- Sprite sprite = this.Sprite;
1919 MotionType result = MotionType.RestRight;
20- if( sprite.IsNowJumping == false &&
21- ( sprite.MovingDirections == Directions.Left || sprite.MovingDirections == Directions.Right ) && sprite.Body.Velocity != Vector.Zero ) {
20+ if( this.IsNowJumping == false &&
21+ ( this.MovingDirections == Directions.Left || this.MovingDirections == Directions.Right ) && this.IsRest ) {
2222 // 静止状態
23- if( sprite.Directions == ( sprite.Directions | Directions.Right ) )
23+ if( this.Directions == ( this.Directions | Directions.Right ) )
2424 result = MotionType.RestRight;
2525 else
2626 result = MotionType.RestLeft;
27- } else if( sprite.Directions == Directions.Right ) {
28- if( sprite.IsBoosting )
27+ } else if( this.Directions == Directions.Right ) {
28+ if( this.IsBoosting )
2929 result = MotionType.BoostRight;
3030 else
3131 result = MotionType.WalkRight;
32- } else if( sprite.Directions == Directions.Left ) {
33- if( sprite.IsBoosting )
32+ } else if( this.Directions == Directions.Left ) {
33+ if( this.IsBoosting )
3434 result = MotionType.BoostLeft;
3535 else
3636 result = MotionType.WalkLeft;
37- } else if( sprite.Directions == ( sprite.Directions | Directions.Right ) ) {
37+ } else if( this.Directions == ( this.Directions | Directions.Right ) ) {
3838 // 右方向
39- if( sprite.Directions == ( sprite.Directions | Directions.Top ) ) {
40- if( sprite.IsBoosting )
39+ if( this.Directions == ( this.Directions | Directions.Top ) ) {
40+ if( this.IsBoosting )
4141 result = MotionType.BoostUpRight;
4242 else
4343 result = MotionType.UpRight;
4444 } else {
45- if( sprite.IsBoosting )
45+ if( this.IsBoosting )
4646 result = MotionType.BoostDownRight;
4747 else
4848 result = MotionType.UpRight;
4949 }
50- } else if( sprite.Directions == ( sprite.Directions | Directions.Left ) ) {
50+ } else if( this.Directions == ( this.Directions | Directions.Left ) ) {
5151 // 左方向
52- if( sprite.Directions == ( sprite.Directions | Directions.Top ) ) {
53- if( sprite.IsBoosting )
52+ if( this.Directions == ( this.Directions | Directions.Top ) ) {
53+ if( this.IsBoosting )
5454 result = MotionType.BoostUpLeft;
5555 else
5656 result = MotionType.UpLeft;
5757 } else {
58- if( sprite.IsBoosting )
58+ if( this.IsBoosting )
5959 result = MotionType.BoostLeft;
6060 else
6161 result = MotionType.DownLeft;
@@ -63,6 +63,12 @@
6363 }
6464 return result;
6565 } , string.Format( "Character-{0}" , typeID ) , position );
66+ this.HitPoint = 1;
67+ jumpBoost = 5;
68+ UpGravity = 0.75f;
69+ DownGravity = 2;
70+ JumpPower = 5;
71+ FlyGravity = 0.05f;
6672 }
6773
6874 /// <summary>
@@ -94,5 +100,200 @@
94100 }
95101 }
96102 #endregion
103+
104+ private Dictionary<AttackType,IAttackOwner> attackOwnerSlot = new Dictionary<AttackType , IAttackOwner>();
105+ /// <summary>
106+ /// 攻撃スロットに関連付けられているIAttackOwnerオブジェクトを取得します。
107+ /// </summary>
108+ /// <param name="attackType">攻撃方法</param>
109+ /// <returns>IAttackOwnerオブジェクト</returns>
110+ public IAttackOwner GetAttackOwner( AttackType attackType ) {
111+ return attackOwnerSlot[attackType];
112+ }
113+
114+ /// <summary>
115+ /// 攻撃のためのIAttackOwnerインスタンスを指定したスロットに登録する。
116+ /// </summary>
117+ /// <param name="attackType">攻撃方法</param>
118+ /// <param name="attackOwner">攻撃方法を実装したインスタンス</param>
119+ public void SetAttackOwner( AttackType attackType , IAttackOwner attackOwner ) {
120+ if( attackOwnerSlot.ContainsKey( attackType ) ) {
121+ if( attackOwnerSlot[attackType] != null )
122+ attackOwnerSlot[attackType].Unload();
123+ attackOwnerSlot.Remove( attackType );
124+ }
125+ attackOwnerSlot.Add( attackType , attackOwner );
126+ }
127+
128+ #region 方向
129+ /// <summary>
130+ /// スプライトの静止状態での向きを取得します。
131+ /// </summary>
132+ public Directions Directions {
133+ get;
134+ private set;
135+ }
136+ /// <summary>
137+ /// スプライトが移動している方向を取得します。
138+ /// </summary>
139+ public Directions MovingDirections {
140+ get;
141+ private set;
142+ }
143+ /// <summary>
144+ /// スプライトが衝突したBlock属性のセルの方向を取得します。
145+ /// </summary>
146+ public Directions HitBlockDirections {
147+ get;
148+ private set;
149+ }
150+ /// <summary>
151+ /// スプライトが上または、下方向に衝突したセル座標を取得します。
152+ /// </summary>
153+ public Vector VerticalPos {
154+ get;
155+ private set;
156+ }
157+ /// <summary>
158+ /// スプライトが左または、右方向に衝突したセル座標を取得します。
159+ /// </summary>
160+ public Vector HorizontalPos {
161+ get;
162+ private set;
163+ }
164+ #endregion
165+
166+ #region 動きを制御するパラメータ
167+ /// <summary>
168+ /// 上昇重力を設定または、取得します。
169+ /// </summary>
170+ public float UpGravity {
171+ get;
172+ set;
173+ }
174+ /// <summary>
175+ /// 降下重力を設定または、取得します。
176+ /// </summary>
177+ public float DownGravity {
178+ get;
179+ set;
180+ }
181+ /// <summary>
182+ /// 滞空時に掛かる重力を設定または、取得します。
183+ /// </summary>
184+ public float FlyGravity {
185+ get;
186+ set;
187+ }
188+ /// <summary>
189+ /// スプライトのジャンプ力を取得または、設定します。
190+ /// </summary>
191+ public float JumpPower {
192+ get;
193+ set;
194+ }
195+ /// <summary>
196+ /// 飛行中かどうか取得します。
197+ /// </summary>
198+ public bool IsFlying {
199+ get;
200+ private set;
201+ }
202+ /// <summary>
203+ /// スプライトを高速移動するかどうか設定または、取得します。
204+ /// </summary>
205+ public bool IsBoosting {
206+ get;
207+ set;
208+ }
209+ #endregion
210+
211+ #region 状態を管理するパラメータ
212+ /// <summary>
213+ /// スプライトが静止状態かどうか取得します。
214+ /// </summary>
215+ public bool IsRest {
216+ get {
217+ return IsNowJumping == false && this.Sprite.Body.Velocity == Vector.Zero;
218+ }
219+ }
220+ /// <summary>
221+ /// スプライトが飛行中かどうか取得します。
222+ /// </summary>
223+ public bool IsNowJumping {
224+ get;
225+ private set;
226+ }
227+ /// <summary>
228+ /// スプライトがダメージを受けないようにするかどうか設定または、取得します。
229+ /// </summary>
230+ public bool IsNotDamage {
231+ get;
232+ set;
233+ }
234+ /// <summary>
235+ /// 残りヒットポイント
236+ /// </summary>
237+ public int HitPoint {
238+ get;
239+ set;
240+ }
241+ #endregion
242+
243+ #region ロジック
244+ private float jumpBoost = 0;
245+ /// <summary>
246+ /// ジャンプを入力を開始します。
247+ /// </summary>
248+ public void StartJump() {
249+ if( IsNowJumping == false ) {
250+ this.Sprite.Body.ApplyForce( new Vector( 0 , -JumpPower ) );
251+ jumpBoost = JumpPower;
252+ }
253+ }
254+ /// <summary>
255+ /// 強制的にジャンプする
256+ /// </summary>
257+ public void StartConstraintJump() {
258+ this.Sprite.Body.ApplyForce( new Vector( 0 , -JumpPower ) );
259+ jumpBoost = JumpPower;
260+ }
261+ /// <summary>
262+ /// ジャンプ入力を停止します。
263+ /// </summary>
264+ public void StopJump() {
265+ this.Sprite.Body.ApplyForce( new Vector( 0 , 0 ) );
266+ }
267+ /// <summary>
268+ /// 飛行を開始します。
269+ /// </summary>
270+ public void StartFly() {
271+ if( IsBoosting && IsNowJumping && MovingDirections == ( MovingDirections | Directions.Bottom ) )
272+ IsFlying = true;
273+ }
274+ /// <summary>
275+ /// 飛行を停止します。
276+ /// </summary>
277+ public void StopFly() {
278+ IsFlying = false;
279+ }
280+ #endregion
281+
282+ #region ロジック拡張
283+ /// <summary>
284+ /// 行動が発生して既定の行動が実行されたあとに発生します。
285+ /// </summary>
286+ public event EventHandler<SpriteSteppedEventArgs> Stepped;
287+ /// <summary>
288+ /// Steppedを発生させます。
289+ /// </summary>
290+ /// <param name="sender">センダー</param>
291+ /// <param name="e">イベント引数</param>
292+ public void OnStepped( object sender, SpriteSteppedEventArgs e ) {
293+ if( this.Stepped != null ) {
294+ this.Stepped( sender , e );
295+ }
296+ }
297+ #endregion
97298 }
98299 }
--- trunk/Nlgp1/Nlgp1/Characters/CharacterFactory.cs (revision 847)
+++ trunk/Nlgp1/Nlgp1/Characters/CharacterFactory.cs (revision 848)
@@ -11,9 +11,8 @@
1111
1212 namespace Nlgp1.Characters {
1313 public static class CharacterFactory {
14- private static Sprite create( int typeID , Vector position , VectorI characterSize ){
15- var sprite = new Character( typeID , SpriteType.Monster , characterSize , position ).Sprite;
16- return sprite;
14+ private static Character create( int typeID , Vector position , VectorI characterSize ){
15+ return new Character( typeID , SpriteType.Monster , characterSize , position );
1716 }
1817 /// <summary>
1918 /// キャラクタを生成してマップ上に配置します。
@@ -23,13 +22,13 @@
2322 /// <param name="characterSize">スプライトのサイズ</param>
2423 /// <returns>生成されたキャラクタオブジェクト</returns>
2524 public static Sprite CreateSprite( int typeID , Vector position , VectorI characterSize ) {
26- var sprite = create( typeID , position , characterSize );
25+ var character = create( typeID , position , characterSize );
2726 switch( typeID ) {
2827 case 2:
2928 break;
3029 case 4:
3130 #region ゆっくりと左に歩いてくる
32- sprite.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
31+ character.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
3332 e.SpriteOwner.Sprite.Body.ApplyForce( new Vector( -0.01f , 0 ) );
3433 } );
3534 #endregion
@@ -36,7 +35,7 @@
3635 break;
3736 case 5:
3837 #region ゆっくりと右に歩いてくる
39- sprite.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
38+ character.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
4039 e.SpriteOwner.Sprite.Body.ApplyForce( new Vector( +0.01f , 0 ) );
4140 } );
4241 #endregion
@@ -44,20 +43,20 @@
4443 case 6:
4544 #region ジャンプしながら左に向かってくる
4645
47- sprite.JumpPower = 4;
48- sprite.UpGravity = 0.05f;
49- sprite.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
46+ character.JumpPower = 4;
47+ character.UpGravity = 0.05f;
48+ character.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
5049 e.SpriteOwner.Sprite.Body.ApplyForce( new Vector( -0.01f , 0 ) );
51- e.SpriteOwner.Sprite.StartJump();
50+ ( ( Character )( e.SpriteOwner ) ).StartJump();
5251 } );
5352 #endregion
5453 break;
5554 case 7:
5655 #region ジャンプしながら右に向かってくる
57- sprite.JumpPower = 4;
58- sprite.UpGravity = 0.05f;
59- sprite.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
60- e.SpriteOwner.Sprite.StartJump();
56+ character.JumpPower = 4;
57+ character.UpGravity = 0.05f;
58+ character.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
59+ ( ( Character )( e.SpriteOwner ) ).StartJump();
6160 } );
6261 #endregion
6362 break;
@@ -69,43 +68,39 @@
6968 // newSprite.GetRectangle.PrevReset();
7069 // newSprite.LogicParameter.InitX = cellX * MapData.CellSize;
7170 // newSprite.LogicParameter.InitY = cellY * MapData.CellSize;
72- sprite.Body.ApplyForce( new Vector( 1 , 0 ) );
73- sprite.Shape.Stepped += ( sender , e ) => {
74- };
71+ character.Sprite.Body.ApplyForce( new Vector( 1 , 0 ) );
7572 #endregion
7673 break;
7774 case 9:
7875 #region 床から落下しないように左右に移動する。
79- sprite.Shape.Stepped += ( sender , e ) => {
80- };
8176 #endregion
8277 break;
8378 case 10:
8479 #region 上下に浮遊する
8580 // newSprite.CanDefaultAction = false;
86- sprite.LogicParameter.Radius = 50;   // 半径
87- sprite.LogicParameter.Angle = 90; // 角度
88- sprite.LogicParameter.Speed = 1; // 速度
89- sprite.LogicParameter.LimitDistance = 100;// 移動距離
90- sprite.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
81+ character.Sprite.LogicParameter.Radius = 50;   // 半径
82+ character.Sprite.LogicParameter.Angle = 90; // 角度
83+ character.Sprite.LogicParameter.Speed = 1; // 速度
84+ character.Sprite.LogicParameter.LimitDistance = 100;// 移動距離
85+ character.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
9186 } );
9287 #endregion
9388 break;
9489 case 11:
9590 #region 時計回り
96- sprite.CanActDefault = false; // 既定の重力計算などを無効にする。
97- sprite.LogicParameter.Radius = 100; // 半径
98- sprite.LogicParameter.Speed = 8; // 回転速度
99- sprite.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
91+ character.Sprite.CanActDefault = false; // 既定の重力計算などを無効にする。
92+ character.Sprite.LogicParameter.Radius = 100; // 半径
93+ character.Sprite.LogicParameter.Speed = 8; // 回転速度
94+ character.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
10095 } );
10196 #endregion
10297 break;
10398 case 12:
10499 #region 反時計回り
105- sprite.IsBlock = false;
106- sprite.LogicParameter.Speed = 2;
107- sprite.LogicParameter.Radius = 100;
108- sprite.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
100+ character.Sprite.IsBlock = false;
101+ character.Sprite.LogicParameter.Speed = 2;
102+ character.Sprite.LogicParameter.Radius = 100;
103+ character.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
109104 // Sprite.HitStop( PlayerStatus.Player , e.Target );
110105 } );
111106 #endregion
@@ -112,24 +107,17 @@
112107 break;
113108 case 13:
114109 #region 空中を回転しながら浮遊する
115- sprite.LogicParameter.LimitDistance = 150; // 移動距離
116- sprite.LogicParameter.Speed = 2; // 上下に移動するときの速度
117- sprite.LogicParameter.Angle = 90; // 移動する方向。90度 = 上下方向。45度 = 斜めなど。
118- sprite.CanActDefault = false;
119- sprite.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
120- sprite.LogicParameter.Angle++;
110+ character.Sprite.LogicParameter.LimitDistance = 150; // 移動距離
111+ character.Sprite.LogicParameter.Speed = 2; // 上下に移動するときの速度
112+ character.Sprite.LogicParameter.Angle = 90; // 移動する方向。90度 = 上下方向。45度 = 斜めなど。
113+ character.Sprite.CanActDefault = false;
114+ character.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
115+ character.Sprite.LogicParameter.Angle++;
121116 } );
122117 #endregion
123118 break;
124119 case 14:
125120 #region 10秒アイテム
126- sprite.Shape.Stepped += ( sender ,e ) => {
127- foreach( ISpriteShapeContact contact in e.Shape.Contacts ) {
128- //if( ( ( IPolygonSpriteContact )( contact.Other ) ).Shape == PlayerStatus.Player.Sprite.Shape ) {
129- // PlayerStatus.TimerInitialize();
130- //}
131- }
132- };
133121 #endregion
134122 break;
135123 case 15:
@@ -145,7 +133,7 @@
145133 default:
146134 break;
147135 }
148- return sprite;
136+ return character.Sprite;
149137 }
150138 }
151139 }
--- trunk/Nlgp1/Nlgp1/Players/PlayerController.cs (revision 847)
+++ trunk/Nlgp1/Nlgp1/Players/PlayerController.cs (revision 848)
@@ -109,17 +109,17 @@
109109
110110
111111 if( PlayerController.Jump ) {
112- PlayerStatus.Player.Sprite.StartJump();
112+ PlayerStatus.Player.StartJump();
113113 } else if( PlayerController.Jumping == false ) {
114- PlayerStatus.Player.Sprite.StopJump();
114+ PlayerStatus.Player.StopJump();
115115 }
116116
117- PlayerStatus.Player.Sprite.IsBoosting = PlayerController.Boost;
117+ PlayerStatus.Player.IsBoosting = PlayerController.Boost;
118118
119119 if( PlayerController.Fly )
120- PlayerStatus.Player.Sprite.StartFly();
120+ PlayerStatus.Player.StartFly();
121121 else
122- PlayerStatus.Player.Sprite.StopFly();
122+ PlayerStatus.Player.StopFly();
123123
124124 PlayerStatus.Player.AttackType = PlayerController.Attack ? AttackType.DivineBuster : AttackType.None;
125125 #endregion
--- trunk/Nlgp1/Nlgp1/Players/PlayerStatus.cs (revision 847)
+++ trunk/Nlgp1/Nlgp1/Players/PlayerStatus.cs (revision 848)
@@ -63,7 +63,7 @@
6363
6464 // 自分自身のパラメータは、ここで設定する
6565 Player = new Character( 1 , SpriteType.Player , MapData.DefaultChipSize , position );
66- Player.Sprite.HitPoint = 100;
66+ Player.HitPoint = 100;
6767 // Player.GetRectangle.BlankLeft = -2;
6868 // Player.GetRectangle.BlankRight = -2;
6969 // Player.GetRectangle.BlankBottom = 32;
--- trunk/Nlgp1/Nlgp1/Stages/Stage.cs (revision 847)
+++ trunk/Nlgp1/Nlgp1/Stages/Stage.cs (revision 848)
@@ -112,14 +112,9 @@
112112 else {
113113 this.sprite = CharacterFactory.CreateSprite( this.Cell.TypeID , this.Position , MapData.DefaultChipSize ); // キャラクタ
114114 }
115- this.sprite.Stepped += ( sender , e ) => {
116- this.sprite.Body.ApplyForce( new Vector( 0 , this.sprite.DownGravity ) );
117- };
118115 }
119116 else {
120117 this.sprite = new Sprite( this.LayerType , this.Cell.TypeID , SpriteType.Monster , null , Path.Combine( @"Stages\Defines\Maps\Normal" , this.LayerType.ToString() ) , MapData.DefaultChipSize , null , null , this.Position );
121- this.sprite.UpGravity = 0;
122- this.sprite.DownGravity = 0;
123118 }
124119 this.sprite.IsBlock = ( this.Cell.Types & CellTypes.Wall ) != 0;
125120 this.sprite.IsDestroyable = ( this.Cell.Types & CellTypes.Destroy ) != 0;
--- trunk/Nlgp1/Nlgp1/Sprites/Sprite.cs (revision 847)
+++ trunk/Nlgp1/Nlgp1/Sprites/Sprite.cs (revision 848)
@@ -42,10 +42,6 @@
4242 }
4343
4444 private int startTick = 0;
45- private float jumpBoost = 0;
46- private Vector verticalPos = new Vector();
47- private Vector horizontalPos = new Vector();
48- private Dictionary<AttackType,IAttackOwner> attackOwnerSlot = new Dictionary<AttackType , IAttackOwner>();
4945
5046 /// <summary>
5147 /// Spriteのコンストラクタ
@@ -74,27 +70,11 @@
7470 this.TypeID = typeID;
7571 this.DebugID = debugID;
7672 if( layerType != LayerType.Back ) {
77- this.HitPoint = 1;
78- jumpBoost = 5;
79- UpGravity = 0.75f;
80- DownGravity = 2;
81- JumpPower = 5;
82- FlyGravity = 0.05f;
8373 IsBlock = true;
8474 ActiveCellCount = 2;
8575 CanActDefault = true;
8676 startTick = Stage.TickCount;
8777 steppedEventArgs = new SpriteSteppedEventArgs( this.Owner );
88-
89- //this.Body = StageMap.World.CreateSpriteBody( true , position );
90- //if( layerType != LayerType.Character ) {
91- // this.Body.CreatePolygonSpriteShape( new SpriteShapeFilter( 1 , 2 ), new Polygon( Rectangle.FromCenterRadius( new Vector() , new Vector( chipSize.X / 2.0f , chipSize.Y / 2.0f ) ) ) );
92- //}
93- //else {
94- // this.Body.CreatePolygonSpriteShape( new SpriteShapeFilter( 1 , 2 ), new Polygon( Rectangle.FromCenterRadius( new Vector() , new Vector( chipSize.X / 2.0f - 2.0f , chipSize.Y / 2.0f - 2.0f ) ) , 0.5f ) );
95- // this.Shape = this.Body.CreatePolygonSpriteShape( new SpriteShapeFilter( 2 , 1 ) , new Polygon( Rectangle.FromCenterRadius( new Vector() , new Vector( chipSize.X / 2.0f - 2.0f , chipSize.Y / 2.0f - 2.0f ) ) , 0.5f ) );
96- //}
97- //this.Body.Load();
9878 }
9979 }
10080
@@ -115,29 +95,6 @@
11595 }
11696
11797 /// <summary>
118- /// 攻撃スロットに関連付けられているIAttackOwnerオブジェクトを取得します。
119- /// </summary>
120- /// <param name="attackType">攻撃方法</param>
121- /// <returns>IAttackOwnerオブジェクト</returns>
122- public IAttackOwner GetAttackOwner( AttackType attackType ) {
123- return attackOwnerSlot[attackType];
124- }
125-
126- /// <summary>
127- /// 攻撃のためのIAttackOwnerインスタンスを指定したスロットに登録する。
128- /// </summary>
129- /// <param name="attackType">攻撃方法</param>
130- /// <param name="attackOwner">攻撃方法を実装したインスタンス</param>
131- public void SetAttackOwner( AttackType attackType , IAttackOwner attackOwner ) {
132- if( attackOwnerSlot.ContainsKey( attackType ) ) {
133- if( attackOwnerSlot[attackType] != null )
134- attackOwnerSlot[attackType].Unload();
135- attackOwnerSlot.Remove( attackType );
136- }
137- attackOwnerSlot.Add( attackType , attackOwner );
138- }
139-
140- /// <summary>
14198 /// レイヤーの種類を取得します。
14299 /// </summary>
143100 public LayerType LayerType {
@@ -177,90 +134,8 @@
177134 private set;
178135 }
179136
180- #region 方向
181- /// <summary>
182- /// スプライトの静止状態での向きを取得します。
183- /// </summary>
184- public Directions Directions {
185- get;
186- private set;
187- }
188- /// <summary>
189- /// スプライトが移動している方向を取得します。
190- /// </summary>
191- public Directions MovingDirections {
192- get;
193- private set;
194- }
195- /// <summary>
196- /// スプライトが衝突したBlock属性のセルの方向を取得します。
197- /// </summary>
198- public Directions HitBlockDirections {
199- get;
200- private set;
201- }
202- /// <summary>
203- /// スプライトが上または、下方向に衝突したセル座標を取得します。
204- /// </summary>
205- public Vector VerticalPos {
206- get {
207- return verticalPos;
208- }
209- }
210- /// <summary>
211- /// スプライトが左または、右方向に衝突したセル座標を取得します。
212- /// </summary>
213- public Vector HorizontalPos {
214- get {
215- return horizontalPos;
216- }
217- }
218- #endregion
219-
220137 #region 動きを制御するパラメータ
221138 /// <summary>
222- /// 上昇重力を設定または、取得します。
223- /// </summary>
224- public float UpGravity {
225- get;
226- set;
227- }
228- /// <summary>
229- /// 降下重力を設定または、取得します。
230- /// </summary>
231- public float DownGravity {
232- get;
233- set;
234- }
235- /// <summary>
236- /// 滞空時に掛かる重力を設定または、取得します。
237- /// </summary>
238- public float FlyGravity {
239- get;
240- set;
241- }
242- /// <summary>
243- /// スプライトのジャンプ力を取得または、設定します。
244- /// </summary>
245- public float JumpPower {
246- get;
247- set;
248- }
249- /// <summary>
250- /// 飛行中かどうか取得します。
251- /// </summary>
252- public bool IsFlying {
253- get;
254- private set;
255- }
256- /// <summary>
257- /// スプライトを高速移動するかどうか設定または、取得します。
258- /// </summary>
259- public bool IsBoosting {
260- get;
261- set;
262- }
263- /// <summary>
264139 /// スプライトの既定のアクションを実行してスプライトを適切に移動します。
265140 /// 規定値は、trueです。falseの場合も衝突判定を行いますがスプライトの移動は、行いません。
266141 /// </summary>
@@ -295,14 +170,6 @@
295170 set;
296171 }
297172 /// <summary>
298- /// スプライトが静止状態かどうか取得します。
299- /// </summary>
300- public bool IsRest {
301- get {
302- return IsNowJumping == false && Body.Velocity != Vector.Zero;
303- }
304- }
305- /// <summary>
306173 /// スプライトを通過可能かどうか設定または、取得します。
307174 /// </summary>
308175 public bool IsBlock {
@@ -310,27 +177,6 @@
310177 set;
311178 }
312179 /// <summary>
313- /// スプライトが飛行中かどうか取得します。
314- /// </summary>
315- public bool IsNowJumping {
316- get;
317- private set;
318- }
319- /// <summary>
320- /// スプライトがダメージを受けないようにするかどうか設定または、取得します。
321- /// </summary>
322- public bool IsNotDamage {
323- get;
324- set;
325- }
326- /// <summary>
327- /// 残りヒットポイント
328- /// </summary>
329- public int HitPoint {
330- get;
331- set;
332- }
333- /// <summary>
334180 /// 破壊可能か
335181 /// </summary>
336182 public bool IsDestroyable {
@@ -365,43 +211,8 @@
365211
366212 this.Body.Step();
367213
368- this.OnStepped( this , this.steppedEventArgs );
214+ this.Owner.OnStepped( this , this.steppedEventArgs );
369215 }
370- /// <summary>
371- /// ジャンプを入力を開始します。
372- /// </summary>
373- public void StartJump() {
374- if( IsNowJumping == false ) {
375- Body.ApplyForce( new Vector( 0 , -JumpPower ) );
376- jumpBoost = JumpPower;
377- }
378- }
379- /// <summary>
380- /// 強制的にジャンプする
381- /// </summary>
382- public void StartConstraintJump() {
383- Body.ApplyForce( new Vector( 0 , -JumpPower ) );
384- jumpBoost = JumpPower;
385- }
386- /// <summary>
387- /// ジャンプ入力を停止します。
388- /// </summary>
389- public void StopJump() {
390- Body.ApplyForce( new Vector( 0 , 0 ) );
391- }
392- /// <summary>
393- /// 飛行を開始します。
394- /// </summary>
395- public void StartFly() {
396- if( IsBoosting && IsNowJumping && MovingDirections == ( MovingDirections | Directions.Bottom ) )
397- IsFlying = true;
398- }
399- /// <summary>
400- /// 飛行を停止します。
401- /// </summary>
402- public void StopFly() {
403- IsFlying = false;
404- }
405216 #endregion
406217
407218 #region ロジック拡張
@@ -412,16 +223,6 @@
412223 get;
413224 private set;
414225 }
415- /// <summary>
416- /// 行動が発生して既定の行動が実行されたあとに発生します。
417- /// </summary>
418- public event EventHandler<SpriteSteppedEventArgs> Stepped;
419-
420- private void OnStepped( object sender , SpriteSteppedEventArgs e ) {
421- if( this.Stepped != null ) {
422- this.Stepped( sender , e );
423- }
424- }
425226 #endregion
426227
427228 #region IUnloadableComponent メンバー
--- trunk/Nlgp1/Nlgp1/Sprites/ISpriteOwner.cs (revision 847)
+++ trunk/Nlgp1/Nlgp1/Sprites/ISpriteOwner.cs (revision 848)
@@ -15,5 +15,18 @@
1515 Sprite Sprite {
1616 get;
1717 }
18+
19+ #region ロジック拡張
20+ /// <summary>
21+ /// 行動が発生して既定の行動が実行されたあとに発生します。
22+ /// </summary>
23+ event EventHandler<SpriteSteppedEventArgs> Stepped;
24+ /// <summary>
25+ /// Steppedを発生させます。
26+ /// </summary>
27+ /// <param name="sender">センダー</param>
28+ /// <param name="e">イベント引数</param>
29+ void OnStepped( object sender , SpriteSteppedEventArgs e );
30+ #endregion
1831 }
1932 }
--- trunk/Nlgp1/Nlgp1/Attacks/Attack.cs (revision 847)
+++ trunk/Nlgp1/Nlgp1/Attacks/Attack.cs (revision 848)
@@ -24,7 +24,7 @@
2424 this.SpriteOwner.Sprite.Unloaded += new EventHandler( ( sender , e ) => Unload() );
2525
2626 #region 攻撃状態の変化
27- this.SpriteOwner.Sprite.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
27+ this.SpriteOwner.Stepped += new EventHandler<SpriteSteppedEventArgs>( ( sender , e ) => {
2828 if( ActionType == ActionType.None )
2929 return;
3030 else if( ActionType == ActionType.Starting && Stage.TickCount - attackTick >= StartingWait && canAttack ) {
@@ -115,7 +115,7 @@
115115
116116 private bool canAttack {
117117 get {
118- return CanMovingAttack || SpriteOwner.Sprite.IsRest;
118+ return CanMovingAttack;
119119 }
120120 }
121121
--- trunk/Nlgp1/Nlgp1/Attacks/Guns/Gun.cs (revision 847)
+++ trunk/Nlgp1/Nlgp1/Attacks/Guns/Gun.cs (revision 848)
@@ -52,5 +52,22 @@
5252 }
5353 }
5454 #endregion
55+
56+ #region ロジック拡張
57+ /// <summary>
58+ /// 行動が発生して既定の行動が実行されたあとに発生します。
59+ /// </summary>
60+ public event EventHandler<SpriteSteppedEventArgs> Stepped;
61+ /// <summary>
62+ /// Steppedを発生させます。
63+ /// </summary>
64+ /// <param name="sender">センダー</param>
65+ /// <param name="e">イベント引数</param>
66+ public void OnStepped( object sender, SpriteSteppedEventArgs e ) {
67+ if( this.Stepped != null ) {
68+ this.Stepped( sender , e );
69+ }
70+ }
71+ #endregion
5572 }
5673 }
--- trunk/Nlgp1/Nlgp1/Program.cs (revision 847)
+++ trunk/Nlgp1/Nlgp1/Program.cs (revision 848)
@@ -87,18 +87,12 @@
8787 message = string.Format(
8888 @"Pos > X ={0} Y ={1}
8989 Speed > X ={2} Y ={3}
90-Direction = {4}
91-MovingDir = {5}
92-Jump={6} Hit={7} FPS = {8}
90+FPS = {4}
9391 " ,
9492 s.Body.Position.X ,
9593 s.Body.Position.Y ,
9694 s.Body.Velocity.X ,
9795 s.Body.Velocity.Y ,
98- s.Directions ,
99- s.MovingDirections ,
100- s.IsNowJumping ,
101- s.HitPoint ,
10296 rate.FlameRate
10397 );
10498 }
Show on old repository browser