Example #1
0
        public void Start()
        {
            debugInput.Initialize();
            testStage = new TestStage(levelData);

            bulletFactory = new BulletFactory(originalBullet, levelData);

            // プレイヤー
            playerModel = new PlayerModel(testStage.LevelData, testStage);
            playerPresenter.Initialize(playerModel, debugInput, testStage);
            playerModel.OnAttackObservable.Subscribe(attacker => {
                // 弾生成
                if (playerBullet == null)
                {
                    playerBullet = bulletFactory.CreateBullet(attacker);

                    playerBullet.OnDestroy.Subscribe(_ => {
                        playerBullet = null;
                    }).AddTo(this);
                }
            }).AddTo(this);

            // 敵
            enemyArmy = new EnemyArmy(testStage);
        }
Example #2
0
    public void FixUpdateShoot(bool isSlow, int layer, bool inShoot)
    {
        var shootFrame  = isSlow ? Deploy.slowFrame : Deploy.fastFrame;
        var bulletId    = isSlow ? Deploy.slowBulletId : Deploy.fastBulletId;
        var atk         = isSlow ? Deploy.slowAtk : Deploy.fastAtk;
        var bulletSpeed = isSlow ? Deploy.slowSpeed : Deploy.fastSpeed;

        if (_prevInSlow != isSlow)
        {
            _prevInSlow = isSlow;
            if (_currBullet != null)
            {
                BulletFactory.DestroyBullet(_currBullet);
                _currBullet = null;
            }
            _prevInLoopShoot = false;
            NextShootFrame   = GameSystem.FixedFrameCount + shootFrame;
        }

        _slowEffect?.SetActiveSafe(inShoot && isSlow);
        _fastEffect?.SetActiveSafe(inShoot && !isSlow);

        if (shootFrame > 0)
        {
            //正常类型,持续射击
            if (inShoot)
            {
                if (GameSystem.FixedFrameCount > NextShootFrame)
                {
                    NextShootFrame = GameSystem.FixedFrameCount + shootFrame;
                    BulletFactory.CreateBullet(bulletId, transform, layer, bullet =>
                    {
                        var data = MoveData.New(transform.position, MathUtility.SwapYZ(transform.forward), bulletSpeed);
                        bullet.Shoot(data, atk: atk);
                    });
                }
            }
        }
        else
        {
            //射击间隔为0的,表示激光类型,射击状态下持续显示,非射击销毁
            if (!_prevInLoopShoot && inShoot)
            {
                BulletFactory.CreateBullet(bulletId, transform, layer, bullet =>
                {
                    _currBullet = bullet;
                    bullet.Shoot(MoveData.New(transform.position, transform.up, bulletSpeed), atk: atk);
                });
            }
            if (_prevInLoopShoot && !inShoot)
            {
                if (_currBullet != null)
                {
                    BulletFactory.DestroyBullet(_currBullet);
                    _currBullet = null;
                }
            }
            _prevInLoopShoot = inShoot;
        }
    }
Example #3
0
    public Bullet CreateBullet(Bullet.BulletTypes bType)
    {
        Bullet bullet = bulletFactory.CreateBullet(bType);

        BulletInstances.Add(bullet);

        return(bullet);
    }
Example #4
0
    private void _BuildBulletPool()
    {
        // create empty Queue structure
        m_bulletPool = new Queue <GameObject>();

        for (int count = 0; count < MaxBullets; count++)
        {
            var tempBullet = factory.CreateBullet();
            m_bulletPool.Enqueue(tempBullet);
        }
    }
Example #5
0
        private void FireBullet()
        {
            GameObject bulletClone = BulletFactory.CreateBullet(); // Instantiate(bullet, bullet.transform.position, bullet.transform.rotation) as GameObject;

            bulletClone.transform.position = bullet.transform.position;
            bulletClone.transform.rotation = bullet.transform.rotation;
            bulletClone.SetActive(true);
            Rigidbody rb = bulletClone.GetComponent <Rigidbody>();

            rb.AddForce(-bullet.transform.forward * bulletSpeed);
            Destroy(bulletClone, bulletLife);
        }
