Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- public class GridController : MonoBehaviour {
- float worldX = 0.4F;
- float worldY = 0.4F;
- float worldZ = 0.4F;
- bool IsGenerated = false;
- List<GameObject> gridCubesList = new List<GameObject>();
- float snap = 0.2F;
- public GameObject prefab;
- List<GameObject> freeCubesList = new List<GameObject>();
- List<GameObject> GroundObjectCubesList = new List<GameObject>();
- List<GameObject> possibleCubesList = new List<GameObject>();
- List<Vector3> localPositionsList = new List<Vector3>();
- List<Vector3> globalPositionsList = new List<Vector3>();
- Vector3[] globalPositions;
- List<float> distanceList = new List<float>();
- int minIndex; // Shortest distance
- // Use this for initialization
- void Start () {
- }
- // Update is called once per frame
- void Update () {
- }
- // Generate grid given point as its 0, 0, 0 (rounded to 0.2)
- public void Generate (Vector3 hit){
- this.transform.position = hit;
- Vector3 position = this.transform.position;
- position.x = Mathf.Round(position.x / snap) * snap;
- position.y = Mathf.Round(position.y / snap) * snap;
- position.z = Mathf.Round(position.z / snap) * snap;
- this.transform.position = position;
- Vector3 gridStart = transform.position - new Vector3(worldX / 2, worldY / 2, worldZ / 2);
- for(float x =0F; x<worldX; x += snap) {
- for(float y =0F; y<worldY; y += snap) {
- for(float z =0F; z<worldZ; z += snap) {
- GameObject gridCube = Instantiate(prefab) as GameObject;
- gridCube.transform.position = new Vector3(gridStart.x + x, gridStart.y + y, gridStart.z + z);
- gridCubesList.Add(gridCube);
- }
- }
- }
- IsGenerated = true;
- }
- // Get closest free point in grid
- public Vector3 snapPoint (GameObject GroundObject){
- GroundObject.transform.position = this.transform.position;
- foreach (GameObject gridCube in gridCubesList){
- if(gridCube != null){
- gridTrigger trigger = gridCube.GetComponent<gridTrigger>();
- if(trigger.isTriggered(GroundObject)){
- localPositionsList.Add(this.transform.position - gridCube.transform.position);
- // EHTO EI TÄYTY etsi ongelma
- GroundObjectCubesList.Add(gridCube);
- }
- if(trigger.isTriggered(null) != true){
- if(gridCube != null){
- freeCubesList.Add(gridCube);
- }
- }
- }
- }
- foreach (GameObject current in freeCubesList){
- foreach(Vector3 localPosition in localPositionsList){
- foreach (GameObject freeCube in freeCubesList){
- Vector3 globalPosition = freeCube.transform.position + localPosition;
- if(globalPosition == freeCube.transform.position){
- possibleCubesList.Add(freeCube);
- }
- }
- }
- }
- foreach (GameObject possibleCube in possibleCubesList){
- distanceList.Add(Vector3.Distance(possibleCube.transform.position, transform.position));
- }
- // float minVal = distanceList.Min();
- // minIndex = distanceList.IndexOf(minVal);
- //minIndex = distanceList.IndexOf(distanceList.Min());
- //return possibleCubes[minIndex].transform.position;
- return Vector3.zero;
- }
- public void Clear (){
- foreach(GameObject clear in gridCubesList){
- Destroy(clear);
- }
- gridCubesList = new List<GameObject>();
- freeCubesList = new List<GameObject>();
- GroundObjectCubesList = new List<GameObject>();
- possibleCubesList = new List<GameObject>();
- localPositionsList = new List<Vector3>();
- globalPositionsList = new List<Vector3>();
- distanceList = new List<float>();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement