-
Notifications
You must be signed in to change notification settings - Fork 0
/
PauseGame.cs
98 lines (64 loc) · 2.36 KB
/
PauseGame.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
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class PauseGame : MonoBehaviour {
private string mMovingObjectTag = "MovingPart";
private string mVisualEffectsTag = "VisualEffect";
private string mRobotTag = "Robot";
private List<GameObject> mPausedRobots = new List<GameObject>();
private List<Vector3> mPausedRobotVelocitys = new List<Vector3>();
public void Pause(){
StopRobotsMovement();
ToggleMovingThings(false);
ToggleEffects(false);
}
public void Resume(){
ResumeRobotsMovement();
ToggleMovingThings(true);
ToggleEffects(true);
}
void ToggleMovingThings(bool state){
GameObject[] movingObjects = GameObject.FindGameObjectsWithTag(mMovingObjectTag);
for(int i = 0; i < movingObjects.Length;i++){
if(movingObjects[i].GetComponent<MonoBehaviour>() != null){
movingObjects[i].GetComponent<MonoBehaviour>().enabled = state;
if(movingObjects[i].GetComponent<Collider>() != null){
movingObjects[i].GetComponent<Collider>().enabled = state;
}
}
}
}
void ToggleEffects(bool state){
GameObject[] visualEffectObjects = GameObject.FindGameObjectsWithTag(mVisualEffectsTag);
for(int i = 0; i < visualEffectObjects.Length;i++){
if(visualEffectObjects[i].GetComponent<ParticleSystem>() != null){
if(state){
visualEffectObjects[i].GetComponent<ParticleSystem>().Play();
}else{
visualEffectObjects[i].GetComponent<ParticleSystem>().Pause ();
}
}
if(visualEffectObjects[i].GetComponent<Animation>() != null){
visualEffectObjects[i].GetComponent<Animation>().enabled = state;
}
}
}
void StopRobotsMovement(){
GameObject[] robots = GameObject.FindGameObjectsWithTag(mRobotTag);
for(int i = 0; i < robots.Length;i++){
mPausedRobots.Add (robots[i]);
mPausedRobotVelocitys.Add (mPausedRobots[i].rigidbody.velocity);
mPausedRobots[i].rigidbody.isKinematic = true;
mPausedRobots[i].rigidbody.useGravity = false;
}
}
void ResumeRobotsMovement(){
for(int i = 0; i < mPausedRobots.Count;i++){
mPausedRobots[i].rigidbody.isKinematic = false;
mPausedRobots[i].rigidbody.useGravity = true;
mPausedRobots[i].rigidbody.velocity = mPausedRobotVelocitys[i];
}
mPausedRobots.Clear();
mPausedRobotVelocitys.Clear ();
}
}