Beispiel #1
0
    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;
        }
    }
Beispiel #3
0
    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);
        }
    }
Beispiel #4
0
    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);
        }
    }
Beispiel #5
0
 public void Init()
 {
     bossHealth = new BossStat();
     bossHealth.Initialize();
 }
Beispiel #6
0
    public static void ProcessDamage(BossStat from, BossStat to)
    {
        float finalDamage = CalcDamage(from, to);

        to.TakeDamage(from, finalDamage);
    }
Beispiel #7
0
 private static float CalcDamage(BossStat from, BossStat to)
 {
     return(50.0f);
 }