void OnDrawGizmos() { // draw grid Gizmos.color = Color.gray; Vector3 pos = Camera.current.transform.position; for (float y = pos.y - 800.0f; y < pos.y + 800.0f; y += height) { Gizmos.DrawLine(new Vector3(-1000000.0f, Mathf.Floor(y / height) * height, 0.0f), new Vector3(1000000.0f, Mathf.Floor(y / height) * height, 0.0f)); } for (float x = pos.x - 1200.0f; x < pos.x + 1200.0f; x += width) { Gizmos.DrawLine(new Vector3(Mathf.Floor(x / width) * width, -1000000.0f, 0.0f), new Vector3(Mathf.Floor(x / width) * width, 1000000.0f, 0.0f)); } // draw room Gizmos.color = Color.white; Rect[] Rooms = Camera.main.GetComponent <CameraFollow>().Rooms; foreach (Rect room in Rooms) { Rect4 room4 = new Rect4(room); Gizmos.DrawLine(new Vector3(room4.left, room4.down, 0), new Vector3(room4.right, room4.down, 0)); Gizmos.DrawLine(new Vector3(room4.left, room4.up, 0), new Vector3(room4.right, room4.up, 0)); Gizmos.DrawLine(new Vector3(room4.left, room4.down, 0), new Vector3(room4.left, room4.up, 0)); Gizmos.DrawLine(new Vector3(room4.right, room4.down, 0), new Vector3(room4.right, room4.up, 0)); } }
public float GetRise(Vector3 point) { switch (type) { case 1: Rect4 collider = new Rect4(size); collider = new Rect4(transform.position.y + collider.up, transform.position.y + collider.down, transform.position.x + collider.left, transform.position.x + collider.right); return(point.x - (transform.position.x + size.x) - (point.y - transform.position.y + size.height / 2)); } return(0); }
public bool CheckIn(ColliderBox cb) { Rect4 player = new Rect4(cb.size).Local2World(cb.transform); Rect4 npc = new Rect4(check).Local2World(transform); if (player.right <= npc.left || player.left >= npc.left || player.down >= npc.up || player.up <= npc.down) { return(false); } else { return(true); } }
// Use this for initialization void Start() { switch (CameraMode) { case 0: target = GameObject.Find("milk").transform; if (target != null) { // find current room CurrentRoom = FindCurrentRoom(); } else { Debug.Log("cannot find milk."); } break; } }
public bool CheckIn(Vector3 position) { Rect4 collider = new Rect4(size); collider = new Rect4(transform.position.y + collider.up, transform.position.y + collider.down, transform.position.x + collider.left, transform.position.x + collider.right); switch (type) { // box case 0: if (position.x - collider.left > 0.01f) { if (position.x < collider.right) { if (position.y < collider.up) { if (position.y > collider.down) { return(true); } } } } return(false); // rightdown case 1: if (position.x < collider.right) { if (position.y > collider.down) { if (position.x > position.y - collider.down + collider.left) { return(true); } } } return(false); } return(false); }
public Rect4 FindCurrentRoom() { foreach (Rect room in Rooms) { Rect4 room4 = new Rect4(room); if (target.position.y < room4.up) { if (target.position.y > room4.down) { if (target.position.x > room4.left) { if (target.position.x < room4.right) { return(room4); } } } } } return(null); }
// Update is called once per frame void Update() { switch (CameraMode) { case 0: switch (b_through) { case through.Right: if (transform.position.x >= CurrentRoom.left + xtiles / 2) { b_through = through.None; target.gameObject.GetComponent <Platformer2DUserControl>().enabled = true; } else { transform.position = new Vector3(transform.position.x + 0.5f, transform.position.y, transform.position.z); } break; case through.Left: if (transform.position.x <= CurrentRoom.right - xtiles / 2) { b_through = through.None; target.gameObject.GetComponent <Platformer2DUserControl>().enabled = true; } else { transform.position = new Vector3(transform.position.x - 0.5f, transform.position.y, transform.position.z); } break; case through.None: if (target != null) { // player view // left float PlayerViewLeft = target.position.x - 10f; float RoomLeft = CurrentRoom.left; if (PlayerViewLeft < RoomLeft) { PlayerViewLeft = RoomLeft; } else { // right float PlayerViewRight = target.position.x + 10f; float RoomRight = CurrentRoom.right; if (PlayerViewRight > RoomRight) { PlayerViewRight = RoomRight; PlayerViewLeft = PlayerViewRight - 20f; } } // up float PlayerViewUp = target.position.y + ytiles / 2; float RoomUp = CurrentRoom.up; if (PlayerViewUp > RoomUp) { PlayerViewUp = RoomUp; } else { // down float PlayerViewDown = target.position.y - ytiles / 2; float RoomDown = CurrentRoom.down; if (PlayerViewDown < RoomDown) { PlayerViewDown = RoomDown; PlayerViewUp = PlayerViewDown + ytiles; } } transform.position = new Vector3(PlayerViewLeft + 10f, PlayerViewUp - ytiles / 2, -20); // walk through right if (target.position.x > CurrentRoom.right) { b_through = through.Right; CurrentRoom = FindCurrentRoom(); target.gameObject.GetComponent <Platformer2DUserControl>().enabled = false; target.gameObject.GetComponent <Physics2DM>().velocity = Vector3.zero; } // walk through left if (target.position.x < CurrentRoom.left) { b_through = through.Left; CurrentRoom = FindCurrentRoom(); target.gameObject.GetComponent <Platformer2DUserControl>().enabled = false; target.gameObject.GetComponent <Physics2DM>().velocity = Vector3.zero; } } break; } break; } }
public Rect4 Local2World(Transform transform) { Rect4 collider = new Rect4(transform.position.y + up, transform.position.y + down, transform.position.x + left, transform.position.x + right); return(collider); }