// Use this for initialization
 void Start()
 {
     state           = EnemyState.IDLE;
     lazerState      = LazerState.PREPARE;
     timer           = 0.0f;
     firingDirection = new Vector2();
 }
    // Update is called once per frame
    void Update()
    {
        Vector3 distanceBetween3D = (GameObject.FindGameObjectWithTag("Player").transform.position - gameObject.transform.position);
        Vector2 distanceBetween   = new Vector2(distanceBetween3D.x, distanceBetween3D.y);

        if (state == EnemyState.IDLE)
        {
            if (distanceBetween.magnitude <= detectionDistance)
            {
                state = EnemyState.CHASING;
                timer = 0.0f;
            }
        }
        else if (state == EnemyState.CHASING)
        {
            if (distanceBetween.magnitude >= detectionDistance)
            {
                state = EnemyState.IDLE;
                timer = 0.0f;
            }
            else
            {
                timer += Time.deltaTime;
                if (timer >= 4.0f)
                {
                    state           = EnemyState.ATTACKING;
                    timer           = 0.0f;
                    firingDirection = distanceBetween.normalized;
                }
                else
                {
                    distanceBetween3D.z            = 0.0f;
                    gameObject.transform.position += distanceBetween3D.normalized * movementSpeed * Time.deltaTime;
                    Vector3 forward   = Vector3.Cross(gameObject.transform.up, new Vector3(0.0f, 0.0f, 1.0f));
                    Vector2 forward2D = new Vector2(forward.x, forward.y);
                    gameObject.transform.Rotate(new Vector3(0.0f, 0.0f, 1.0f), -Vector2.Angle(forward2D, distanceBetween));
                }
            }
        }
        else if (state == EnemyState.ATTACKING)
        {
            UpdateLazerMesh(timer);
            if (distanceBetween.magnitude >= detectionDistance || timer >= 4.0f)
            {
                state = EnemyState.IDLE;
                timer = 0.0f;
                Destroy(lazer);
                lazerState = LazerState.PREPARE;
            }
            else
            {
                timer += Time.deltaTime;
                if (timer >= 2.0f)
                {
                    FireLazer();
                }
            }
        }
    }
示例#3
0
        private Brush GetMainBrush(
            LazerState lazerState)
        {
            switch (lazerState)
            {
            case LazerState.Sparks:
                return(this._pupleBrush);

            case LazerState.Works:
            default:
                return(this._blueBrush);
            }
        }
示例#4
0
        private void Broke()
        {
            if (this.State != LazerState.Works)
            {
                return;
            }

            this.State = LazerState.Sparks;
            this._taskProcessor.Add(
                new RemoveEntityFromMapTask(
                    this,
                    _map,
                    delayInMilliseconds: 1000));
        }
示例#5
0
        public void CreateLinker(String shootername, Gun gun, Vector3 position, Vector3 muzzleOrientation, float nextFindTime, float deMaxDamagePer, int maxNum, float searchRadius, BulletType bt)
        {
            Vector3 start = position + muzzleOrientation.normalized *
                            (SystemOption.StartBulletOffsetScale + gun.BulletSize + UpgradeTree.PlayerArchive.ExtraBulletSpecialLevel * SystemOption.ExBulletScalePerL * SystemOption.SceneScale);

            start.z = SystemOption.ItemZPosition;
            GameObject newBullet = NewObjectPool.Current.Generate("BulletT");


            newBullet.transform.right = muzzleOrientation;
            newBullet.GetComponent <SpriteRenderer>().color = BuffColor(gun.Gunbuff);
            LazerState lazerState = newBullet.GetComponent <LazerState>();

            lazerState.Shootout(shootername, gun, start, muzzleOrientation);
            newBullet.GetComponent <Transform>().localScale = new Vector3(0.5f * SystemOption.SceneScale, 0.5f * SystemOption.SceneScale, 0.5f * SystemOption.SceneScale);
            newBullet.GetComponent <Linker>().Set(nextFindTime, deMaxDamagePer, maxNum, searchRadius);
        }
 void UpdateLazerMesh(float time)
 {
     if (lazerState == LazerState.PREPARE)
     {
         lazer = Instantiate(Resources.Load("Lazer"), gameObject.transform, false) as GameObject;
         Color c = lazer.GetComponentInChildren <Renderer>().material.color;
         c.a = 0.5f;
         lazer.GetComponentInChildren <Renderer>().material.color = c;
         lazerState = LazerState.CHARGING;
     }
     else if (lazerState == LazerState.CHARGING)
     {
         Vector3 lScale = lazer.transform.localScale;
         lScale.y -= Time.deltaTime / 2.0f;
         lazer.transform.localScale = lScale;
         if (time >= 2.0f)
         {
             lazerState = LazerState.FIRING;
             Color c = lazer.GetComponentInChildren <Renderer>().material.color;
             c.a = 1.0f;
             lazer.GetComponentInChildren <Renderer>().material.color = c;
         }
     }
     else if (lazerState == LazerState.FIRING)
     {
         Vector3 lScale = lazer.transform.localScale;
         if (lScale.y >= 1.0f)
         {
             lScale.y -= Time.deltaTime / 0.5f;
         }
         else
         {
             lScale.y += Time.deltaTime / 0.1f;
         }
         lazer.transform.localScale = lScale;
     }
 }