public void GenerateGrid(List <GridTrack> gridTracks, List <GridComponent> gridComponents) { /* * currentGridWidth = layoutList[0].Length; * currentGridHeight = layoutList.Count; */ Vector3 averagePosition = new Vector3(); //Debug.Log(gridTracks.Count + ", " + gridComponents.Count); foreach (GridTrack track in gridTracks) { Vector2 reversedYposition = track.position; reversedYposition.y = GameManager.Instance.GetLevelHeight() - reversedYposition.y; GameObject gridElementInstance = Instantiate(gridElementPrefab, reversedYposition, Quaternion.identity) as GameObject; SpriteRenderer instanceSpriteRenderer = gridElementInstance.GetComponent <SpriteRenderer>(); GridObjectBehavior behavior = gridElementInstance.GetComponent <GridObjectBehavior>(); gridElementInstance.transform.SetParent(gridContainer); averagePosition += new Vector3(reversedYposition.x, reversedYposition.y, 0); gridElementInstance.name = track.type + "_track"; behavior.behaviorType = GridObjectBehavior.BehaviorTypes.track; behavior.track = track; switch (track.type) { case 'J': // Straight_00 instanceSpriteRenderer.sprite = gridElementDictionary["straight_road"]; gridElementInstance.transform.Rotate(0, 0, 90); break; case 'E': // Straight_01 instanceSpriteRenderer.sprite = gridElementDictionary["straight_road"]; break; case 'N': // ThreeWay_00 instanceSpriteRenderer.sprite = gridElementDictionary["threeway_road"]; gridElementInstance.transform.Rotate(0, 0, 90); break; case 'M': // ThreeWay_01 instanceSpriteRenderer.sprite = gridElementDictionary["threeway_road"]; gridElementInstance.transform.Rotate(0, 0, 180); break; case 'K': // ThreeWay_02 instanceSpriteRenderer.sprite = gridElementDictionary["threeway_road"]; gridElementInstance.transform.Rotate(0, 0, -90); break; case 'G': // ThreeWay_03 instanceSpriteRenderer.sprite = gridElementDictionary["threeway_road"]; break; case 'F': // Turn_00 instanceSpriteRenderer.sprite = gridElementDictionary["corner_road"]; gridElementInstance.transform.Rotate(0, 0, 90); break; case 'C': // Turn_01 instanceSpriteRenderer.sprite = gridElementDictionary["corner_road"]; break; case 'I': // Turn_02 instanceSpriteRenderer.sprite = gridElementDictionary["corner_road"]; gridElementInstance.transform.Rotate(0, 0, 270); break; case 'L': // Turn_03 instanceSpriteRenderer.sprite = gridElementDictionary["corner_road"]; gridElementInstance.transform.Rotate(0, 0, 180); break; case 'O': // FourWay instanceSpriteRenderer.sprite = gridElementDictionary["fourway_road"]; gridElementInstance.transform.Rotate(0, 0, 180); break; /*A - EAST DEAD * B - NORTH DEAD * D - WEST DEAD * H - SOUTH DEAD*/ ///* TODO: Enable Dead ends case 'A': instanceSpriteRenderer.sprite = gridElementDictionary["deadEnd_road"]; gridElementInstance.transform.Rotate(0, 0, 90); break; case 'B': instanceSpriteRenderer.sprite = gridElementDictionary["deadEnd_road"]; //gridElementInstance.transform.Rotate(0,0,180); break; case 'D': instanceSpriteRenderer.sprite = gridElementDictionary["deadEnd_road"]; gridElementInstance.transform.Rotate(0, 0, -90); break; case 'H': instanceSpriteRenderer.sprite = gridElementDictionary["deadEnd_road"]; gridElementInstance.transform.Rotate(0, 0, 180); break; //*/ default: instanceSpriteRenderer.sprite = null; break; } instanceSpriteRenderer.color = new Color(0.2f, 0.2f, 0.2f, 1f); currentLevelObjects.Add(behavior); } averagePosition = averagePosition / gridTracks.Count; worldCamera.transform.position = new Vector3(averagePosition.x, averagePosition.y, -15); float levelheight = GameManager.Instance.GetLevelHeight(); float levelRatio = GameManager.Instance.GetLevelWidth() / GameManager.Instance.GetLevelHeight(); if (levelRatio > 1.78f) // 16:9 { Debug.Log("WIDER LEVEL " + levelRatio); levelheight *= (levelRatio / 1.78f); levelheight /= 0.9f; // To make room for the right banner } else { levelheight += 1; } worldCamera.orthographicSize = (levelheight / 2.0f) / 0.78f; // To make room for the bottom banner foreach (GridComponent gridComponent in gridComponents) { int color = gridComponent.configuration.color; int positionX = gridComponent.posX; int positionY = GameManager.Instance.GetLevelHeight() - gridComponent.posY; string type = gridComponent.type; GameObject gridElementInstance = Instantiate(gridElementPrefab, new Vector3(positionX, positionY), Quaternion.identity) as GameObject; SpriteRenderer instanceSpriteRenderer = gridElementInstance.GetComponent <SpriteRenderer>(); instanceSpriteRenderer.sortingOrder = Constants.ComponentSortingOrder.basicComponents; //instanceSpriteRenderer.color = colorDictionary[color]; GridObjectBehavior behavior = gridElementInstance.GetComponent <GridObjectBehavior>(); if (type == "signal") { Signal_GridObjectBehavior signal_Behavior = gridElementInstance.AddComponent <Signal_GridObjectBehavior>(); signal_Behavior.highlightObject = behavior.highlightObject; signal_Behavior.lineRenderer = gridElementInstance.GetComponentInChildren <LineRenderer>(); signal_Behavior.teleportTrail = behavior.teleportTrail; signal_Behavior.lockObject = behavior.lockObject; Destroy(behavior); behavior = signal_Behavior; } else if (type == "thread") { Thread_GridObjectBehavior thread_Behavior = gridElementInstance.AddComponent <Thread_GridObjectBehavior>(); thread_Behavior.highlightObject = behavior.highlightObject; thread_Behavior.teleportTrail = behavior.teleportTrail; Destroy(behavior); behavior = thread_Behavior; } else if (type == "diverter") { Diverter_GridObjectBehavior diverter_Behavior = gridElementInstance.AddComponent <Diverter_GridObjectBehavior>(); diverter_Behavior.highlightObject = behavior.highlightObject; diverter_Behavior.teleportTrail = behavior.teleportTrail; Destroy(behavior); behavior = diverter_Behavior; gridElementInstance.layer = 8; } else if (type == "delivery") { Delivery_GridObjectBehavior delivery_Behavior = gridElementInstance.AddComponent <Delivery_GridObjectBehavior>(); delivery_Behavior.highlightObject = behavior.highlightObject; delivery_Behavior.teleportTrail = behavior.teleportTrail; Destroy(behavior); behavior = delivery_Behavior; } gridElementInstance.transform.SetParent(gridContainer); gridElementInstance.name = type; behavior.behaviorType = GridObjectBehavior.BehaviorTypes.component; behavior.component = gridComponent; instanceSpriteRenderer.sprite = GetSprite(gridComponent); currentLevelObjects.Add(behavior); gridObjectLevelIDDictionary.Add(gridComponent.id, behavior); gridObjectLevelPositionDictionary.Add(behavior.transform.position, behavior); behavior.InitializeGridComponentBehavior(); } }
public void PlaceGridElementAtLocation(Vector2 inputPosition, PlayerInteraction_GamePhaseBehavior.MenuOptions inputGridElement) { Vector3 testPosition = worldCamera.ScreenToWorldPoint(inputPosition); testPosition.z = 0; testPosition.x = Mathf.RoundToInt(testPosition.x); testPosition.y = Mathf.RoundToInt(testPosition.y); GridComponent c = new GridComponent(); c.configuration = new Configuration(); string type = "package_exchangepoint_00"; switch (inputGridElement) { case PlayerInteraction_GamePhaseBehavior.MenuOptions.semaphore: type = "semaphore"; break; case PlayerInteraction_GamePhaseBehavior.MenuOptions.button: type = "signal"; break; } c.editable = "E"; c.placedBy = "P"; playerPlacedElementCount++; c.id = 9000 + playerPlacedElementCount; c.posX = (int)testPosition.x; c.posY = (int)testPosition.y; c.type = type; //inputGridElement.ToString(); c.configuration.link = -1; GameObject gridElementInstance = Instantiate(gridElementPrefab, testPosition, Quaternion.identity) as GameObject; SpriteRenderer instanceSpriteRenderer = gridElementInstance.GetComponent <SpriteRenderer>(); instanceSpriteRenderer.sortingOrder = Constants.ComponentSortingOrder.basicComponents; instanceSpriteRenderer.sprite = GetSprite(c); gridElementInstance.transform.SetParent(gridContainer); //instanceSpriteRenderer.color = colorDictionary[color]; GridObjectBehavior behavior = gridElementInstance.GetComponent <GridObjectBehavior>(); if (type == "signal") { Signal_GridObjectBehavior signal_Behavior = gridElementInstance.AddComponent <Signal_GridObjectBehavior>(); signal_Behavior.highlightObject = behavior.highlightObject; signal_Behavior.lineRenderer = gridElementInstance.GetComponentInChildren <LineRenderer>(); signal_Behavior.teleportTrail = behavior.teleportTrail; Destroy(behavior); behavior = signal_Behavior; } behavior.component = c; behavior.behaviorType = GridObjectBehavior.BehaviorTypes.component; Vector2 reverseYposition = new Vector2(c.posX, GameManager.Instance.GetLevelHeight() - c.posY); behavior.UpdateGridObjectPosition(reverseYposition); currentLevelObjects.Add(behavior); gridObjectLevelIDDictionary.Add(behavior.component.id, behavior); gridObjectLevelPositionDictionary.Add(behavior.transform.position, behavior); behavior.InitializeGridComponentBehavior(); }