Example #6
0
 public void Shoot()
 {
     if (c.ElapsedTime.AsMilliseconds() >= fireRateMS)
     {
         double _dx = -Math.Sin((this.body.Rotation));
         double _dy = Math.Cos((this.body.Rotation));
         bullets.AddBullet(BulletFactory.CreateBullet(body.Position.X, body.Position.Y, 5, this.world, body, _dx * bulletSpeed, _dy * bulletSpeed));
         body.ApplyForce(new Vector2(0f, recoil), body.WorldCenter);
         ManageSound.Instance.shoot();
         c = new Clock();
     }
 }
Example #7
0
 // Update is called once per frame
 void Update()
 {
     if (Input.GetKeyDown(KeyCode.LeftArrow))
     {
         bulletType = "skeletonBullet";
         bullet     = bulletFactory.CreateBullet(bulletType);
         Instantiate(bullet, gameObject.transform.position, gameObject.transform.rotation);
     }
     if (Input.GetKeyDown(KeyCode.DownArrow))
     {
         bulletType = "spiderBullet";
         bullet     = bulletFactory.CreateBullet(bulletType);
         Instantiate(bullet, gameObject.transform.position, gameObject.transform.rotation);
     }
     if (Input.GetKeyDown(KeyCode.RightArrow))
     {
         bulletType = "demonBullet";
         bullet     = bulletFactory.CreateBullet(bulletType);
         Instantiate(bullet, gameObject.transform.position, gameObject.transform.rotation);
     }
 }
Example #8
0
        private void SpawnBullet(Entity bullet, float degrees)
        {
            for (int j = 0; j < SpawnPoints.Count; j++)
            {
                Vector2 AddedPosition = SpawnPoints[j].Position;

                Vector2 newPosition = new Vector2();
                newPosition.X = AddedPosition.X * (float)Math.Cos(MathHelper.ToRadians(degrees)) - AddedPosition.Y * (float)Math.Sin(MathHelper.ToRadians(degrees));
                newPosition.Y = AddedPosition.X * (float)Math.Sin(MathHelper.ToRadians(degrees)) + AddedPosition.Y * (float)Math.Cos(MathHelper.ToRadians(degrees));
                newPosition   = newPosition + bullet.Position;

                float newRotation = (degrees + SpawnPoints[j].Rotation) % 360;
                newRotation = MathHelper.ToRadians(newRotation);

                factory.CreateBullet(newPosition, SpawnPoints[j].Speed, newRotation, SpawnPoints[j].RotationSpeed, SpawnPoints[j].BulletColor, null);
            }
        }
Example #9
0
        public Bullet Shoot(Vector2 entityCurrentPos, EntityDimensions dimensions, ActionConstants direction)
        {
            Vector2 position;
            var     yPos = entityCurrentPos.Y + (dimensions.Height / 2) + 50;

            if (direction == ActionConstants.RIGHT)
            {
                var xPos = entityCurrentPos.X + dimensions.Width;
                position = new Vector2(xPos, yPos);
            }
            else
            {
                var xPos = entityCurrentPos.X - dimensions.Width;
                position = new Vector2(xPos, yPos);
            }

            return(bulletFactory.CreateBullet(bulletType, position, direction));
        }
Example #10
0
    void SpawnProjectiles()
    {
        if (!projectile)
        {
            return;
        }

        m_lastProjectiles.Clear();

        for (int i = 0; i < projectileSpawns.Count; i++)
        {
            if (projectileSpawns[i])
            {
                GameObject proj = BulletFactory.CreateBullet();
                audioSource.PlayOneShot(SoundFX.BigTurretFire);
                proj.transform.position = projectileSpawns [i].transform.position;
                proj.transform.rotation = Quaternion.Euler(projectileSpawns[i].transform.forward);
                //GameObject proj = Instantiate(projectile, projectileSpawns[i].transform.position, Quaternion.Euler(projectileSpawns[i].transform.forward)) as GameObject;
                proj.GetComponent <ProjectileBase>().FireProjectile(projectileSpawns[i], m_target, damage, fireRate);

                m_lastProjectiles.Add(proj);
            }
        }
    }
        private void UpdateFiring(float deltaTime)
        {
            if (m_reloading)
            {
                m_reloadTime -= deltaTime;
                m_reloading   = m_reloadTime > 0f;
            }

            if (m_reloading || !m_firing || !m_targetAligned)
            {
                return;
            }

            m_targetDirection.Normalize();
            // find the end of the barrel where the bullet will originate
            var totalBarrelLen = (m_state.TurretWidth / 2f) +
                                 m_state.BarrelDimensions.X;
            var position = Parent.Transform.Position +
                           (m_targetDirection * totalBarrelLen);
            var velocity = m_targetDirection * m_state.GunSpeed;

            var bullet = BulletFactory.CreateBullet(Parent.Id, m_state.GunDamage,
                                                    position, velocity, m_state.BarrelDimensions.Y * 0.9f);

            if (bullet == null)
            {
                Log.ErrorFmt("{0} tried to fire a shot but failed", Parent.FullName);
            }
            else
            {
                m_messenger.QueueMessage(new ShotFiredMessage(bullet.Id));
            }

            m_reloading  = true;
            m_reloadTime = m_state.ReloadTime;
        }
