Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- public class Spacecraft : MonoBehaviour {
- public GameObject ForwardEngine;
- public GameObject BackwardEngine;
- public GameObject PlusYRotationEngine;
- public GameObject MinusYRotationEngine;
- public GameObject PlusXRotationEngine;
- public GameObject MinusXRotationEngine;
- public float Damage = 30f;
- public float impulse = 3f;
- public float MaxSpeed = 300f;
- public float MaxAngularVielocity = 20f;
- public float Fuel = 100f;
- public float FuelConsum = 0.01f;
- private Vector3 CurrentVelocity;
- private Vector3 NewVelocity;
- private Vector3 CurrentTorque;
- private Vector3 NewTorque;
- private GameObject[] engines;
- void Start(){
- engines = new GameObject[] { //Перечисляем все движки в массив, чтобы, включать/выключать их все.
- ForwardEngine,
- BackwardEngine,
- PlusYRotationEngine,
- MinusYRotationEngine,
- PlusXRotationEngine,
- MinusXRotationEngine
- };
- Physics.gravity = Vector3.zero;
- }
- // Update is called once per frame
- void Update () {
- CurrentVelocity = GetComponent<Rigidbody> ().velocity; // Получаем текущую скорость.
- CurrentTorque = GetComponent<Rigidbody>().angularVelocity; // Получаем текущий момент вращения.
- if (Fuel == 0) {
- TotalStop ();
- }
- if (Fuel != 0) { //Проверяем, есть ли топливо
- foreach(GameObject element in engines){ // Если есть - включаемся.
- element.SetActive (true);
- }
- // Ускорение вперед
- if (Input.GetKey (KeyCode.W)) {
- NewVelocity = CurrentVelocity + transform.forward * impulse*Time.deltaTime;
- EngineStart (ForwardEngine);
- } else {
- EngineStop (ForwardEngine);
- }
- // Ускорение назад(торможение)
- if (Input.GetKey (KeyCode.S)) {
- NewVelocity = CurrentVelocity - transform.forward * impulse*Time.deltaTime;
- EngineStart (BackwardEngine);
- } else {
- EngineStop (BackwardEngine);
- }
- // Создание положительного момента вращения относительно У
- if (Input.GetKey (KeyCode.D)) {
- NewTorque = CurrentTorque + transform.up * impulse * 0.1f*Time.deltaTime;
- EngineStart (PlusYRotationEngine);
- } else {
- EngineStop (PlusYRotationEngine);
- }
- // Создание отрицательного момента вращения относительно У
- if (Input.GetKey (KeyCode.A)) {
- NewTorque = CurrentTorque - transform.up * impulse * 0.1f*Time.deltaTime;
- EngineStart (MinusYRotationEngine);
- } else {
- EngineStop (MinusYRotationEngine);
- }
- // Создание положительного момента вращения относительно X
- if (Input.GetKey (KeyCode.Q)) {
- NewTorque = CurrentTorque + transform.right * impulse * 0.1f*Time.deltaTime;
- PlusXRotationEngine.SetActive (true);
- } else {
- PlusXRotationEngine.SetActive (false);
- }
- // Создание отрицательного момента вращения относительно X
- if (Input.GetKey (KeyCode.E)) {
- NewTorque = CurrentTorque - transform.right * impulse * 0.1f*Time.deltaTime;
- MinusXRotationEngine.SetActive (true);
- } else {
- MinusXRotationEngine.SetActive (false);
- }
- }
- // Ограничение скорости, присвоение её кораблю
- NewVelocity = Vector3.ClampMagnitude (NewVelocity, MaxSpeed);
- NewTorque = new Vector3 (Mathf.Clamp (NewTorque.x, -MaxAngularVielocity, MaxAngularVielocity), Mathf.Clamp (NewTorque.y, -MaxAngularVielocity, MaxAngularVielocity), Mathf.Clamp (NewTorque.z, -MaxAngularVielocity, MaxAngularVielocity));
- GetComponent<Rigidbody> ().velocity = NewVelocity;
- GetComponent <Rigidbody> ().angularVelocity = NewTorque;
- // Ограничение запаса топлива
- Fuel = Mathf.Clamp(Fuel,0,100f);
- }
- public void EngineStop(GameObject engine){
- ParticleSystem[] engines = engine.GetComponentsInChildren <ParticleSystem>();
- foreach(ParticleSystem emiter in engines){
- emiter.enableEmission = false;
- }
- }
- public void EngineStart(GameObject engine){
- ParticleSystem[] engines = engine.GetComponentsInChildren <ParticleSystem>();
- foreach(ParticleSystem emiter in engines){
- emiter.enableEmission = true;
- Fuel -= (FuelConsum*Damage)*Time.deltaTime;
- Fuel = Mathf.Clamp(Fuel,0,100f);
- }
- }
- public void TotalStop (){
- foreach (GameObject element in engines) {
- element.SetActive(false);
- }
- }
- public void AddFuel(float ToAdd){
- Fuel = Fuel+ToAdd;
- }
- public void AddDamage (float damage){
- Damage += damage;
- Damage = Mathf.Clamp (Damage, 0, 100);
- Debug.Log (Damage);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement