void Update() { switch (mMode) { case Mode.CollectingGold_InsideMine: if (!goldMine.hasGuy(gameObject)) { var townhall = GameManager.instance.findNearest <TownHall>(transform.localPosition); if (townhall == null) { mMode = Mode.Default; } else { Vector3 pos = townhall.transform.localPosition; Vector2 pos2D = new Vector2(pos.x, pos.y); if (!GameManager.instance.navigateAgentToPos(mNavMeshAgent, pos2D)) { mMode = Mode.Default; goldMine = null; } else { mMode = Mode.CollectingGold_GoingToTownHall; } } } break; case Mode.GoingToConstruction: if (!targetConstruction || targetConstruction.builder != null || !targetConstruction.enabled) { mMode = Mode.Default; } else if (!mNavMeshPosition.isFollowingPath()) { Vector3 pos = targetConstruction.transform.position; GameManager.instance.navigateAgentToPos(mNavMeshAgent, new Vector2(pos.x, pos.y)); } break; case Mode.Constructing: if (targetConstruction == null || targetConstruction.builder == null) { gameObject.SetActive(true); mMode = Mode.Default; } break; } int angle = mNavMeshPosition.rotation; if (angle <= 4) { transform.localScale = new Vector3(1.0f, 1.0f, 1.0f); } else { transform.localScale = new Vector3(-1.0f, 1.0f, 1.0f); angle -= 4; if (angle == 1) { angle = 3; } else if (angle == 3) { angle = 1; } } mAnimator.SetInteger("angle", angle); mAnimator.SetBool("walking", mNavMeshPosition.isFollowingPath()); mAnimator.SetBool("hasGold", carriesGold > 0); }
private void OnTriggerEnter2D(Collider2D collision) { switch (mMode) { case Mode.CollectingGold_GoingToMine: var collidingGoldMine = collision.gameObject.GetComponent <GoldMine>(); if (collidingGoldMine) { if (collidingGoldMine.goldLeft <= 0) { mMode = Mode.Default; } else { if (carriesGold < goldCarryCapacity) { int amount = Math.Min(collidingGoldMine.goldLeft, goldCarryCapacity - carriesGold); carriesGold += amount; collidingGoldMine.goldLeft -= amount; } mMode = Mode.CollectingGold_InsideMine; collidingGoldMine.addGuy(gameObject); goldMine = collidingGoldMine; } } break; case Mode.GoingToConstruction: var collidingConstruction = collision.gameObject.GetComponent <Construction>(); if (collidingConstruction && collidingConstruction.enabled && collidingConstruction == targetConstruction) { if (collidingConstruction.builder != null) { mMode = Mode.Default; } else { mMode = Mode.Constructing; collidingConstruction.builder = this; gameObject.SetActive(false); } } break; case Mode.CollectingGold_GoingToTownHall: var townHall = collision.gameObject.GetComponent <TownHall>(); if (townHall) { if (carriesGold <= 0) { mMode = Mode.Default; } else { GameManager.instance.addGold(carriesGold); carriesGold = 0; if (goldMine == null) { mMode = Mode.Default; } else { Vector3 pos = goldMine.transform.localPosition; Vector2 pos2D = new Vector2(pos.x, pos.y); if (!GameManager.instance.navigateAgentToPos(mNavMeshAgent, pos2D)) { mMode = Mode.Default; } else { mMode = Mode.CollectingGold_GoingToMine; } } } } break; } }