void ChangeState(MSTATE newState) { if (state != newState) { timeInState = 0; state = newState; } }
public void EngageToyMP(ToyMousePoint tmp) { motives[(int)MSTIMULUS.BOREDOM].Update(tmp.motivesRatio.boredom * (1 - (Vector3.Distance(tmp.vectorAffinity, affinity) / 255)), 1); foreach (int i in tmp.pullAuditTrail) { if (i != index) { IncreaseAffection(i, 0.2f); } } state = MSTATE.WAIT; }
// Update is called once per frame void Update() { if (PlayScene.state == PlayScene.STATE.IDLE) { towers = Physics.OverlapSphere(this.gameObject.transform.position, detectRange); amtToMove = PlayScene.playSpeed * moveSpeed * Time.deltaTime; if (speedTimer >= 0) { speedTimer -= Time.deltaTime * PlayScene.playSpeed; this.GetComponent <tk2dSprite>().color = new Color(53f, 96f, 255f, 255f) / 255f; // blue } else { moveSpeed = finalMoveSpeed; this.GetComponent <tk2dSprite>().color = new Color(255f, 255f, 255f, 255f) / 255f; // white } switch (mState) { case MSTATE.WAIT: mState = MSTATE.MOVE; break; case MSTATE.MOVE: changeImageTimer += Time.deltaTime * PlayScene.playSpeed; if (changeImageTimer >= 0.1f) { if (moveIN < moveImageNumber) { moveIN += 1; } else { moveIN = 1; } GetComponent <tk2dSprite>().SetSprite(GetComponent <tk2dSprite>().GetSpriteIdByName(moveIN.ToString())); changeImageTimer = 0; } cTarget = null; for (int i = 0; i < towers.Length; i++) { if (towers[i].gameObject.tag == "TOWER" || towers[i].gameObject.tag == "CASTLE") { if (this.gameObject.transform.position.x - 15 < towers[i].gameObject.transform.position.x) { if (this.gameObject.name == "monster") { if (Mathf.Abs(this.gameObject.transform.position.y - towers[i].gameObject.transform.position.y) > 20) { continue; } } if (cTarget == null) { cTarget = towers[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 - towers[i].gameObject.transform.position.x), 2) + Mathf.Pow((this.gameObject.transform.position.y - towers[i].gameObject.transform.position.y), 2)); if (a > b) { cTarget = towers[i]; } } } } } if (cTarget != null) { mState = MSTATE.ATTACK; target = cTarget.gameObject.transform; return; } if (transform.position.x < RoadEnd1.transform.position.x) { transform.Translate(Vector3.right * amtToMove); } break; case MSTATE.ATTACK: if (attackImageFlag == true) { changeImageTimer += Time.deltaTime * PlayScene.playSpeed; if (changeImageTimer >= attackSpeed - attackImageNumber * 0.2f) { if (changeImageTimer >= 0.2f + (attackSpeed - attackImageNumber * 0.2f)) { if (attackIN < attackImageNumber) { attackIN += 1; changeImageTimer = attackSpeed - attackImageNumber * 0.2f; } else { attackIN = 1; changeImageTimer = 0; } GetComponent <tk2dSprite>().SetSprite(GetComponent <tk2dSprite>().GetSpriteIdByName("attack" + attackIN.ToString())); } } } else if (attackImageFlag == false) { changeImageTimer += Time.deltaTime * PlayScene.playSpeed; if (changeImageTimer >= 0.1f) { if (moveIN < moveImageNumber) { moveIN += 1; } else { moveIN = 1; } GetComponent <tk2dSprite>().SetSprite(GetComponent <tk2dSprite>().GetSpriteIdByName(moveIN.ToString())); changeImageTimer = 0; } } if (target == null) { mState = MSTATE.MOVE; } else if (target != null) { if (Mathf.Sqrt(Mathf.Pow((transform.position.x - target.transform.position.x), 2) + Mathf.Pow((transform.position.y - target.transform.position.y), 2)) > attackRange) { attackImageFlag = false; Vector3 v = (target.transform.position - this.gameObject.transform.position).normalized; transform.Translate(v * amtToMove); } else { attackTimer += Time.deltaTime * PlayScene.playSpeed; attackImageFlag = true; if (attackTimer > attackSpeed) { if (target.tag == "CASTLE") { target.gameObject.transform.parent.gameObject.SendMessage("DamagedByMonster", attackDamage, SendMessageOptions.DontRequireReceiver); } else { target.gameObject.SendMessage("DamagedByMonster", attackDamage, SendMessageOptions.DontRequireReceiver); } attackTimer = 0; } } } break; case MSTATE.DEAD: if (this.gameObject.transform.FindChild("Progress Bar") != null) { Destroy(this.gameObject.transform.FindChild("Progress Bar").gameObject); } GetComponent <tk2dSprite>().SetSprite(GetComponent <tk2dSprite>().GetSpriteIdByName("die")); deadTimer -= Time.deltaTime * PlayScene.playSpeed; GetComponent <tk2dSprite>().color = Color.Lerp(new Color(1, 1, 1, 0), new Color(1, 1, 1, 1), deadTimer / 1.0f); // fade out if (deadTimer <= 0) { deadTimer = 1; PlayScene.CurrentMonsterCount--; PlaySceneObj.MonsterDead(monsterNumber); user.userInfo.achieveInfo.killEnemyCount++; SoundManager.Effect_MonsterDestroy_ON(); Destroy(this.gameObject); } break; } if (health <= 0) { mState = MSTATE.DEAD; } } }