public void MoveIndividual(ColliderLocation location, GameObject individual, Tracer tracer) { if (!OnScreen(individual)) { Vector3 moveDistance = Vector3.zero; switch (location) { case ColliderLocation.Top: moveDistance = new Vector3(0f, -moveDistanceVertical, 0f); break; case ColliderLocation.Bottom: moveDistance = new Vector3(0f, moveDistanceVertical, 0f); break; case ColliderLocation.Left: moveDistance = new Vector3(moveDistanceHorizontal, 0f, 0f); break; case ColliderLocation.Right: moveDistance = new Vector3(+moveDistanceHorizontal, 0f, 0f); break; } //Tracer otherTracer = individual.GetComponent<Tracer>(); Vector3 oldPosition = individual.transform.position; moveDistance += MoveOffScreen(individual.gameObject, moveDistance, location); if (individual.gameObject.GetComponent <LoopTag>().moveRoot) { individual.gameObject.transform.root.position += moveDistance; } else { individual.gameObject.transform.position += moveDistance; } if (tracer != null) { tracer.MoveVertices(individual.transform.position - oldPosition); //tracer.DestroyLine(); //tracer.SendMessage("TailStartFollow", SendMessageOptions.DontRequireReceiver); } } }
private bool OutSideBounds(GameObject lo, ColliderLocation colliderLocation, Vector3 offset) { switch (colliderLocation) { case ColliderLocation.Top: return(lo.transform.position.y > transform.position.y + offset.y); case ColliderLocation.Bottom: return(lo.transform.position.y < transform.position.y + offset.y); case ColliderLocation.Left: return(lo.transform.position.x < transform.position.x + offset.y); case ColliderLocation.Right: return(lo.transform.position.x > transform.position.x + offset.y); } return(false); }
private Vector3 MoveOffScreen(GameObject lo, Vector3 offset, ColliderLocation colliderLocation) { Vector3 offScreenMove = Vector3.zero; if (OnScreen(lo, offset)) { var camHeight = Camera.main.orthographicSize; var camWidth = camHeight * Camera.main.aspect; //Switch to see which direction to move by viewport size switch (colliderLocation) { case ColliderLocation.Top: //Debug.Log (camHeight); //Debug.Log(lo.transform.position); offScreenMove += new Vector3(0, camHeight, 0); //Debug.Log(lo.transform.position); break; case ColliderLocation.Bottom: offScreenMove -= new Vector3(0, camHeight, 0); break; case ColliderLocation.Left: offScreenMove -= new Vector3(camWidth, 0, 0); break; case ColliderLocation.Right: offScreenMove += new Vector3(camWidth, 0, 0); break; } } if (OnScreen(lo, offset + offScreenMove)) { offScreenMove += MoveOffScreen(lo, offset + offScreenMove, colliderLocation); } return(offScreenMove); }
public void MoveWorld(ColliderLocation location) { Vector3 moveDistance = Vector3.zero; switch (location) { case ColliderLocation.Top: moveDistance = new Vector3(0f, moveDistanceVertical, 0f); break; case ColliderLocation.Bottom: moveDistance = new Vector3(0f, -moveDistanceVertical, 0f); break; case ColliderLocation.Left: moveDistance = new Vector3(-moveDistanceHorizontal, 0f, 0f); break; case ColliderLocation.Right: moveDistance = new Vector3(moveDistanceHorizontal, 0f, 0f); break; } //Move the boundaries transform.position += moveDistance; //Get all gameobjects in the scene and then filter to get only loopable objects// GameObject[] allObjects = UnityEngine.Object.FindObjectsOfType <GameObject>(); List <GameObject> loopableObjects = new List <GameObject>(); foreach (GameObject go in allObjects) { if (go.GetComponent <LoopTag>() != null) { loopableObjects.Add(go); } } foreach (GameObject lo in loopableObjects) { //Check if the object is on screen if (lo != null && !OnScreen(lo) && (lo.GetComponent <LoopTag>().stayOutsideBounds || !OutSideBounds(lo, location, moveDistance))) { Vector3 oldPosition = lo.transform.position; //Debug.Log(OnScreen(lo)); moveDistance += MoveOffScreen(lo, Vector3.zero, location); if (lo.GetComponent <LoopTag>().moveRoot) { lo.transform.root.position += moveDistance; } else { lo.transform.position += moveDistance; } GameObject tracerGameObject = lo; Tracer tracer = lo.GetComponent <Tracer>(); while (tracer == null && tracerGameObject != null && tracerGameObject.transform.parent != null) { tracerGameObject = tracerGameObject.transform.parent.gameObject; tracer = tracerGameObject.GetComponent <Tracer>(); } if (tracer != null) { tracer.MoveVertices(lo.transform.position - oldPosition); } } } }
public void MoveWorld(ColliderLocation location) { Vector3 moveDistance = Vector3.zero; switch(location) { case ColliderLocation.Top: moveDistance = new Vector3(0f, moveDistanceVertical, 0f); break; case ColliderLocation.Bottom: moveDistance = new Vector3(0f, -moveDistanceVertical, 0f); break; case ColliderLocation.Left: moveDistance = new Vector3(-moveDistanceHorizontal, 0f, 0f); break; case ColliderLocation.Right: moveDistance = new Vector3(moveDistanceHorizontal,0f,0f); break; } //Move the boundaries transform.position += moveDistance; //Get all gameobjects in the scene and then filter to get only loopable objects// GameObject[] allObjects = UnityEngine.Object.FindObjectsOfType<GameObject>(); List<GameObject> loopableObjects = new List<GameObject>(); foreach(GameObject go in allObjects) { if(go.GetComponent<LoopTag>() != null) loopableObjects.Add(go); } foreach(GameObject lo in loopableObjects) { //Check if the object is on screen if (lo != null && !OnScreen(lo) && (lo.GetComponent<LoopTag>().stayOutsideBounds || !OutSideBounds(lo,location,moveDistance))) { Vector3 oldPosition = lo.transform.position; //Debug.Log(OnScreen(lo)); moveDistance += MoveOffScreen(lo, Vector3.zero, location); if (lo.GetComponent<LoopTag>().moveRoot) lo.transform.root.position += moveDistance; else lo.transform.position += moveDistance; GameObject tracerGameObject = lo; Tracer tracer = lo.GetComponent<Tracer>(); while (tracer == null && tracerGameObject != null && tracerGameObject.transform.parent != null) { tracerGameObject = tracerGameObject.transform.parent.gameObject; tracer = tracerGameObject.GetComponent<Tracer>(); } if (tracer != null) { tracer.MoveVertices(lo.transform.position - oldPosition); } } } }
private Vector3 MoveOffScreen(GameObject lo, Vector3 offset, ColliderLocation colliderLocation) { Vector3 offScreenMove= Vector3.zero; if (OnScreen(lo, offset)) { var camHeight = Camera.main.orthographicSize; var camWidth = camHeight * Camera.main.aspect; //Switch to see which direction to move by viewport size switch (colliderLocation) { case ColliderLocation.Top: //Debug.Log (camHeight); //Debug.Log(lo.transform.position); offScreenMove += new Vector3(0, camHeight, 0); //Debug.Log(lo.transform.position); break; case ColliderLocation.Bottom: offScreenMove -= new Vector3(0,camHeight, 0); break; case ColliderLocation.Left: offScreenMove -= new Vector3(camWidth, 0, 0); break; case ColliderLocation.Right: offScreenMove += new Vector3(camWidth, 0, 0); break; } } if(OnScreen(lo, offset + offScreenMove)) { offScreenMove += MoveOffScreen(lo, offset + offScreenMove, colliderLocation); } return offScreenMove; }
private bool OutSideBounds(GameObject lo, ColliderLocation colliderLocation, Vector3 offset) { switch (colliderLocation) { case ColliderLocation.Top: return lo.transform.position.y > transform.position.y + offset.y; case ColliderLocation.Bottom: return lo.transform.position.y < transform.position.y + offset.y; case ColliderLocation.Left: return lo.transform.position.x < transform.position.x + offset.y; case ColliderLocation.Right: return lo.transform.position.x > transform.position.x + offset.y; } return false; }
public void MoveIndividual(ColliderLocation location, GameObject individual, Tracer tracer) { if (!OnScreen(individual)) { Vector3 moveDistance = Vector3.zero; switch(location) { case ColliderLocation.Top: moveDistance = new Vector3(0f, -moveDistanceVertical, 0f); break; case ColliderLocation.Bottom: moveDistance = new Vector3(0f, moveDistanceVertical, 0f); break; case ColliderLocation.Left: moveDistance = new Vector3(moveDistanceHorizontal, 0f, 0f); break; case ColliderLocation.Right: moveDistance = new Vector3(+moveDistanceHorizontal,0f,0f); break; } //Tracer otherTracer = individual.GetComponent<Tracer>(); Vector3 oldPosition = individual.transform.position; moveDistance += MoveOffScreen(individual.gameObject, moveDistance, location); if (individual.gameObject.GetComponent<LoopTag>().moveRoot) { individual.gameObject.transform.root.position += moveDistance; } else { individual.gameObject.transform.position += moveDistance; } if (tracer != null) { tracer.MoveVertices(individual.transform.position - oldPosition); //tracer.DestroyLine(); //tracer.SendMessage("TailStartFollow", SendMessageOptions.DontRequireReceiver); } } }