Пример #1
0
    void AnimChangeState(StoneWorkMan swm)
    {
        state = swm;
        switch (swm)
        {
        case StoneWorkMan.Idle:
            anim.SetFloat("Idle", valuePool[value]);
            break;

        case StoneWorkMan.Move_To_DoboTower:
            anim.SetTrigger("Lest's Do this");
            break;

        //case StoneWorkMan.Spread:
        //    anim.SetTrigger("Lest's Do this");
        //    break;
        case StoneWorkMan.Hammering:
            anim.SetTrigger("Hammering");
            break;

        case StoneWorkMan.Success:
            anim.SetFloat("Success", successValuePool[successValue]);
            //gameSet = false;
            break;

        case StoneWorkMan.Fail:
            anim.SetFloat("Defeat", valuePool[value]);
            //gameSet = false;
            break;
        }
    }
Пример #2
0
    private void Spread()
    {
        //나와 가장 가깝고, 차일드 카운트가 0 인 포인트를 향해서 이동하고싶다.
        //차일드 카운트다 1이 된 포지션은 자동으로 리스트에서 지우도록 하자

        int idx = GetWorkPosionIdx();

        //타겟을 정해준다.
        if (idx == -1)
        {
            return;
        }

        target = WorkPositon_Manager.WP.workPosition[idx].gameObject.transform;
        //방향을 가장 가깝다고 한 녀석으로 정하고
        //Vector3 dir = target.position - transform.position;
        float   distance = 0.0f;
        Vector3 dir      = GetDir(target.position, transform.position, out distance);

        dir.y = 0;

        //그쪽을 향해서 회전해
        transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(dir), rotSpeed * Time.deltaTime);

        //해당 포인트와 일정이상 가까워지면 나의 부모를 해당 포인트로 하고
        //이동해
        if (distance > amount)
        {
            transform.position += dir.normalized * moveSpeed * Time.deltaTime;
        }

        else if (distance <= amount)
        {
            //만약 타겟의 차일드 카운트가 0이라면
            if (target.childCount <= 0)
            {
                //타워를 향해 회전하고 싶다.
                //다보탑을 향해서 회전하고 싶다.
                dirForDaboTower    = daboTower.transform.position - transform.position;
                transform.forward  = dirForDaboTower.normalized;
                transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(dirForDaboTower.normalized), rotSpeed * Time.deltaTime);
                float angle = Vector3.SignedAngle(transform.forward, daboTower.transform.position, transform.position);
                //print(transform.name + " + " + angle);
                ////다보탑을 바라보고 섰다면 망치질을 시작하고 싶다.
                if (angle < 0.1f)
                {
                    transform.SetParent(target);
                    AnimChangeState(StoneWorkMan.Hammering);
                }
                else
                {
                    return;
                }
            }
            //차일드 카운트가 0보다 크다면
            //처음부터 다시해
            else if (target.childCount > 0)
            {
                state = StoneWorkMan.Spread;
            }
        }
    }