Guest User

Unity3D Shift Mapping

a guest
Oct 30th, 2013
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.65 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class DK_MapSystem : MonoBehaviour {
  5.     public float ScrollSpeed = 20.0f;
  6.     public float ZoomSpeed = 10.0f;
  7.     public float Scroll_Width = 10.0f;
  8.    
  9.     public int CameraHeight = 60;
  10.    
  11.     private GameObject[][] ShiftMap = new GameObject[50][];
  12.     private GameObject[][] ShiftMap_hold = new GameObject[50][];
  13.    
  14.     private Vector2 TileOffset;
  15.     private Vector2 TileSize;
  16.     private Mesh SingleTile;
  17.    
  18.     private GameObject MapHolder;
  19.    
  20.     private Vector2 CameraTile;
  21.     private Vector2 CameraTile_old;
  22.     private Vector2 MoveTiles = new Vector2(0,0);
  23.    
  24.     DK_Tiles DKTiles;
  25.     DK_TileSystem DK_TileSys;
  26.    
  27.     // Use this for initialization
  28.     void Start () {
  29.         for(int ax=0; ax<50; ax++){
  30.             ShiftMap[ax] = new GameObject[40];
  31.             ShiftMap_hold[ax] = new GameObject[40];
  32.         }
  33.         DKTiles = transform.gameObject.GetComponent<DK_Tiles>();
  34.        
  35.         SingleTile = DKTiles.MapPrefabs[0].GetComponent<MeshFilter>().sharedMesh;
  36.         TileSize = new Vector2(SingleTile.bounds.size.x, SingleTile.bounds.size.z);
  37.        
  38.         for(int ax=0; ax<50; ax++){
  39.             for(int ay=0; ay<40; ay++){
  40.                 ShiftMap[ax][ay] = Instantiate(DKTiles.MapPrefabs[0], new Vector3(ax*TileSize.x, 0, ay*TileSize.y), Quaternion.identity) as GameObject;
  41.                 ShiftMap[ax][ay].transform.name = "Position: " + ax + " | " + ay;
  42.             }
  43.         }
  44.        
  45.         MapHolder = new GameObject();
  46.         MapHolder.transform.name = "TilemapHolder";
  47.        
  48.         for(int ax=0; ax<50; ax++){
  49.             for(int ay=0; ay<40; ay++){
  50.                 ShiftMap[ax][ay].transform.parent = MapHolder.transform;
  51.             }
  52.         }
  53.        
  54.         DKTiles.TheCameraParent.transform.position = new Vector3((50*TileSize.x)/2, CameraHeight, (40*TileSize.y)/10);
  55.         DKTiles.TheCamera.transform.eulerAngles = new Vector3(50.000f, 0.000f, 0.000f);
  56.        
  57.         CameraTile = new Vector2(Mathf.Round(DKTiles.TheCameraParent.transform.position.x / TileSize.x), Mathf.Round(DKTiles.TheCameraParent.transform.position.z / TileSize.y));
  58.         CameraTile_old = CameraTile;
  59.     }
  60.        
  61.     // Update is called once per frame
  62.     Vector3 mousePos;
  63.     Vector3 mouserayPos;
  64.     Ray mouseray;
  65.     float hitdistance;
  66.     Vector2 scroller;
  67.     float zoomer;
  68.     void Update () {
  69.        
  70.         //==================================================================================================================
  71.         // SCROLL & ZOOM
  72.         //==================================================================================================================
  73.        
  74.         if(Input.GetAxis("Horizontal") > 0 ){scroller.x = 1;}else if(Input.GetAxis("Horizontal") < 0 ){scroller.x = -1;}
  75.         else if(Input.mousePosition.x < Scroll_Width){scroller.x = -1;}
  76.         else if(Input.mousePosition.x > Screen.width - Scroll_Width){scroller.x = 1;}
  77.         else{scroller.x = 0;}
  78.        
  79.         if(Input.GetAxis("Vertical") > 0 ){scroller.y = 1;}else if(Input.GetAxis("Vertical") < 0 ){scroller.y = -1;}
  80.         else if(Input.mousePosition.y < Scroll_Width){scroller.y = -1;}
  81.         else if(Input.mousePosition.y > Screen.height - Scroll_Width){scroller.y = 1;}
  82.         else{scroller.y = 0;}
  83.        
  84.         DKTiles.TheCameraParent.transform.Translate((scroller.x*ScrollSpeed*(Input.GetKey(KeyCode.LeftShift) ? 2 : 1))*Time.deltaTime, 0, (scroller.y*ScrollSpeed*(Input.GetKey(KeyCode.LeftShift) ? 2 : 1))*Time.deltaTime);
  85.        
  86.         if(Input.GetAxis("Mouse ScrollWheel") > 0){zoomer = -1f;} else if(Input.GetAxis("Mouse ScrollWheel") < 0){zoomer = 1f;}
  87.         else if(Input.GetKey(KeyCode.End)){zoomer = 0.5f;}
  88.         else if(Input.GetKey(KeyCode.Home)){zoomer = -0.5f;}
  89.         else{zoomer = 0f;}
  90.        
  91.         DKTiles.TheCamera.fieldOfView += (zoomer * ZoomSpeed)*Time.deltaTime;
  92.         DKTiles.TheCamera.fieldOfView = Mathf.Clamp(DKTiles.TheCamera.fieldOfView, 15, 35);
  93.        
  94.         //==================================================================================================================
  95.         // SHIFT MAPPING
  96.         //==================================================================================================================
  97.        
  98.         CameraTile = new Vector2(Mathf.Round(DKTiles.TheCameraParent.transform.position.x / TileSize.x), Mathf.Round(DKTiles.TheCameraParent.transform.position.z / TileSize.y));
  99.         if(CameraTile.x > CameraTile_old.x)
  100.         {MoveTiles.x = CameraTile.x - CameraTile_old.x;}
  101.         else if(CameraTile.x < CameraTile_old.x)
  102.         {MoveTiles.x = CameraTile.x - CameraTile_old.x;}
  103.         if(CameraTile.y > CameraTile_old.y)
  104.         {MoveTiles.y = CameraTile.y - CameraTile_old.y;}
  105.         else if(CameraTile.y < CameraTile_old.y)
  106.         {MoveTiles.y = CameraTile.y - CameraTile_old.y;}
  107.         DKTiles.TheCamera.transform.name = "MainCamera - Position| X:" + CameraTile.x + " | Y:" + CameraTile.y;
  108.        
  109.         //RECHTS
  110.         if(MoveTiles.x >= 1){
  111.             MoveTiles.x -= 1;
  112.             TileOffset.x += 1;
  113.             for(int ax=1; ax<50; ax++){
  114.                 for(int ay=0; ay<40; ay++){
  115.                     ShiftMap_hold[ax-1][ay] = ShiftMap[ax][ay];
  116.                 }
  117.             }
  118.             for(int ay=0; ay<40; ay++){
  119.                 ShiftMap_hold[49][ay] = ShiftMap[0][ay];
  120.             }
  121.             for(int ax=0; ax<50; ax++){
  122.                 for(int ay=0; ay<40; ay++){
  123.                     ShiftMap[ax][ay] = ShiftMap_hold[ax][ay];
  124.                     if(ax == 49){
  125.                         ShiftMap[ax][ay].transform.position = new Vector3(ShiftMap[ax][ay].transform.position.x+(TileSize.x*50),0,ShiftMap[ax][ay].transform.position.z);
  126.                     }
  127.                 }
  128.             }
  129.             CameraTile_old = CameraTile;
  130.         }
  131.         //LINKS
  132.         else if(MoveTiles.x <= -1){
  133.             MoveTiles.x += 1;
  134.             TileOffset.x -= 1;
  135.             for(int ax=0; ax<49; ax++){
  136.                 for(int ay=0; ay<40; ay++){
  137.                     ShiftMap_hold[ax+1][ay] = ShiftMap[ax][ay];
  138.                 }
  139.             }
  140.             for(int ay=0; ay<40; ay++){
  141.                 ShiftMap_hold[0][ay] = ShiftMap[49][ay];
  142.             }
  143.             for(int ax=0; ax<50; ax++){
  144.                 for(int ay=0; ay<40; ay++){
  145.                     ShiftMap[ax][ay] = ShiftMap_hold[ax][ay];
  146.                     if(ax == 0){
  147.                         ShiftMap[ax][ay].transform.position = new Vector3(ShiftMap[ax][ay].transform.position.x-(TileSize.x*50),0,ShiftMap[ax][ay].transform.position.z);
  148.                     }
  149.                 }
  150.             }
  151.             CameraTile_old = CameraTile;
  152.         }
  153.         //HOCH
  154.         if(MoveTiles.y >= 1){
  155.             MoveTiles.y -= 1;
  156.             TileOffset.y += 1;
  157.             for(int ax=0; ax<50; ax++){
  158.                 for(int ay=1; ay<40; ay++){
  159.                     ShiftMap_hold[ax][ay-1] = ShiftMap[ax][ay];
  160.                 }
  161.             }
  162.             for(int ax=0; ax<50; ax++){
  163.                 ShiftMap_hold[ax][39] = ShiftMap[ax][0];
  164.             }
  165.             for(int ax=0; ax<50; ax++){
  166.                 for(int ay=0; ay<40; ay++){
  167.                     ShiftMap[ax][ay] = ShiftMap_hold[ax][ay];
  168.                     if(ay == 39){
  169.                         ShiftMap[ax][ay].transform.position = new Vector3(ShiftMap[ax][ay].transform.position.x,0,ShiftMap[ax][ay].transform.position.z+(TileSize.y*40));
  170.                     }
  171.                 }
  172.             }
  173.             CameraTile_old = CameraTile;
  174.         }
  175.         //RUNTER
  176.         else if(MoveTiles.y <= -1){
  177.             MoveTiles.y += 1;
  178.             TileOffset.y -= 1;
  179.             for(int ax=0; ax<50; ax++){
  180.                 for(int ay=0; ay<39; ay++){
  181.                     ShiftMap_hold[ax][ay+1] = ShiftMap[ax][ay];
  182.                 }
  183.             }
  184.             for(int ax=0; ax<50; ax++){
  185.                 ShiftMap_hold[ax][0] = ShiftMap[ax][39];
  186.             }
  187.             for(int ax=0; ax<50; ax++){
  188.                 for(int ay=0; ay<40; ay++){
  189.                     ShiftMap[ax][ay] = ShiftMap_hold[ax][ay];
  190.                     if(ay == 0){
  191.                         ShiftMap[ax][ay].transform.position = new Vector3(ShiftMap[ax][ay].transform.position.x,0,ShiftMap[ax][ay].transform.position.z-(TileSize.y*40));
  192.                     }
  193.                 }
  194.             }
  195.             CameraTile_old = CameraTile;
  196.         }
  197.        
  198.        
  199.         //==================================================================================================================
  200.         // CURSOR
  201.         //==================================================================================================================
  202.         RaycastHit hit;
  203.         Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  204.         if(Physics.Raycast(ray, out hit))
  205.         {
  206.             hitdistance = Vector3.Distance(DKTiles.TheCamera.transform.position, hit.point);
  207.            
  208.             mouserayPos = DKTiles.TheCamera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, hitdistance-2));
  209.             DKTiles.CursorLamp.transform.position = new Vector3(mouserayPos.x, 5, mouserayPos.z);
  210.         }
  211.     }
  212. }
Advertisement
Add Comment
Please, Sign In to add comment