Example #1
0
    /// <summary>
    /// 创建自定义的直线激光
    /// <para>customizedName 自定义直线激光类名</para>
    /// <para>posX</para>
    /// <para>posY</para>
    /// <para>...自定义参数</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int CreateCustomizedLaser(ILuaState luaState)
    {
        int        numArgs        = luaState.GetTop() - 3;
        string     customizedName = luaState.ToString(-3 - numArgs);
        float      posX           = (float)luaState.ToNumber(-2 - numArgs);
        float      posY           = (float)luaState.ToNumber(-1 - numArgs);
        EnemyLaser laser          = ObjectsPool.GetInstance().CreateBullet(BulletType.Enemy_Laser) as EnemyLaser;

        laser.SetPosition(posX, posY);
        // 设置自定义的数据
        BCCustomizedTask bc = laser.AddOrGetComponent <BCCustomizedTask>();
        int funcRef         = InterpreterManager.GetInstance().GetBulletInitFuncRef(customizedName);

        luaState.RawGetI(LuaDef.LUA_REGISTRYINDEX, funcRef);
        if (!luaState.IsFunction(-1))
        {
            Logger.Log("InitFuncRef of " + customizedName + " is not point to a function");
        }
        luaState.PushLightUserData(laser);
        // 将自定义参数push到栈上
        for (int i = 0; i < numArgs; i++)
        {
            luaState.PushValue(-2 - numArgs);
        }
        luaState.Call(numArgs + 1, 0);
        // 将laser压入栈
        luaState.PushLightUserData(laser);
        return(1);
    }
Example #2
0
        protected override void UpdateAttacking(float delta)
        {
            base.UpdateAttacking(delta);

            if (_currentTimeBetweenLaserShot > 0)
            {
                _currentTimeBetweenLaserShot -= delta;
                OrientEnemyToTarget(delta, PlayerVariables.LastPlayerPosition);
            }
            else if (_currentTimeBetweenLaserShot <= 0)
            {
                if (!_laserLaunchEffect.IsEmitting())
                {
                    _laserLaunchEffect.ActivateParticleEffects();
                }
                _currentTimeLeftBeforeLaserShot -= delta;

                if (_currentTimeLeftBeforeLaserShot <= 0)
                {
                    CheckAndLaunchLaserAttack();
                    _currentTimeLeftForLaserShot -= delta;

                    if (_currentTimeLeftForLaserShot <= 0)
                    {
                        _currentLaser.DestroyLaser();
                        _currentLaser = null;

                        _laserLaunched = false;

                        _laserLaunchEffect.DeActivateParticleEffects();
                        ResetTimers();
                    }
                }
            }
        }
    void OnTriggerEnter(Collider collider)
    {
        EnemyLaser laser   = collider.gameObject.GetComponent <EnemyLaser>();
        Upgrade    upgrade = collider.gameObject.GetComponent <Upgrade>();

        if (laser)
        {
            bullets--;
            if (bullets == 0)
            {
                Destroy(gameObject);
                GameObject deathExplosion = Instantiate(explosion, transform.position, Quaternion.identity) as GameObject;
                Destroy(deathExplosion, 1.0f);
                AudioSource.PlayClipAtPoint(explosionSound, transform.position);
                loseCanvas.SetActive(true);
            }
        }
        if (upgrade)
        {
            if (bullets < 3)
            {
                bullets++;
            }
        }
    }
Example #4
0
    /// <summary>
    /// 设置射线的长度
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SetLaserLength(ILuaState luaState)
    {
        EnemyLaser laser  = luaState.ToUserData(-2) as EnemyLaser;
        float      length = (float)luaState.ToNumber(-1);

        laser.SetLength(length);
        return(0);
    }
Example #5
0
    /// <summary>
    /// 设置射线发射源的尺寸
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SetLaserSourceSize(ILuaState luaState)
    {
        EnemyLaser laser = luaState.ToUserData(-2) as EnemyLaser;
        float      size  = (float)luaState.ToNumber(-1);

        laser.SetSourceSize(size);
        return(0);
    }
Example #6
0
    /// <summary>
    /// 射线关闭
    /// <para>laser</para>
    /// <para>int duraiton 关闭时间</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int LaserTurnOff(ILuaState luaState)
    {
        EnemyLaser laser    = luaState.ToUserData(-2) as EnemyLaser;
        int        duration = luaState.ToInteger(-1);

        laser.TurnOff(duration);
        return(0);
    }
