File tree Expand file tree Collapse file tree 7 files changed +189
-0
lines changed Expand file tree Collapse file tree 7 files changed +189
-0
lines changed Original file line number Diff line number Diff line change 1+ * .meta
Original file line number Diff line number Diff line change 1+ using System ;
2+ using System . Collections ;
3+ using UnityEngine ;
4+
5+ namespace Patterns . Command
6+ {
7+ public abstract class Command
8+ {
9+
10+ public virtual void Execute ( object target , params object [ ] args )
11+ {
12+ throw new NotImplementedException ( ) ;
13+ }
14+
15+ public virtual void Undo ( )
16+ {
17+ throw new NotImplementedException ( ) ;
18+ }
19+
20+ }
21+
22+ public class NullCommand : Command
23+ {
24+
25+ public override void Execute ( object target , params object [ ] args )
26+ {
27+ Debug . LogError ( "Tried to execute null command!" ) ;
28+ }
29+
30+ }
31+ }
Original file line number Diff line number Diff line change 1+ using System ;
2+ using System . Linq ;
3+ using System . Collections ;
4+ using System . Reflection ;
5+ using UnityEngine ;
6+ using System . Collections . Generic ;
7+
8+ namespace Patterns . Observer
9+ {
10+ public enum Message
11+ {
12+ // COMBAT ============================ //
13+
14+ Combat_Index = 1 ,
15+ Combat_Hit ,
16+ Combat_GotHit ,
17+ Combat_EnergyChanged ,
18+ Combat_EnergyBlockConsumed ,
19+ Combat_BodyPartHealthChanged ,
20+ Combat_BodyPartDestroyed ,
21+ Combat_Punch ,
22+ Combat_WeaponShoot ,
23+ Combat_EnergyDanger ,
24+ Combat_Struck ,
25+ Combat_Death ,
26+
27+ // MOVEMENT ========================== //
28+
29+ Movement_Index = 300 ,
30+ Movement_StepGrass ,
31+ Movement_StepMetal ,
32+
33+ // SYSTEM ============================ //
34+
35+ System_Index = 700 ,
36+ System_Pause ,
37+ System_Unpause
38+ }
39+ }
Original file line number Diff line number Diff line change 1+ using System . Collections . Generic ;
2+ using UnityEngine ;
3+
4+ namespace Patterns . Observer
5+ {
6+ public interface IObserver {
7+ void OnNotification ( object sender , Message subject , params object [ ] args ) ;
8+ }
9+
10+ public static class MessageSystem
11+ {
12+ private static Dictionary < Message , List < IObserver > > listeners ;
13+
14+ public static bool initialized = false ;
15+
16+ public static void Init ( )
17+ {
18+ initialized = true ;
19+ listeners = new Dictionary < Message , List < IObserver > > ( ) ;
20+ }
21+
22+ public static void Notify ( this object sender , Message subject , params object [ ] args )
23+ {
24+ if ( sender == null )
25+ Debug . LogError ( "Sender is null!" ) ;
26+
27+ if ( listeners . ContainsKey ( subject ) )
28+ foreach ( var observer in listeners [ subject ] )
29+ observer . OnNotification ( sender , subject , args ) ;
30+ }
31+
32+ public static void Observe ( this IObserver observer , Message msgType )
33+ {
34+ if ( ! listeners . ContainsKey ( msgType ) )
35+ listeners . Add ( msgType , new List < IObserver > ( ) { observer } ) ;
36+ else
37+ {
38+ if ( ! listeners [ msgType ] . Contains ( observer ) )
39+ listeners [ msgType ] . Add ( observer ) ;
40+ }
41+ }
42+ }
43+ }
Original file line number Diff line number Diff line change 1+ using System . Collections ;
2+ using System . Collections . Generic ;
3+ using UnityEngine ;
4+ using UnityEngine . Events ;
5+
6+ namespace Patterns . StateMachine
7+ {
8+ public class State : MonoBehaviour
9+ {
10+ public Transition [ ] transitions ;
11+
12+ private void Awake ( )
13+ {
14+ transitions = GetComponents < Transition > ( ) ;
15+ }
16+
17+ public virtual void OnEnter ( ) { }
18+ public virtual void OnStay ( ) { }
19+ public virtual void OnExit ( ) { }
20+ }
21+ }
Original file line number Diff line number Diff line change 1+ using UnityEngine ;
2+ using Patterns . Observer ;
3+
4+ namespace Patterns . StateMachine
5+ {
6+ public class StateMachine : MonoBehaviour , IObserver
7+ {
8+ public GameObject owner = null ;
9+ public State state = null ;
10+
11+ protected virtual void Update ( )
12+ {
13+ state . OnStay ( ) ;
14+ }
15+
16+ public virtual void OnNotification ( object sender , Message msg , params object [ ] args )
17+ {
18+ if ( owner == null )
19+ return ;
20+
21+ if ( ( GameObject ) sender == owner )
22+ {
23+ foreach ( var t in state . transitions )
24+ {
25+ if ( t . trigger == msg )
26+ {
27+ t . source . OnExit ( ) ;
28+ state = t . target ;
29+ t . target . OnEnter ( ) ;
30+ }
31+ }
32+ }
33+ }
34+
35+ }
36+ }
Original file line number Diff line number Diff line change 1+ using Patterns . Observer ;
2+ using UnityEngine ;
3+
4+ namespace Patterns . StateMachine
5+ {
6+ [ RequireComponent ( typeof ( State ) ) ]
7+ public class Transition : MonoBehaviour
8+ {
9+ public Message trigger ;
10+ [ HideInInspector ] public State source ;
11+ public State target ;
12+
13+ void Awake ( )
14+ {
15+ source = GetComponent < State > ( ) ;
16+ }
17+ }
18+ }
You can’t perform that action at this time.
0 commit comments