-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRCC_Demo.cs
More file actions
173 lines (117 loc) · 4.59 KB
/
Copy pathRCC_Demo.cs
File metadata and controls
173 lines (117 loc) · 4.59 KB
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
171
172
173
//----------------------------------------------
// Realistic Car Controller
//
// Copyright © 2014 - 2017 BoneCracker Games
// http://www.bonecrackergames.com
// Buğra Özdoğanlar
//
//----------------------------------------------
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
/// <summary>
/// A simple manager script for all demo scenes. It has an array of spawnable player vehicles, public methods, setting new behavior modes, restart, and quit application.
/// </summary>
[AddComponentMenu("BoneCracker Games/Realistic Car Controller/UI/RCC Demo Manager")]
public class RCC_Demo : MonoBehaviour {
[Header("Spawnable Vehicles")]
public RCC_CarControllerV3[] selectableVehicles;
internal int selectedVehicleIndex = 0; // An integer index value used for spawning a new vehicle.
internal int selectedBehaviorIndex = 0; // An integer index value used for setting behavior mode.
// An integer index value used for spawning a new vehicle.
public void SelectVehicle (int index) {
selectedVehicleIndex = index;
}
public void Spawn () {
// Last known position and rotation of last active vehicle.
Vector3 lastKnownPos = new Vector3();
Quaternion lastKnownRot = new Quaternion();
// Checking if there is a player vehicle on the scene.
if(RCC_SceneManager.Instance.activePlayerVehicle){
lastKnownPos = RCC_SceneManager.Instance.activePlayerVehicle.transform.position;
lastKnownRot = RCC_SceneManager.Instance.activePlayerVehicle.transform.rotation;
}
// If last known position and rotation is not assigned, camera's position and rotation will be used.
if(lastKnownPos == Vector3.zero){
if(RCC_SceneManager.Instance.activePlayerCamera){
lastKnownPos = RCC_SceneManager.Instance.activePlayerCamera.transform.position;
lastKnownRot = RCC_SceneManager.Instance.activePlayerCamera.transform.rotation;
}
}
// We don't need X and Z rotation angle. Just Y.
lastKnownRot.x = 0f;
lastKnownRot.z = 0f;
RCC_CarControllerV3 lastVehicle = RCC_SceneManager.Instance.activePlayerVehicle;
#if BCG_ENTEREXIT
BCG_EnterExitVehicle lastEnterExitVehicle;
bool enterExitVehicleFound = false;
if (lastVehicle) {
lastEnterExitVehicle = lastVehicle.GetComponentInChildren<BCG_EnterExitVehicle> ();
if(lastEnterExitVehicle && lastEnterExitVehicle.driver){
enterExitVehicleFound = true;
BCG_EnterExitManager.Instance.waitTime = 10f;
lastEnterExitVehicle.driver.GetOut();
}
}
#endif
// If we have controllable vehicle by player on scene, destroy it.
if(lastVehicle)
Destroy(lastVehicle.gameObject);
// Here we are creating our new vehicle.
RCC.SpawnRCC(selectableVehicles[selectedVehicleIndex], lastKnownPos, lastKnownRot, true, true, true);
#if BCG_ENTEREXIT
if(enterExitVehicleFound){
lastEnterExitVehicle = null;
lastEnterExitVehicle = RCC_SceneManager.Instance.activePlayerVehicle.GetComponentInChildren<BCG_EnterExitVehicle> ();
if(!lastEnterExitVehicle){
lastEnterExitVehicle = RCC_SceneManager.Instance.activePlayerVehicle.gameObject.AddComponent<BCG_EnterExitVehicle> ();
}
if(BCG_EnterExitManager.Instance.BCGCharacterPlayer.characterPlayer && lastEnterExitVehicle && lastEnterExitVehicle.driver == null){
BCG_EnterExitManager.Instance.waitTime = 10f;
BCG_EnterExitManager.Instance.BCGCharacterPlayer.characterPlayer.GetIn(lastEnterExitVehicle);
}
}
#endif
}
// An integer index value used for setting behavior mode.
public void SelectBehavior(int index){
selectedBehaviorIndex = index;
}
// Here we are setting new selected behavior to corresponding one.
public void InitBehavior(){
switch(selectedBehaviorIndex){
case 0:
RCC_Settings.Instance.behaviorType = RCC_Settings.BehaviorType.Simulator;
RestartScene();
break;
case 1:
RCC_Settings.Instance.behaviorType = RCC_Settings.BehaviorType.Racing;
RestartScene();
break;
case 2:
RCC_Settings.Instance.behaviorType = RCC_Settings.BehaviorType.SemiArcade;
RestartScene();
break;
case 3:
RCC_Settings.Instance.behaviorType = RCC_Settings.BehaviorType.Drift;
RestartScene();
break;
case 4:
RCC_Settings.Instance.behaviorType = RCC_Settings.BehaviorType.Fun;
RestartScene();
break;
case 5:
RCC_Settings.Instance.behaviorType = RCC_Settings.BehaviorType.Custom;
RestartScene();
break;
}
}
// Simply restarting the current scene.
public void RestartScene(){
SceneManager.LoadScene (SceneManager.GetActiveScene().buildIndex);
}
// Simply quit application. Not working on Editor.
public void Quit(){
Application.Quit();
}
}