// Use this for initialization
    void Start()
    {
        this.gameObject.animation.Play("BeeAnimRun00");

        nowState = HornetAIState.Aproach;
        if (Player == null)
        {
            nowLine     = (int)(Random.value * (DataBase.Lines.Length - 0.01f));
            LineTarget  = DataBase.Lines[nowLine];
            Player      = DataBase.Player;
            FaceForward = DataBase.FaceForward;
            nowState    = HornetAIState.Appear;
        }

        IntervalTime = Time.time + 0.5f + Random.value * 0.9f;
        Timer        = 0.0f;
        LMMV         = 0.0f;

        randPos = new Vector3(
            (Random.value - 0.5f) * 1.7f,
            (Random.value - 0.2f) * 0.8f,
            (Random.value - 0.5f) * 1.3f
            );
#if false
        LineTarget.position = LineTarget.position
                              + LineTarget.right * randPos.x
                              + LineTarget.up * randPos.y
                              + LineTarget.forward * randPos.z;
#else
        LineTargetPos = LineTarget.position
                        + LineTarget.right * randPos.x
                        + LineTarget.up * randPos.y
                        + LineTarget.forward * randPos.z;
#endif

        burningS = this.transform.GetComponentInChildren <ObjectBurning>();

        AudioSource AS = GetComponent <AudioSource>();
        if (AS != null)
        {
            AS.pitch = (Random.value - 0.5f) - 0.5f;
        }

        modelAnim = this.transform.GetComponentInChildren <ModelAnimation>();

        RenderMat = GetComponentInChildren <SkinnedMeshRenderer>().materials;
    }
    // Update is called once per frame
    void Update()
    {
        PlayerLookAt();
#if false
        AproachPlayer();
        if (transform.position.y < -12.0f)
        {
            Destroy(this.gameObject);
        }
        //if (Time.time > 5.0f) if (burningS != null) burningS.BurnObject();
#else
        switch (nowState)
        {
        case HornetAIState.Appear:
            AproachPlayer();
            burningS.Count = LifeMax;
            if (Time.time > IntervalTime)
            {
                nowState = HornetAIState.InitMove;
            }
            break;

        case HornetAIState.InitMove:
            burningS.Count = LifeMax;
            if (LineMove(0.02f))
            {
                nowState = HornetAIState.Aproach;
                NextLineSet();
                //animation.CrossFade("BeeAnimIdle00");
            }
            //AproachPlayer();
            break;

        case HornetAIState.Aproach:
            if (burningS.burning)
            {
                nowState = HornetAIState.Burn;
            }
            if (Time.time > IntervalTime)
            {
                nowState = HornetAIState.Move;
            }
            AproachPlayer();
            if (Distans3(this.transform.position, Player.transform.position, 1.0f))
            {
                nowState = HornetAIState.FollowForward;
                animation.CrossFade("BeeAnimIdle00");
                Player = DataBase.CameraLookAt;
            }
            break;

        case HornetAIState.Move:
            if (burningS.burning)
            {
                nowState = HornetAIState.Burn;
                //modelAnim.SetAnimDead();
            }
            if (LineMove(0.02f))
            {
                nowState = HornetAIState.Aproach;
                NextLineSet();
            }
            break;

        case HornetAIState.FollowForward:
            if (FaceFollowing())
            {
                nowState = HornetAIState.Speer;
                if (modelAnim != null)
                {
                    modelAnim.SetAnimSpeer();
                }
                Timer        = Time.time + 0.55f;
                IntervalTime = Time.time + 1.3f;
            }
            break;

        case HornetAIState.Burn:
            Timer        = Time.time + 15.0f;
            IntervalTime = Time.time + 6.0f;
            animation.CrossFade("BeeAnimIdle00");
            if (modelAnim != null)
            {
                modelAnim.SetAnimDead();
            }
            //transform.GetChild(0).rigidbody.useGravity = true;
            transform.rigidbody.useGravity  = true;
            transform.rigidbody.constraints = new RigidbodyConstraints();
            //transform.GetChild(0).rigidbody.isKinematic = false;
            //transform.GetChild(0).rigidbody.AddTorque(-0.1f,0.0f,0.0f,ForceMode.VelocityChange);
            nowState = HornetAIState.Dead;
            if (RenderMat != null)
            {
                foreach (Material rm in RenderMat)
                {
                    rm.color = Color.black;
                }
            }
            break;

        case HornetAIState.Dead:
            if (Time.time > IntervalTime)
            {
                burningS.RemoveBurn();
#if false
                MeshRenderer[] MR = GetComponentsInChildren <MeshRenderer>();
                foreach (MeshRenderer mr in MR)
                {
                    mr.enabled = false;
                }
#else
                SkinnedMeshRenderer[] SMR =
                    GetComponentsInChildren <SkinnedMeshRenderer>();
                foreach (SkinnedMeshRenderer smr in SMR)
                {
                    smr.enabled = false;
                }
#endif
            }
            else
            {
#if false
                if (RenderMat != null)
                {
                    foreach (Material rm in RenderMat)
                    {
                        rm.color = Color.black;
                    }
                }
#endif
            }
            if (Time.time > Timer)
            {
                Destroy(this.gameObject);
            }
            break;

        case HornetAIState.Speer:
            if (Time.time > Timer)
            {
                DamageEffect.getInstance.SetEffect();
                Timer = Time.time + 30.0f;
            }
            if (Time.time > IntervalTime)
            {
                nowState = HornetAIState.GoAway;
            }
            break;

        case HornetAIState.GoAway:
            GoAway();
            break;

        default:
            break;
        }
#endif
    }