Example #7
0
    private BulletBase NewBullet(BulletType bulletID)
    {
        BulletBase         bullet = null;
        Stack <BulletBase> _stack;

        // 判断对象池中是否有该类型的对象,如果有,则取出
        if (_bulletsPool.TryGetValue(bulletID, out _stack))
        {
            if (_stack.Count > 0)
            {
                bullet = _stack.Pop();
            }
        }
        else
        {
            _stack = new Stack <BulletBase>();
            _bulletsPool.Add(bulletID, _stack);
        }
        // 如果对象池内没有该对象,则创建
        if (bullet == null)
        {
            switch (bulletID)
            {
            case BulletType.ReimuA_Sub1:
                bullet = new BulletReimuASub1();
                break;

            case BulletType.Player_Laser:
                bullet = new PlayerLaser();
                break;

            case BulletType.Player_Simple:
                bullet = new PlayerBulletSimple();
                break;

            case BulletType.Enemy_Laser:
                bullet = new EnemyLaser();
                break;

            case BulletType.Enemy_CurveLaser:
                bullet = new EnemyCurveLaser();
                break;

            case BulletType.Enemy_Simple:
                bullet = new EnemySimpleBullet();
                break;

            case BulletType.Enemy_LinearLaser:
                bullet = new EnemyLinearLaser();
                break;

            default:
                Logger.Log("Create Bullet Fail! Invalid BulledId!");
                break;
            }
        }
        return(bullet);
    }
Example #8
0
    public static int SetLaserCollisionFactor(ILuaState luaState)
    {
        EnemyLaser laser  = luaState.ToUserData(-2) as EnemyLaser;
        float      factor = (float)luaState.ToNumber(-1);

        luaState.Pop(2);
        laser.SetCollisionFactor(factor);
        return(0);
    }
Example #9
0
    /// <summary>
    /// 射线半展开
    /// <para>laser</para>
    /// <para>int duraiton 展开时间</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int LaserTurnHalfOn(ILuaState luaState)
    {
        EnemyLaser laser    = luaState.ToUserData(-3) as EnemyLaser;
        float      toWidth  = (float)luaState.ToNumber(-2);
        int        duration = luaState.ToInteger(-1);

        laser.TurnHalfOn(toWidth, duration);
        return(0);
    }
Example #10
0
    EnemyLaser SpawnEnemyLaserLeft(EnemyLaser enemyLaser)
    {
        Vector3 spawnPos = (player.transform.position)
                           + new Vector3(-spawnLaserDistance * Mathf.Sin(player.getAngle() * Mathf.Deg2Rad), spawnLaserDistance * Mathf.Cos(player.getAngle() * Mathf.Deg2Rad));
        EnemyLaser e = Instantiate <EnemyLaser>(enemyLaser, spawnPos, Quaternion.identity);

        e.transform.Rotate(0, 0, player.getAngle() + 90);
        return(e);
    }
Example #11
0
    public static int SetLaserSize(ILuaState luaState)
    {
        EnemyLaser laser  = luaState.ToUserData(-3) as EnemyLaser;
        float      length = (float)luaState.ToNumber(-2);
        float      width  = (float)luaState.ToNumber(-1);

        laser.SetSize(width, length);
        return(0);
    }
Example #12
0
    public static int SetLaserExistDuration(ILuaState luaState)
    {
        EnemyLaser laser         = luaState.ToUserData(-2) as EnemyLaser;
        int        existDuration = luaState.ToInteger(-1);

        luaState.Pop(2);
        laser.SetLaserExistDuration(existDuration);
        return(0);
    }
Example #13
0
    public static int SetLaserAngle(ILuaState luaState)
    {
        EnemyLaser laser = luaState.ToUserData(-2) as EnemyLaser;
        float      angle = (float)luaState.ToNumber(-1);

        luaState.Pop(2);
        laser.SetRotation(angle);
        return(0);
    }
Example #14
0
        protected override void EndAttack()
        {
            base.EndAttack();

            _currentLaser?.DestroyLaser();
            _currentLaser = null;

            _laserLaunched = false;
            _laserLaunchEffect.DeActivateParticleEffects();
        }
    void OnTriggerEnter(Collider collider)
    {
        EnemyLaser eLaser  = collider.gameObject.GetComponent <EnemyLaser>();
        Upgrade    upgrade = collider.gameObject.GetComponent <Upgrade>();

        if (eLaser || upgrade)
        {
            Destroy(collider.gameObject);
        }
    }
