mirror of
				https://github.com/DerTyp7/fps-citybuild-unity.git
				synced 2025-10-30 20:47:08 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			136 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.Collections;
 | |
| using System.Collections.Generic;
 | |
| using UnityEngine;
 | |
| 
 | |
| public abstract class BuildingBlueprint : MonoBehaviour
 | |
| {
 | |
|     public bool isColliding;
 | |
|     public GameObject constructionPrefab;
 | |
| 
 | |
|     public Material collisionMat;
 | |
|     public Material blueprintMat;
 | |
| 
 | |
|     private GameObject terrain;
 | |
|     private Canvas hud;
 | |
| 
 | |
|     Ray ray;
 | |
| 
 | |
|     public abstract void Init();
 | |
| 
 | |
|     public abstract void WhileColliding();
 | |
|     public abstract void WhileNotColliding();
 | |
| 
 | |
|     private void Start()
 | |
|     {
 | |
|         hud = GameObject.Find("HUD").GetComponent<Canvas>(); //Get HUD Canvas
 | |
|         terrain = GameObject.FindGameObjectWithTag("Terrain"); //Get Terrain
 | |
| 
 | |
|         //Bug Fix Blueprints already existing
 | |
|         //Delete/CleanUp all objs with tag "Blueprint"
 | |
|         GameObject[] blueprints = GameObject.FindGameObjectsWithTag("Blueprint");
 | |
|         foreach (GameObject blueprint in blueprints)
 | |
|             Destroy(blueprint);
 | |
| 
 | |
|   
 | |
|         gameObject.tag = "Blueprint"; //Give Gameobject the tag "Blueprint" (after deleting all objs with this tag)
 | |
| 
 | |
|         
 | |
| 
 | |
|         Init(); //Call init callback function for children
 | |
|     }
 | |
| 
 | |
|     public void Update()
 | |
|     {
 | |
|         FollowMouse();
 | |
|         Rotate();
 | |
| 
 | |
|         //Collinding Callbacks
 | |
|         if (isColliding)
 | |
|         {            
 | |
|             WhileColliding();
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             WhileNotColliding();
 | |
|         }
 | |
| 
 | |
|         //PLACE
 | |
|         if (Input.GetMouseButtonDown(0) && !isColliding)
 | |
|         {
 | |
|             Place();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void FollowMouse()
 | |
|     {
 | |
|         ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 | |
|         RaycastHit hitData;
 | |
|         if (terrain.GetComponent<Collider>().Raycast(ray, out hitData, Mathf.Infinity))
 | |
|         {
 | |
|             transform.position = hitData.point;
 | |
|         }
 | |
|     }
 | |
|     void Rotate()
 | |
|     {
 | |
|         if (Input.GetButtonDown("Rotate"))
 | |
|         {
 | |
|             Debug.Log("Rotate+");
 | |
|             if (Input.GetKey(KeyCode.LeftShift))
 | |
|             {
 | |
|                 transform.Rotate(0, 5, 0);
 | |
|             }
 | |
|             else if (Input.GetKey(KeyCode.LeftControl))
 | |
|             {
 | |
|                 transform.Rotate(0, 45, 0);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 transform.Rotate(0, 22.5f, 0);
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
|         if (Input.GetButtonDown("CounterRotate"))
 | |
|         {
 | |
|             Debug.Log("Rotate-");
 | |
|             if (Input.GetKey(KeyCode.LeftShift))
 | |
|             {
 | |
|                 transform.Rotate(0, -5, 0);
 | |
|             }
 | |
|             else if (Input.GetKey(KeyCode.LeftControl))
 | |
|             {
 | |
|                 transform.Rotate(0, -45, 0);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 transform.Rotate(0, -22.5f, 0);
 | |
|             }
 | |
| 
 | |
|         }
 | |
|     }
 | |
|     void Place()
 | |
|     {
 | |
|         Instantiate(constructionPrefab, transform.position, transform.rotation);
 | |
|         Destroy(this.gameObject);
 | |
|         hud.enabled = true;
 | |
|     }
 | |
| 
 | |
| 
 | |
|     //Collision
 | |
|     public void OnCollisionEnter(Collision c)
 | |
|     {
 | |
|         isColliding = true;
 | |
|         Debug.Log("Colliding True");
 | |
|     }
 | |
|     public void OnCollisionStay(Collision c)
 | |
|     {
 | |
|         isColliding = true;
 | |
|         Debug.Log("Colliding True");
 | |
|     }
 | |
|     public void OnCollisionExit(Collision c)
 | |
|     {
 | |
|         isColliding = false;
 | |
|         Debug.Log("Colliding False");
 | |
|     }
 | |
| }
 | 
