public BaseShoot(BulletsSpawner bulletSpawner, Transform spawn, IBulletBehaviour bulletBehaviour, Sprite spr) { _spawn = spawn; _bulletSpawner = bulletSpawner; _bB = bulletBehaviour; _spr = spr; }
public LaserShoot(BulletsSpawner bulletSpawner, Transform spawn, IBulletBehaviour bulletBehaviour, Sprite spr) { _spawn = spawn; _bulletSpawner = bulletSpawner; _bB = bulletBehaviour; _spr = spr; canShoot = true; }
public AutomaticShoot(BulletsSpawner bulletSpawner, Transform spawnRight, Transform spawnLeft, IBulletBehaviour bulletBehaviour, Sprite spr) { _spawnRight = spawnRight; _spawnLeft = spawnLeft; _bulletSpawner = bulletSpawner; _bB = bulletBehaviour; _spr = spr; }
public void SetBehavior(string behavior) { if (!_behaviors.ContainsKey(behavior)) { return; } _bullet = _behaviors[behavior]; _bullet.Reset(); }
public void Activate() { _behaviors = new Dictionary <string, IBulletBehaviour> { { BulletBehavior.Normal, new NormalBullet(normalBulletSpeed, normalBulletLifeSpan, this) }, { BulletBehavior.Lazer, new LazerBullet(lazerBulletLifeSpan, this) }, { BulletBehavior.Bomb, new BombBullet(bombBulletLifeSpan, this, bombLayerMask) } }; _bullet = _behaviors[BulletBehavior.Normal]; transform.position = Vector3.zero; }
void Awake() { bulletBehaviour = new BaseBullet(); debugHit = 0; }
public void CheckRaycast(ref Transform transform, ref WorldMovement Movement, ref IBulletBehaviour bulletBehaviour) { OutOfRange = false; if ((RayDistance > 0f) && !IsHit && !IsShowHit) { transform.position = Movement.Position; OutOfRange = Vector3.Distance(Movement.Position, InitPosition) > ShotRange; } if (IsHit || OutOfRange || IsShowHit) { bulletBehaviour.BulletFinish(); } else { mRay = bulletBehaviour.Ray; mRayHit = bulletBehaviour.RayHit; bool isHit = Utils.Raycast(Movement.Position, Movement.MoveDirection, out mRay, out mRayHit, RayDistance, RayMask); if (isHit) { bulletBehaviour.HitTarget = mRayHit.transform.gameObject; GameObject hitTarget = bulletBehaviour.HitTarget; int hitLayer = hitTarget.layer; int id = hitTarget.GetInstanceID(); DoHit(hitLayer, id, mRayHit.point, Movement.MoveDirection); bulletBehaviour?.AfterDoHit(this); if (!IsShowHit) { IsShowHit = true; CommonBulletChecker?.CacheBulletData(this);//处理命中后的操作 } } } }