Example #12
0
    //射击逻辑
    private void UpdateShoot()
    {
        if (!InShoot)
        {
            return;
        }

        if (GameSystem.FixedFrameCount < _nextShootFrame)
        {
            return;
        }
        _nextShootFrame = GameSystem.FixedFrameCount + Deploy.shootFrame;

        for (int i = 0; i < Deploy.shootPos.Length; i++)
        {
            var pos = transform.position + new Vector3(Deploy.shootPos[i][0], Deploy.shootPos[i][1]);
            BulletFactory.CreateBullet(Deploy.normalBulletId, transform, Layers.PlayerBullet, bullet =>
            {
                bullet.Shoot(MoveData.New(pos, Vector3.up, Deploy.bulletSpeed), atk: Deploy.bulletAtk);
            });
        }

        Sound.PlayUiAudioOneShot(Deploy.shootSound);
    }
Example #13
0
    private IEnumerator LoadBullets()
    {
        var soringLayerId = UiManager.GetCanvasByLayer(UiLayer.Tips).sortingLayerID;

        var tab = TableUtility.GetTable <BulletDeploy>();

        foreach (var deploy in tab)
        {
            if (deploy.id < 1000)
            {
                continue;
            }

            //ui prefab
            var bulletObj = ResourceMgr.Instantiate(_component.BulletPrefab);
            var txtId     = bulletObj.GetComponentInChildren <UiText>();
            txtId.text = deploy.id.ToString();
            bulletObj.transform.SetParent(_component.Grid, false);

            //createBullet
            Bullet bullet = null;
            BulletFactory.CreateBullet(deploy.id, bulletObj.transform, Layers.Ui, b =>
            {
                bullet = b;
            });
            yield return(new WaitUntil(() => bullet != null));

            var localScale = bullet.Renderer.transform.localScale;
            var ratio      = localScale.x * 100;
            if (ratio > 100)
            {
                ratio = 96f / localScale.x;
            }

            bullet.Renderer.sortingLayerID = soringLayerId;
            bullet.transform.localScale    = Vector3.one * ratio;
            bullet.Renderer.transform.SetLayer(Layers.Ui);
            bullet.transform.SetParent(bulletObj.transform, false);

            //显示collider
            var col = new GameObject("collider");
            col.transform.SetParent(bullet.transform, false);
            col.AddComponent <MeshFilter>().sharedMesh = GameSystem.DefaultRes.QuadMesh;
            col.layer = Layers.Ui;

            var material = new Material(GameSystem.DefaultRes.CommonShader);
            material.SetColor("_TintColor", Color.red);
            material.SetFloat("_AlphaScale", deploy.alpha);

            var collider = bullet.CollisionInfo;
            if (!collider.IsBox)
            {
                material.mainTexture     = GameSystem.DefaultRes.CircleTexture;
                col.transform.localScale = Vector3.one * collider.Radius * 2;
            }
            else
            {
                material.mainTexture        = GameSystem.DefaultRes.BoxTexture;
                col.transform.localScale    = new Vector3(collider.BoxWidth, collider.BoxHeight, 1);
                col.transform.localPosition = collider.Center;
            }

            var mr = col.AddComponent <MeshRenderer>();
            mr.sharedMaterial = material;
            mr.sortingLayerID = soringLayerId;
            mr.sortingOrder   = bullet.Renderer.sortingOrder + 1;
            col.SetActiveSafe(_showPoint);
            _pointList.Add(col);
        }
    }