void ResetTile() { isReset = true; isReaped = false; tileState = TSTATE.PLANTABLE; spriteRenderer.sprite = null; seedType = 0; }
void ChangeState(TSTATE _state) { tileState = _state; switch (_state) { case TSTATE.PLANTABLE: activatedTile.SetActive(false); break; case TSTATE.ACTIVATED: activatedTile.SetActive(true); break; case TSTATE.STAGE1: activatedTile.SetActive(false); break; case TSTATE.STAGE2: ChangeImage(); //StartCoroutine(CheckTimer(plantedType)); break; case TSTATE.STAGE3: ChangeImage(); //StartCoroutine(CheckTimer(plantedType)); break; case TSTATE.STAGE4: ChangeImage(); if (seedType == 10005) { tileState = TSTATE.STAGE5; } //StartCoroutine(CheckTimer(plantedType)); break; case TSTATE.STAGE5: { if (seedType != 10005) { ChangeImage(); } if (isReaped) { ChangeState(TSTATE.PLANTABLE); } } break; } }
void UpdateVariable() { if (isStarted) { switch (plantedType) { case 0: { if (DataController.instance.data.day - plantedDay == 1 || DataController.instance.data.day - plantedDay == -20) { if (tileState != TSTATE.STAGE5) { Debug.Log("the day after"); dayAfter = true; tempState = (int)tileState; tempState++; ChangeState((TSTATE)tempState); Debug.Log("tile State now is" + tileState); plantedDay = DataController.instance.data.day; tileState = (TSTATE)tempState; dayAfter = false; } } } break; case 1: { if (DataController.instance.data.day - plantedDay == 2 || DataController.instance.data.day - plantedDay == -19) { if (tileState != TSTATE.STAGE5) { dayAfter_2 = true; tempState = (int)tileState; tempState++; ChangeState((TSTATE)tempState); plantedDay = DataController.instance.data.day; tileState = (TSTATE)tempState; dayAfter_2 = false; } } } break; } } }
// Start is called before the first frame update void Start() { player = FindObjectOfType <MovingObject>().gameObject; tileState = TSTATE.PLANTABLE; targetPos = GetComponent <Transform>(); }
// Update is called once per frame void Update() { if (PlayScene.state == PlayScene.STATE.IDLE) { if (finalHealth <= 0) { tState = TSTATE.DEAD; } switch (tState) { case TSTATE.WAIT: constructTime += Time.deltaTime * PlayScene.playSpeed; if (constructTime < buildTime) { float color = constructTime / buildTime; this.gameObject.GetComponent <tk2dSprite>().color = new Color(color * 255f, color * 255f, color * 255f, 255f) / 255f; return; } else { this.gameObject.GetComponent <tk2dSprite>().color = new Color(255f, 255f, 255f, 255f) / 255f; tState = TSTATE.SEARCH; constructTime = 0; } break; case TSTATE.SEARCH: ftime += Time.deltaTime; if (ftime < finalSpeed / PlayScene.playSpeed) { return; } cTarget = null; lTarget.Clear(); enemies = Physics.OverlapSphere(this.gameObject.transform.position, attackRange); if (ability == csClassTower.SpecialAbility.multiplexTarget) { monsterCount = 0; float[] distance = new float[enemies.Length]; int[] minPosition = new int[enemies.Length]; for (int i = 0; i < enemies.Length; i++) { minPosition[i] = i; distance[i] = 99999f; } for (int i = 0; i < enemies.Length; i++) { if (enemies[i].gameObject.tag == "MONSTER") { distance[i] = Mathf.Sqrt(Mathf.Pow((this.gameObject.transform.position.x - enemies[i].gameObject.transform.position.x), 2) + Mathf.Pow((this.gameObject.transform.position.y - enemies[i].gameObject.transform.position.y), 2)); monsterCount++; } } for (int i = 0; i < enemies.Length; i++) { float temp_value = 0; int temp_position = 0; for (int j = 0; j < enemies.Length - 1; j++) { if (distance[j] > distance[j + 1]) { temp_value = distance[j]; distance[j] = distance[j + 1]; distance[j + 1] = temp_value; temp_position = minPosition[j]; minPosition[j] = minPosition[j + 1]; minPosition[j + 1] = temp_position; } } } for (int i = 0; i < monsterCount; i++) { if (i == N_TARGET) { break; } lTarget.Add(enemies[minPosition[i]]); //Debug.Log("What is it : "+enemies[minPosition[i]]); tState = TSTATE.ATTACK; } } else { for (int i = 0; i < enemies.Length; i++) { if (enemies[i].gameObject.tag == "MONSTER") { if (enemies[i].gameObject.GetComponent <Monster>().mState == Monster.MSTATE.DEAD) { continue; } if (cTarget == null) { cTarget = enemies[i]; } else if (cTarget != null) { a = Mathf.Sqrt(Mathf.Pow((this.gameObject.transform.position.x - cTarget.gameObject.transform.position.x), 2) + Mathf.Pow((this.gameObject.transform.position.y - cTarget.gameObject.transform.position.y), 2)); b = Mathf.Sqrt(Mathf.Pow((this.gameObject.transform.position.x - enemies[i].gameObject.transform.position.x), 2) + Mathf.Pow((this.gameObject.transform.position.y - enemies[i].gameObject.transform.position.y), 2)); if (a > b) { cTarget = enemies[i]; } } } } if (cTarget != null) { tState = TSTATE.ATTACK; } } break; case TSTATE.ATTACK: ftime += Time.deltaTime; if (ftime < finalSpeed / PlayScene.playSpeed) { return; } if (ability == csClassTower.SpecialAbility.multiplexTarget) { tState = TSTATE.SEARCH; FireProcessing("multiplexTarget"); ftime = 0.0f; } else { if (cTarget != null) { if (cTarget.gameObject.GetComponent <Monster>().mState == Monster.MSTATE.DEAD) { cTarget = null; return; } switch (ability) { case csClassTower.SpecialAbility.Normal: FireProcessing("Normal"); break; case csClassTower.SpecialAbility.SlowSpeed: FireProcessing("SlowSpeed"); break; case csClassTower.SpecialAbility.Splash: FireProcessing("Splash"); break; } ftime = 0.0f; } if (cTarget == null) { tState = TSTATE.SEARCH; break; } a = Mathf.Sqrt(Mathf.Pow((this.gameObject.transform.position.x - cTarget.gameObject.transform.position.x), 2) + Mathf.Pow((this.gameObject.transform.position.y - cTarget.gameObject.transform.position.y), 2)); if (cTarget != null && a > attackRange) { tState = TSTATE.SEARCH; } } break; case TSTATE.DEAD: SoundManager.Effect_TowerDestroy_ON(); PlayScene.CurrentTowerCount--; Destroy(this.gameObject); break; } } }