Example #16
0
    /// <summary>
    /// 更改laser的alpha
    /// <para>laser</para>
    /// <para>toAlpha 变更到的alpha</para>
    /// <para>delay延迟执行的时间</para>
    /// <para>duration</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int ChangeLaserAlphaTo(ILuaState luaState)
    {
        EnemyLaser laser          = luaState.ToUserData(-4) as EnemyLaser;
        float      toAlpha        = (float)luaState.ToNumber(-3);
        int        changeDelay    = luaState.ToInteger(-2);
        int        changeDuration = luaState.ToInteger(-1);

        laser.ChangeToAlpha(toAlpha, changeDelay, changeDuration);
        return(0);
    }
Example #17
0
    public static int SetLaserPos(ILuaState luaState)
    {
        EnemyLaser laser = luaState.ToUserData(-3) as EnemyLaser;
        float      posX  = (float)luaState.ToNumber(-2);
        float      posY  = (float)luaState.ToNumber(-1);

        luaState.Pop(3);
        laser.SetPosition(posX, posY);
        return(0);
    }
Example #18
0
    public static int SetLaserRotateParaWithOmega(ILuaState luaState)
    {
        EnemyLaser laser    = luaState.ToUserData(-3) as EnemyLaser;
        float      omega    = (float)luaState.ToNumber(-2);
        int        duration = luaState.ToInteger(-1);

        luaState.Pop(3);
        laser.DoRotateWithOmega(omega, duration);
        return(0);
    }
Example #19
0
 // Use this for initialization
 void Start()
 {
     map           = GameObject.Find("Map").GetComponent <TileMap> ().map;
     steeringUtils = GetComponent <SteeringUtils> ();
     followPath    = GetComponent <FollowPath> ();
     rb            = GetComponent <Rigidbody2D> ();
     player        = GameObject.Find("Player").transform;
     laser         = GetComponentInChildren <EnemyLaser> ();
     sr            = GetComponent <SpriteRenderer> ();
 }
Example #20
0
        protected override void RemoveEnemyFromWorld()
        {
            _laserLaunchEffect.DeActivateParticleEffects();

            _currentLaser?.DestroyLaser();
            _currentLaser = null;

            _laserLaunched = false;

            base.RemoveEnemyFromWorld();
        }
Example #21
0
    public void FireLaser()
    {
        EnemyLaser laser = Instantiate(Resources.Load("Projectiles/EnemyLaser", typeof(EnemyLaser)) as EnemyLaser) as EnemyLaser;

        laser.transform.position = laserWeapon.position;

        laser.transform.LookAt(Player.Instance().transform.position);
        laser.transform.Find("Sprite").eulerAngles = Vector3.zero;
        laser.GetComponent <Rigidbody>().velocity  = laser.transform.forward * laserSpeed;
        // laser.transform.parent = transform;
        timer = timeToFire;
    }
 private void OnCollisionEnter2D(Collision2D collision)
 {
     if (collision.gameObject.GetComponent <EnemyLaser>())
     {
         incoming = collision.gameObject.GetComponent <EnemyLaser>();
         Debug.Log("Player HIT!!");
         if (!invicible)
         {
             TakeDamage();
         }
     }
 }
    void OnTriggerEnter2D(Collider2D other)
    {
        EnemyLaser enemyLaser = other.GetComponent <EnemyLaser>();

        if (enemyLaser)
        {
            TakeDamage(enemyLaser.GetDamage());
            dmgParticles.transform.position = other.transform.position;
            dmgParticles.Play();
            enemyLaser.Hit();
        }
    }
Example #24
0
    public static int SetLaserGrazeDetectParas(ILuaState luaState)
    {
        EnemyLaser       laser       = luaState.ToUserData(-3) as EnemyLaser;
        GrazeDetectParas detectParas = new GrazeDetectParas()
        {
            type       = GrazeDetectType.Rect,
            halfWidth  = (float)luaState.ToNumber(-2),
            halfHeight = (float)luaState.ToNumber(-1),
        };

        luaState.Pop(3);
        laser.SetGrazeDetectParas(detectParas);
        return(0);
    }
Example #25
0
    /// <summary>
    /// 设置激光的属性
    /// <para>laser 激光本体</para>
    /// <para>posX</para>
    /// <para>posY</para>
    /// <para>angle 激光的角度,x正半轴为0,逆时针增加角度</para>
    /// <para>length 激光长度</para>
    /// <para>width 激光宽度</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SetLaserProps(ILuaState luaState)
    {
        EnemyLaser laser  = luaState.ToUserData(-6) as EnemyLaser;
        float      posX   = (float)luaState.ToNumber(-5);
        float      posY   = (float)luaState.ToNumber(-4);
        float      angle  = (float)luaState.ToNumber(-3);
        float      length = (float)luaState.ToNumber(-2);
        float      width  = (float)luaState.ToNumber(-1);

        laser.SetPosition(posX, posY);
        laser.SetRotation(angle);
        laser.SetSize(width, length);
        luaState.PushLightUserData(laser);
        return(1);
    }
