void setRocks() { var topRockTemplate = this.gameObject.transform.GetChild(0); for (var xx = 0; xx < MinerData.XCOUNT; ++xx) { var topRockCopy = Instantiate(topRockTemplate); topRockCopy.transform.position = new Vector3(xx * 15, 0); string spriteCount = ("" + ((xx % 6) + 1)).PadLeft(2, '0'); var spriteName = "world top rocks "; if (xx == 22) { spriteName += "empty"; } else { spriteName += spriteCount; } var spriteAtlasIndex = SpriteAtlas[spriteName]; topRockCopy.GetComponent<SpriteRenderer>().sprite = spriteCollection[spriteAtlasIndex];//Resources.Load<Sprite>(spriteName); } topRockTemplate.gameObject.SetActive(false); var template = this.gameObject.transform.GetChild(1); var hardFactor = 10.0; var graniteFactor = 98.0; var graniteFactorOriginal = 90.0; var graniteFactorOriginal1 = 65.0; var endStoneFactor = 101.0; var arrTypes = new string[MinerData.XCOUNT]; Random rnd = new Random(); for (var xx = 0; xx < MinerData.XCOUNT; ++xx) { arrTypes[xx] = "light"; } for (var yy = 0; yy < MinerData.YCOUNT; yy++) { var invisibleWall = Instantiate(invisibleWallTemplate, new Vector3(180, yy * -20 - 30), Quaternion.identity) as Transform; hardFactor = 10; graniteFactor = graniteFactorOriginal - (yy / 5.0); int xCave = Random.Range(0, MinerData.XCOUNT); int yRnd = Random.Range(0, 101); bool hasCave = yRnd < yy; for (var xx = 0; xx < MinerData.XCOUNT; xx++) { string type = "light"; string afterType = "light empty"; var rock = Instantiate(template); rock.name = "Rock_" + xx + "_" + yy; rock.SetParent(this.gameObject.transform); rock.transform.position = new Vector3(xx * 15, (yy * -20) - 10); if (!MinerSaveGame.Instance.Current.Loaded) // isFresh (also nicht aus Savegame) { var randomNumber = Mathf.FloorToInt(Random.Range(0, 100f)); if (arrTypes[xx] == "hard") { hardFactor = 60; } if (arrTypes[xx] == "granite") { graniteFactor = graniteFactorOriginal1 - (yy / 5.0); } if (randomNumber < hardFactor) { type = "hard"; hardFactor = 60; } else { hardFactor = 10; } if (randomNumber > graniteFactor) { type = "granite"; graniteFactor = graniteFactorOriginal1 - (yy / 5.0); } else { graniteFactor = graniteFactorOriginal - (yy / 5.0); } if (yy == 96) endStoneFactor = 75; if (yy == 97) endStoneFactor = 50; if (yy == 98) endStoneFactor = 25; if (randomNumber > endStoneFactor) { type = "endstone"; } arrTypes[xx] = type; if (xx == 22) { type = "light empty"; } if (yy >= 99) { type = "endstone"; } if (type == "light empty") { afterType = "light empty"; } else { if (hasCave && xCave == xx) { afterType = "cave " + type; } else { afterType = type + " empty"; } } // Im Savegame speíchern MinerData.Rock r = new MinerData.Rock(); r.Type = type; r.AfterType = afterType; r.X = xx; r.Y = yy; r.CounterInterval = 0; r.CounterStart = 0; r.EnemyHealth = 0; r.EnemyState = EnemyState.None; r.EnemyType = EnemyType.None; MinerSaveGame.Instance.Current.setRock(xx, yy, r); } else { type = MinerSaveGame.Instance.Current.Rocks[xx, yy].Type; } if (type.Contains("cave")) { Transform enemy = CastEnemy(MinerSaveGame.Instance.Current.Rocks[xx, yy], true); } int randomImage = Random.Range(1, type.Contains("cave") ? 5 : 6); string strRandomImage = "" + randomImage; strRandomImage = strRandomImage.PadLeft(2, '0'); //string spriteName = "rocks/rock " + type; string spriteName = "rock " + type; if (type.IndexOf("empty") < 0) { spriteName += " " + strRandomImage; } int spriteAtlasIndex = SpriteAtlas[spriteName]; rock.GetComponent<SpriteRenderer>().sprite = spriteCollection[spriteAtlasIndex]; //Resources.Load<Sprite>(spriteName); } // xx } // yy foreach (InventoryItem candle in MinerSaveGame.Instance.Current.Candles) { CastCandle(this.transform, candle); } MinerSaveGame.Instance.Current.Loaded = true; template.gameObject.SetActive(false); }
// Update is called once per frame void Update () { CheckIfAlive(); if (gameOver.activeSelf) return; HandleInGameMenu(); HandleInventory(); UpdateDayTime(); CheckLevel(); float step = Data.Speed * BASIC_SPEED * Time.deltaTime; // Movement Speed bool left = false, right = false, up = false, down = false; Vector3 targetElevator = elevator.transform.position; Vector3 currentTarget = target; bool arrived = false; bool workDone = false; bool itemUseDone = false; bool shouldWalk = false; bool hasWorked = (oldAction == Action.Pick || oldAction == Action.Shovel);//workingRock != null; bool hasUsedItem = oldAction == Action.UseItem; MinerData.Rock oldWorkingRock = workingRock; int pos = elevator.transform.position.y >= 0 ? 0 : Mathf.Abs((int)(elevator.transform.position.y + 10) / 20) + 1; if (elevatorLabel.GetComponent<UnityEngine.UI.Text>().text != pos.ToString()) elevatorLabel.GetComponent<UnityEngine.UI.Text>().text = pos.ToString(); #if UNITY_EDITOR if (HasLineCave(pos - 1)) { elevatorLabel.GetComponent<UnityEngine.UI.Text>().color = Color.yellow; } else { elevatorLabel.GetComponent<UnityEngine.UI.Text>().color = Color.red; } #endif GetComponent<Animator>().SetFloat("walkingSpeed", (Data.Speed / 3.5f) * 0.7f); if (!inventory.activeSelf && !inGameMenu.activeSelf && !inventoryWasClosed) { if (Input.GetAxis("Horizontal") < -0.1) { left = true; } else if (Input.GetAxis("Horizontal") > 0.1) { right = true; } else if (Input.GetAxis("Vertical") < -0.1) { down = true; } else if (Input.GetAxis("Vertical") > 0.1) { up = true; } if (Input.GetMouseButton(0) && Input.mousePosition.x < Screen.width * 0.25 && !mouseOverRucksack) { left = true; } else if (Input.GetMouseButton(0) && Input.mousePosition.x > Screen.width * 0.75 && !mouseOverRucksack) { right = true; } else if (Input.GetMouseButton(0) && Input.mousePosition.y < Screen.height * 0.25 && !mouseOverRucksack) { down = true; } else if (Input.GetMouseButton(0) && Input.mousePosition.y > Screen.height * 0.75 && !mouseOverRucksack) { up = true; } if (Input.GetButtonUp("Torch")) { var torches = GameObject.FindGameObjectsWithTag("Torch"); if (torches.Count() == 0) { var torch = Instantiate(Resources.Load<Transform>("prefabs/Torch")); torch.SetParent(this.transform, false); //Debug.Log("Instantiating new torch " + torch.name); } else { foreach(var torch in torches) { if (torch.name.Contains("Torch")) { Destroy(torch); } } } } } if (isAnimated) // gucken, ob er mit irgendwas fertig ist { // Am Ziel angekommen? if (transform.position == target && oldAction == Action.Move) { //Debug.Log("arrived"); arrived = true; Data.X = transform.position.x; Data.Y = transform.position.y; Data.ElevatorX = elevator.position.x; Data.ElevatorY = elevator.position.y; } // Fertig mit der Arbeit? if (Time.time - workStartedTime > estimatedWorkTime && hasWorked) { //Debug.Log("work done"); workDone = true; workingRock = null; } // Kerze if (hasUsedItem && !itemUseHandled && this.GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).IsName("placing") && this.GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).normalizedTime > (0.5f * this.GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).speed)) { HandleItemUse(); } // Apfel if (hasUsedItem && !itemUseHandled && this.GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).IsName("apple") && this.GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).normalizedTime > (0.6f * this.GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).speed)) { HandleItemUse(); } if (hasUsedItem && !(this.GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).IsName("apple") || this.GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).IsName("placing"))) { itemUseDone = true; } if (arrived || (workDone && hasWorked) || (hasUsedItem && itemUseDone)) { isAnimated = false; if (moveElevator) { elevator.transform.position = transform.position; moveElevator = false; } } } if (!isAnimated) { moveElevator = false; if (left && transform.position.x > 8) { target = gameObject.transform.position + new Vector3(-15, 0); GetComponent<SpriteRenderer>().flipX = false; shouldWalk = true; } if (right && transform.position.x < (elevator.transform.position.y == transform.position.y ? 330 : 315)) { target = transform.position + new Vector3(15, 0); GetComponent<SpriteRenderer>().flipX = true; shouldWalk = true; } if (down && transform.position.y > -2000 && (transform.position.y != 10 || inElevator)) { target = transform.position + new Vector3(0, -20); if (transform.position.y == 10) { target += new Vector3(0, -10); } if (inElevator) { moveElevator = true; } shouldWalk = true; } if (up && transform.position.y < 10 && (transform.position.y != 10 || inElevator) && (transform.position.y != -20 || inElevator)) { target = transform.position + new Vector3(0, 20); if (transform.position.y == -20) { target += new Vector3(0, 10); } if (inElevator) { moveElevator = true; } shouldWalk = true; } } if (Input.GetMouseButtonUp(0)) { inventoryWasClosed = false; } //int targetGridX = (int)target.x / 15; int targetGridX, targetGridY; RockGroupBehaviour.GetGridPosition(target, true, out targetGridX, out targetGridY); Action newAction = oldAction; MinerData.Rock newWorkingRock = null; if (arrived || workDone || itemUseDone) { //Debug.Log("Done, idling"); newAction = Action.Idle; } if (shouldWalk) // kein else if, weil er sonst er stoppen würde und dann weiterlaufen, er soll aber direkt weiterlaufen { newAction = Action.Move; } if (workDone) { HandleWorkDone(oldWorkingRock); } if (arrived) { HandleArrived(); } if (newAction == Action.Idle && requestedAction != Action.Empty) { newAction = requestedAction; requestedAction = Action.Empty; } // Wenn er laufen soll, schauen, ob er buddeln müsste if (newAction == Action.Move && targetGridX < MinerData.XCOUNT && targetGridY < MinerData.YCOUNT && targetGridY >= 0 && targetGridX >= 0 && Data.Rocks[targetGridX, targetGridY] != null) { newWorkingRock = Data.Rocks[targetGridX, targetGridY]; if (!IsWalkable(targetGridX, targetGridY)) { newAction = Action.NeedsWork; } } string orientation = oldOrientation; // Richtung ermitteln if (target.x < transform.position.x) { orientation = "side"; } else if (target.x > transform.position.x) { orientation = "side"; } else if (target.y < transform.position.y) { orientation = "down"; } else if (target.y > transform.position.y) { orientation = "up"; } if (newAction == Action.NeedsWork) { // Arbeitstyp ermitteln if (newWorkingRock.Type == "hard") { newAction = Action.Pick; } else if (newWorkingRock.Type == "light") { newAction = Action.Shovel; } else { newAction = Action.Idle; } } if (newAction == Action.Collect) { if (newAction != oldAction) { GetComponent<Animator>().Play("placing"); isAnimated = true; //Debug.Log("Playing placing animation"); } } else if (newAction == Action.Idle || newAction == Action.NeedsWork) { target = currentTarget; if (newAction != oldAction) { //Debug.Log("Playing idle, Action = " + newAction); GetComponent<Animator>().Play("idle"); } } else if (newAction == Action.Move) { // speed up elevator if (moveElevator) step *= 1.25f; transform.position = Vector3.MoveTowards(transform.position, target, step); if (moveElevator) { targetElevator = target; elevator.transform.position = Vector3.MoveTowards(elevator.transform.position, targetElevator, step); } if (moveElevator) { GetComponent<Animator>().Play("idle"); } else if (newAction != oldAction || oldOrientation != orientation) { //Debug.Log("Playing walking"); GetComponent<Animator>().Play("walking"); } isAnimated = true; } else if (newAction == Action.Pick && (newAction != oldAction || oldOrientation != orientation)) { target = currentTarget; //Debug.Log("Playing pick"); GetComponent<Animator>().Play("pick " + orientation); workStartedTime = Time.time; estimatedWorkTime = 4.5f; workingRock = newWorkingRock; //Debug.Log(workingRock); isAnimated = true; } else if (newAction == Action.Shovel && (newAction != oldAction || oldOrientation != orientation)) { target = currentTarget; //Debug.Log("Playing spade " + orientation); GetComponent<Animator>().Play("spade " + orientation); workStartedTime = Time.time; estimatedWorkTime = 2.25f; workingRock = newWorkingRock; //Debug.Log(workingRock); isAnimated = true; } oldAction = newAction; oldOrientation = orientation; }