public void InitArmyInfo(ArmyInfo ai) { armyInfo = ai; armyInfo.armyCtrl = GetComponent <ArmyController>(); SetArmyKingFlag(); if (armyInfo.cityTo != -1) { if (pathfinding == null) { pathfinding = GameObject.FindWithTag("Pathfinding").GetComponent <MyPathfinding>(); } SetRoute(pathfinding.GetRoute(armyInfo.pos, armyInfo.cityTo)); } state = (ArmyState)armyInfo.state; timeTick = armyInfo.timeTick; if (state == ArmyState.Garrison) { exSprite moveSprite = GetComponent <exSprite>(); exSpriteAnimation moveAnim = GetComponent <exSpriteAnimation>(); moveAnim.Stop(); int frame = armyInfo.direction; if (frame == -1) { frame = 0; } moveAnim.SetFrame("ArmyGarrison", frame); Vector3 pos = flagPos[3 + frame]; if (!armyInfo.isFlipped) { pos.x = -pos.x; } else { isHFlipped = true; moveSprite.HFlip(); exSprite flagSprite = flagCtrl.GetComponent <exSprite>(); BoxCollider flagCol = flagCtrl.GetComponent <BoxCollider>(); flagSprite.HFlip(); flagCol.center = new Vector3(-flagCol.center.x, flagCol.center.y, flagCol.center.z); } flagCtrl.localPosition = pos; } else { CalcDirection(); } }
void CalcDirection() { if (route == null || route.Count == 0) { return; } Vector3 target = route[0]; Vector3 targetDir = target - transform.position; Vector3 forward = Vector3.right; float angle = Vector3.Angle(targetDir, forward); int flag = 0; if (angle <= 30) { flag = 0; } else if (angle > 150) { flag = 1; } else if (angle > 30 && angle <= 90) { if (target.y >= transform.position.y) { flag = 2; } else { flag = 4; } } else if (angle > 90 && angle <= 150) { if (target.y > transform.position.y) { flag = 3; } else { flag = 5; } } exSprite moveSprite = GetComponent <exSprite>(); exSpriteAnimation moveAnim = GetComponent <exSpriteAnimation>(); exSprite flagSprite = flagCtrl.GetComponent <exSprite>(); BoxCollider flagCol = flagCtrl.GetComponent <BoxCollider>(); if (flag % 2 == 0) { if (!isHFlipped) { isHFlipped = true; moveSprite.HFlip(); flagSprite.HFlip(); flagCol.center = new Vector3(-flagCol.center.x, flagCol.center.y, flagCol.center.z); } } else { if (isHFlipped) { isHFlipped = false; moveSprite.HFlip(); flagSprite.HFlip(); flagCol.center = new Vector3(-flagCol.center.x, flagCol.center.y, flagCol.center.z); } } Vector3 pos = Vector3.zero; flag /= 2; switch (state) { case ArmyState.Running: animName = animNames[flag]; pos = flagPos[flag]; break; case ArmyState.Escape: animName = animNames[flag + 3]; pos = flagPos[flag + 6]; break; case ArmyState.Victory: animName = animNames[flag + 6]; pos = flagPos[flag * 3 + 9]; break; } if (!moveAnim.IsPlaying(animName)) { moveAnim.Play(animName); } if (!isHFlipped) { pos.x = -pos.x; } flagCtrl.localPosition = pos; }