Example #26
0
    void OnTriggerEnter2D(Collider2D col)
    {
        EnemyLaser missile = col.gameObject.GetComponent <EnemyLaser>();

        if (missile)
        {
            hp -= missile.GetDamage();
            missile.Hit();

            if (hp <= 0)
            {
                Die();
            }
        }
    }
Example #27
0
    public static int SetLaserCollisionDetectParas(ILuaState luaState)
    {
        Logger.LogError("Try to call unused Method LuaLib:SetLaserCollisionDetectParas");
        EnemyLaser           laser       = luaState.ToUserData(-3) as EnemyLaser;
        CollisionDetectParas detectParas = new CollisionDetectParas()
        {
            type       = CollisionDetectType.Rect,
            halfWidth  = (float)luaState.ToNumber(-2),
            halfHeight = (float)luaState.ToNumber(-1),
        };

        luaState.Pop(3);
        //laser.SetCollisionDetectParas(detectParas);
        return(0);
    }
Example #28
0
    void FixedUpdate()
    {
        speed = Pilot.instance.speed - 10f;
        if (speed < 2f)
        {
            speed = 2f;
        }
        float angleDiff = Vector3.SignedAngle(transform.up, Pilot.instance.transform.position - transform.position, Vector3.up);

        if (Mathf.Abs(angleDiff) <= turnRate * Time.fixedDeltaTime)
        {
            transform.Rotate(new Vector3(0, angleDiff, 0), Space.World);
        }
        else if (angleDiff > 0)
        {
            transform.Rotate(new Vector3(0, turnRate * Time.fixedDeltaTime, 0), Space.World);
        }
        else
        {
            transform.Rotate(new Vector3(0, -turnRate * Time.fixedDeltaTime, 0), Space.World);
        }


        float dist = Vector3.Distance(transform.position, Pilot.instance.transform.position);

        if (dist > stoppingDistance)
        {
            transform.localPosition += transform.up * speed * Time.fixedDeltaTime;
        }

        if (dist <= shootingDistance)
        {
            fireAccumulator += Time.fixedDeltaTime;
            while (fireAccumulator >= 1f / fireRate)
            {
                fireAccumulator -= 1f / fireRate;
                if (Mathf.Abs(angleDiff) <= 4)
                {
                    EnemyLaser newLaser = Instantiate(laser, gunPosition.position, Quaternion.LookRotation(transform.up, Vector3.up));
                    newLaser.GetComponent <Weapon>().caster = GetComponent <Damageable>();
                }
            }
        }
        else
        {
            fireAccumulator = 0.0f;
        }
    }
 void OnTriggerEnter2D(Collider2D col)
 {
     if (!peacePeriod)
     {
         EnemyLaser enemyLaser = col.gameObject.GetComponent <EnemyLaser> ();            //Create a variable of enemyLaser when hit by one
         if (enemyLaser)
         {
             StartCoroutine(playerHitAnimation());                                            //Starts hit animation
             Destroy(col.gameObject);                                                         //Destroys laser
             LifeController.livesLeft--;                                                      //Reduces current lives after being hit
             StartCoroutine(playerPeaceWait());
             PlayerPos = new Vector2((topRightWorldCoordinates.x / 2), transform.position.y); //Starting position of Player
             this.transform.position = PlayerPos;                                             // ^^^^^^^^
         }
     }
 }
Example #30
0
    private IEnumerator RandomLaserSpawn(EnemyLaser enemyLaser, float range1, float range2)
    {
        while (true)
        {
            SpawnEnemyLaserLeft(enemyLaser);
            yield return(new WaitForSeconds(Random.Range(range1, range2)));

            /*
             * SpawnEnemyLaserRight(enemyLaser);
             * yield return new WaitForSeconds(Random.Range(range1, range2));
             * SpawnEnemyLaserTop(enemyLaser);
             * yield return new WaitForSeconds(Random.Range(range1, range2));
             * SpawnEnemyLaserBottom(enemyLaser);
             * yield return new WaitForSeconds(Random.Range(range1, range2));
             */
        }
    }