public static void CKMove(this CharacterController cc, Vector3 targetPosition, BossStat stat) { Transform t = cc.transform; Vector3 deltaMove = Vector3.zero; Vector3 moveDir = targetPosition - t.position; moveDir.y = 0.0f; if (moveDir != Vector3.zero) { t.rotation = Quaternion.RotateTowards( t.rotation, Quaternion.LookRotation(moveDir), stat.TurnSpeed * Time.deltaTime); } Vector3 nextMove = Vector3.MoveTowards( t.position, targetPosition, stat.MoveSpeed * Time.deltaTime); deltaMove = nextMove - t.position; deltaMove += Physics.gravity * Time.deltaTime; cc.Move(deltaMove); }
private void Awake() { m_cc = GetComponent <CharacterController>(); m_stat = GetComponent <BossStat>(); m_anim = GetComponentInChildren <Animator>(); m_sight = GetComponentInChildren <Camera>(); m_playercc = GameObject.FindGameObjectWithTag("Player").GetComponent <CharacterController>(); m_playerTransform = m_playercc.transform; m_targetTransform = this.transform; BossState[] stateValues = (BossState[])System.Enum.GetValues(typeof(BossState)); foreach (BossState s in stateValues) { System.Type FSMType = System.Type.GetType("Boss" + s.ToString()); BossFSMState state = (BossFSMState)GetComponent(FSMType); if (null == state) { state = (BossFSMState)gameObject.AddComponent(FSMType); } m_states.Add(s, state); state.enabled = false; } }
public static void AttackCheck(Transform from, Transform to) { BossStat fromStat = from.GetComponent <BossStat>(); if (Vector3.Distance(from.position, to.position) <= fromStat.AttackRange) { RotateFromTo(from, to); BossStat toStat = to.GetComponent <BossStat>(); BossStat.ProcessDamage(fromStat, toStat); RotateFromTo(to, from); } }
public void TakeDamage(BossStat from, float damage) { _hp = Mathf.Clamp(_hp - damage, 0, 100); if (_hp <= 0) { if (lastHitBy == null) { lastHitBy = from; } GetComponent <IFSMManager>().SetDeadState(); from.GetComponent <IFSMManager>().NotifyTargetKilled(); Debug.Log(name + " is Killed by " + lastHitBy.name); } }
public void Init() { bossHealth = new BossStat(); bossHealth.Initialize(); }
public static void ProcessDamage(BossStat from, BossStat to) { float finalDamage = CalcDamage(from, to); to.TakeDamage(from, finalDamage); }
private static float CalcDamage(BossStat from, BossStat to) { return(50.0f); }