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); }
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; } }
public Bullet CreateBullet(Bullet.BulletTypes bType) { Bullet bullet = bulletFactory.CreateBullet(bType); BulletInstances.Add(bullet); return(bullet); }
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); } }
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); }
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(); } }
// 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); } }
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); } }
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)); }
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; }
//射击逻辑 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); }
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); } }