-
Notifications
You must be signed in to change notification settings - Fork 2
/
ActionManager.cs
170 lines (147 loc) · 5.65 KB
/
ActionManager.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ActionManager : MonoBehaviour
{
public Transform player;
public PlayerStatus playerStatus;
public SpriteRenderer playerSprite;
public AudioSource playerAudio;
public AudioManager audioManager;
public SpriteManager spriteManager;
public float jumpSpeed = 8.0f;
public float distToGround = 1.1f;
public Transform moveSpot_L, moveSpot_C, moveSpot_R;
public Pose runingPose;
public Pose poseUp;
public Pose poseDown;
public Pose poseLeft;
public Pose poseRight;
public Jump jump;
public Move moveLeft;
public Move moveRight;
// Use this for initialization
void Start()
{
InitializeActionsPool();
}
private void InitializeActionsPool()
{
runingPose = new Pose(PlayerStatus.PlayerPose.Running, playerStatus, playerSprite, playerAudio, audioManager.empty, spriteManager.running);
poseUp = new Pose(PlayerStatus.PlayerPose.Up, playerStatus, playerSprite, playerAudio, audioManager.poseUp, spriteManager.poseUp);
poseDown = new Pose(PlayerStatus.PlayerPose.Down, playerStatus, playerSprite, playerAudio, audioManager.poseDown, spriteManager.poseDown);
poseLeft = new Pose(PlayerStatus.PlayerPose.Left, playerStatus, playerSprite, playerAudio, audioManager.poseLeft, spriteManager.poseLeft);
poseRight = new Pose(PlayerStatus.PlayerPose.Right, playerStatus, playerSprite, playerAudio, audioManager.poseRight, spriteManager.poseRight);
jump = new Jump(player, playerAudio, jumpSpeed, distToGround, audioManager.jump);
moveLeft = new Move(Move.MoveDirection.Left, player, playerStatus, playerAudio, audioManager.move, moveSpot_L, moveSpot_C, moveSpot_R);
moveRight = new Move(Move.MoveDirection.Right, player, playerStatus, playerAudio, audioManager.move, moveSpot_L, moveSpot_C, moveSpot_R);
}
}
public class PlayerAction
{
protected Transform player;
protected PlayerStatus playerStatus;
protected SpriteRenderer playerSprite;
protected AudioSource playerAudio;
protected AudioClip poseAudio;
protected Sprite poseSprite;
}
public class Pose: PlayerAction
{
PlayerStatus.PlayerPose pose;
public Pose(PlayerStatus.PlayerPose pose, PlayerStatus playerStatus, SpriteRenderer playerSprite, AudioSource playerAudio, AudioClip poseAudio, Sprite poseSprite)
{
this.pose = pose;
this.playerStatus = playerStatus;
this.playerSprite = playerSprite;
this.playerAudio = playerAudio;
this.poseAudio = poseAudio;
this.poseSprite = poseSprite;
}
public void PoseAction()
{
playerStatus.SetCurrentPose(pose);
playerSprite.sprite = poseSprite;
playerAudio.PlayOneShot(poseAudio);
}
public Pose() { }
}
public class Jump : PlayerAction
{
private float jumpSpeed;
private float distToGround;
private AudioClip jumpSound;
public Jump(Transform player, AudioSource playerAudio,float jumpSpeed, float distToGround, AudioClip jumpSound)
{
this.player = player;
this.playerAudio = playerAudio;
this.jumpSpeed = jumpSpeed;
this.distToGround = distToGround;
this.jumpSound = jumpSound;
}
public Jump() { }
public void JumpAction()
{
playerAudio.PlayOneShot(jumpSound);
if (CheckIsGrounded())
{
player.GetComponent<Rigidbody>().velocity += new Vector3(0, jumpSpeed, 0);
}
}
private bool CheckIsGrounded()
{
return Physics.Raycast(player.position, -Vector3.up, distToGround);
}
}
public class Move: PlayerAction
{
public enum MoveDirection
{
Left, Right
}
private MoveDirection moveDir;
private AudioClip moveSound;
private Transform moveSpot_L, moveSpot_C, moveSpot_R;
public Move(MoveDirection moveDir, Transform player, PlayerStatus playerStatus, AudioSource playerAudio, AudioClip moveSound, Transform moveSpot_L, Transform moveSpot_C, Transform moveSpot_R)
{
this.moveDir = moveDir;
this.player = player;
this.playerStatus = playerStatus;
this.playerAudio = playerAudio;
this.moveSound = moveSound;
this.moveSpot_C = moveSpot_C;
this.moveSpot_L = moveSpot_L;
this.moveSpot_R = moveSpot_R;
}
public Move() { }
public void MoveAction()
{
playerAudio.PlayOneShot(moveSound);
if (moveDir == MoveDirection.Left)
{
if (player.localPosition.x == moveSpot_C.localPosition.x)
{
player.localPosition = new Vector2(moveSpot_L.localPosition.x, player.localPosition.y);
playerStatus.SetPlayerSpot(PlayerStatus.PlayerSpot.Left);
}
else if (player.localPosition.x == moveSpot_R.localPosition.x)
{
player.localPosition = new Vector2(moveSpot_C.localPosition.x, player.localPosition.y);
playerStatus.SetPlayerSpot(PlayerStatus.PlayerSpot.Center);
}
}
else if (moveDir == MoveDirection.Right)
{
if (player.localPosition.x == moveSpot_C.localPosition.x)
{
player.localPosition = new Vector2(moveSpot_R.localPosition.x, player.localPosition.y);
playerStatus.SetPlayerSpot(PlayerStatus.PlayerSpot.Right);
}
else if (player.localPosition.x == moveSpot_L.localPosition.x)
{
player.localPosition = new Vector2(moveSpot_C.localPosition.x, player.localPosition.y);
playerStatus.SetPlayerSpot(PlayerStatus.PlayerSpot.Center);
}
}
}
}