public Vector3 GetConnectionOffset(BuildTile.TileConnections conn) { Vector3 offset = Vector3.zero; switch (conn) { case BuildTile.TileConnections.NORTH: offset = new Vector3(0, 0, 1); break; case BuildTile.TileConnections.EAST: offset = new Vector3(1, 0, 0); break; case BuildTile.TileConnections.SOUTH: offset = new Vector3(0, 0, -1); break; case BuildTile.TileConnections.WEST: offset = new Vector3(-1, 0, 0); break; } return(offset * ((float)tileSize / 2.0f)); }
public Vector3 GetConnectionPoint(Vector3Int worldTileLocation, BuildTile.TileConnections conn) { var worldPos = GetInstantiationLocation(worldTileLocation); Vector3 offset = Vector3.zero; switch (conn) { case BuildTile.TileConnections.NORTH: offset = new Vector3(0, 0, 1); break; case BuildTile.TileConnections.EAST: offset = new Vector3(1, 0, 0); break; case BuildTile.TileConnections.SOUTH: offset = new Vector3(0, 0, -1); break; case BuildTile.TileConnections.WEST: offset = new Vector3(-1, 0, 0); break; } return(worldPos + offset * ((float)tileSize / 2.0f)); }
void Start() { rbody = GetComponent <Rigidbody>(); tilePosition = GamePlay.grid.GetTileLocation(transform.position); if (!GamePlay.grid.CheckWithinBounds(tilePosition)) { enabled = false; return; } var cellObj = GamePlay.grid.GetCellData(GamePlay.grid.GetTileLocation(transform.position)).cellObject; if (cellObj != null) { currentRail = cellObj.GetComponent <RailConfiguration>(); transform.forward = currentRail.transform.forward; currentDirection = GridController.GetDirectionFromRotationInt(GamePlay.grid.GetCellData(GamePlay.grid.GetTileLocation(transform.position)).rotations); } }
public static BuildTile.TileConnections GetReciprocalConnection(BuildTile.TileConnections connection) { switch (connection) { case BuildTile.TileConnections.NORTH: return(BuildTile.TileConnections.SOUTH); case BuildTile.TileConnections.EAST: return(BuildTile.TileConnections.WEST); case BuildTile.TileConnections.SOUTH: return(BuildTile.TileConnections.NORTH); case BuildTile.TileConnections.WEST: return(BuildTile.TileConnections.EAST); default: return(BuildTile.TileConnections.NONE); } }
public Vector3Int GetConnectingTileOffset(BuildTile.TileConnections connection) { switch (connection) { case BuildTile.TileConnections.NORTH: return(new Vector3Int(0, 0, 1)); case BuildTile.TileConnections.EAST: return(new Vector3Int(1, 0, 0)); case BuildTile.TileConnections.SOUTH: return(new Vector3Int(0, 0, -1)); case BuildTile.TileConnections.WEST: return(new Vector3Int(-1, 0, 0)); default: return(new Vector3Int(0, 0, 0)); } }
void Update() { if (currentRail == null) { enabled = false; rbody.isKinematic = false; rbody.AddForce(tileVelocity + Vector3.up * 5.0f, ForceMode.Impulse); return; } transform.position = GamePlay.grid.GetInstantiationLocation(tilePosition) + Vector3.up * heightOffset; railProgress += railSpeed * Time.deltaTime; while (railProgress >= 1.0f) { // get next tile var thing = currentDirection; foreach (var route in currentRail.connections) { if (GridController.GetReciprocalConnection(route.Key) == thing) { continue; } thing = route.Key; break; } currentRail = currentRail.connections[thing]; if (currentRail == null) { return; } prevTilePosition = tilePosition; tilePosition = currentRail.GetTilePosition(); transform.forward = currentRail.transform.forward; currentDirection = thing; railProgress -= 1.0f; } }
public void BuyItem(bool _cheatMode) { if (GamePlay.inventory == null) { GamePlay.inventory = new Dictionary <string, BaseItem>(); } if (_cheatMode || GamePlay.coin > CurrentItem.purchasecost) { if (!CanBuild(CurrentItem.itemname)) { BuildTile bt = new BuildTile(); bt.buildPrefab = Resources.Load(CurrentItem.prefab) as GameObject; bt.myName = CurrentItem.itemname; bt.tileType = CurrentItem.AssetType;// == AssetTypes.TRACK ? BuildTile.TileTypes.RAIL : BuildTile.TileTypes.SCENARY; CurrentItem.qtyInStock = 1; bt.dangerContribution = CurrentItem.dangerContribution > 5?CurrentItem.dangerContribution:5; if (bt.tileType == BuildTile.TileTypes.RAIL) { BuildTile.TileConnections[] baseConnections = new BuildTile.TileConnections[CurrentItem.connections.Length]; //Decode connections. int r = -1; string cons = CurrentItem.connections.ToUpper(); for (int i = 0; i < CurrentItem.connections.Length; i++) { switch (cons[i]) { case 'N': r = 0; break; case 'E': r = 1; break; case 'S': r = 2; break; case 'W': r = 3; break; default: break; } baseConnections[i] = (BuildTile.TileConnections)r; } bt.baseConnections = baseConnections; } bt.ForceValidate(); if (!GamePlay.inventory.ContainsKey(CurrentItem.itemname)) { GamePlay.inventory.Add(CurrentItem.itemname, CurrentItem); DesignController.instance.AddBuildTile(bt); DesignController.instance.buttonsByName[CurrentItem.itemname].SetButtonState(true); } } else { incInventory(CurrentItem.itemname); if (GamePlay.inventory[CurrentItem.itemname].qtyInStock > 0) { DesignController.instance.buttonsByName[CurrentItem.itemname].SetButtonState(true); } } GamePlay.coin -= !_cheatMode? CurrentItem.purchasecost:0; wallet.text = $"Currante Balance:{GamePlay.coin.ToString()}"; } else { //TODO do a different thing to say not enough cash.\ Sequence dialogBounceFade = DOTween.Sequence(); dialogBounceFade.Append(fadeDialog.DOFade(1, .3f)); dialogBounceFade.AppendInterval(1); dialogBounceFade.Append(fadeDialog.DOFade(0, .3f)); dialogBounceFade.PlayForward(); } }