public async Task Handle(ShootTarget message)
        {
            var board = await _session.Get <BattleShipBoard>(message.Id);

            board.Shoot(message.Target);
            await _session.Commit();
        }
示例#2
0
 public Player(PlayerIndex playerIndex, InputManager inputManager, PlayerManager playerManager)
 {
     PlayerIndex        = playerIndex;
     this.inputManager  = inputManager;
     this.playerManager = playerManager;
     Target             = new ShootTarget(inputManager, this);
 }
示例#3
0
    public Enemy GetTargetEnemy(ShootTarget shootAt)
    {
        if (enemies.Count == 0)
        {
            return(null);
        }

        switch (shootAt)
        {
        case ShootTarget.FIRST:
            return(GetMostAdvancedEnemy(enemies));

        case ShootTarget.LAST:
            return(GetLeastAdvancedEnemy(enemies));

        case ShootTarget.OLDEST:
            return(GetOldestEnemy(enemies));

        case ShootTarget.RANDOM:
            return(GetRandomEnemy(enemies));

        default:
            return(GetMostAdvancedEnemy(enemies));
        }
    }
示例#4
0
 // Use this for initialization
 void Start( )
 {
     m_shoot = GetComponent<ShootTarget>();
     // add "reset" at the first time Instaniate it
     if (!m_shoot.resetFuncDic.ContainsKey("reset split"))
         m_shoot.resetFuncDic.Add("reset split", Reset);
 }
示例#5
0
    void ShootTarget()
    {
        ShootTarget script = gameObject.AddComponent <ShootTarget>();

        script.Target = Target;
        script.DealDamage(Damage);
        script.Material = (Material)Resources.Load("Green");
    }
示例#6
0
 // Use this for initialization
 void Start( )
 {
     m_shoot = GetComponent <ShootTarget>();
     // add "reset" at the first time Instaniate it
     if (!m_shoot.resetFuncDic.ContainsKey("reset split"))
     {
         m_shoot.resetFuncDic.Add("reset split", Reset);
     }
 }
示例#7
0
    void Start()
    {
        findTarget  = GetComponent <FindTarget>();
        shootTarget = GetComponent <ShootTarget>();

        List <GameObject> nearbyEnemies = EnemySpawner.nearbyEnemies;

        findTarget.NearbyEnemies  = nearbyEnemies;
        shootTarget.NearbyEnemies = nearbyEnemies;
    }
 void OnTriggerEnter2D(Collider2D other)
 {
     if (shooter == Shooter.Player && other.gameObject.tag == "Player")
     {
         return;
     }
     if (shooter == Shooter.Enemy && other.gameObject.tag == "Enemy")
     {
         return;
     }
     if (other.gameObject.layer != gameObject.layer)
     {
         particles.Play();
         spriteRenderer.enabled = false;
         ShootTarget target = other.gameObject.GetComponent <ShootTarget>();
         if (target)
         {
             target.Damage(damage);
         }
         Destroy(gameObject, 0.15f);
     }
 }
示例#9
0
    // shoot one target with a kind of arrow and deal physical or magic damagement
    // if is not a magic, the last parameter is 0
    public void Shoot(GameObject target, GameObject orbsPrefab, bool isMagic, float magicBaseDamge = 0)
    {
        if (target == null)
        {
            return;
        }

        GameObject arrow = (GameObject)PoolManager.GetInstance().GetPool(orbsPrefab).GetObject(orbsBirth.position);

        arrow.transform.LookAt(transform.forward);
        ShootTarget shoot = arrow.GetComponent <ShootTarget>();

        if (shoot != null)
        {
            // reset all hit effect attached to this orb
            shoot.Reset();
            shoot.target = target.transform;
            shoot.sizeY  = target.GetComponent <Collider>().bounds.size.y / 2;
            // a physical attack
            if (!isMagic)
            {
                if (Random.value < PlayerData.GetInstance().critRate)
                {
                    shoot.atk             = PlayerData.GetInstance().crit;
                    shoot.hitEffectPrefab = critAttackPrefab;
                }
                else
                {
                    shoot.atk             = PlayerData.GetInstance().atk;
                    shoot.hitEffectPrefab = physicalAttackPrefab;
                }
            }
            else
            {
                shoot.atk = PlayerData.GetInstance().GetAttributeValue(GameCode.BasicAttributeName.Intelligence) + magicBaseDamge;
            }
        }
    }
示例#10
0
        public override void Start()
        {
            if (ShootSource == null)
            {
                throw new ArgumentException("ShootSource not set");
            }
            if (ShootTarget == null)
            {
                throw new ArgumentException("ShootTarget not set");
            }
            if (Light == null)
            {
                throw new ArgumentException("Light not set");
            }
            if (ShootTrail == null)
            {
                throw new ArgumentException("ShootTrail not set");
            }
            if (ShootImpact == null)
            {
                throw new ArgumentException("ShootImpact not set");
            }
            if (BulletHole == null)
            {
                throw new ArgumentException("BulletHole not set");
            }

            var muzzleFlashEntity = ShootSource.FindChild("MuzzleFlash");

            muzzleFlashParticles = muzzleFlashEntity?.Get <ParticleSystemComponent>()?.ParticleSystem;
            muzzleFlashParticles?.Stop();

            laserEffect = ShootTrail.ParticleSystem;
            laserEffect.Stop();
            laserImpact = ShootImpact.ParticleSystem;
            laserImpact.Stop();


            BulletHole.ParticleSystem.Enabled = true;
            BulletHole.ParticleSystem.Stop();

            Light.Enabled = false;

            AudioEmitterComponent shootEmitter       = Entity.FindChild("ShootSource").Get <AudioEmitterComponent>();
            AudioEmitterComponent shootTargetEmitter = ShootTarget.Get <AudioEmitterComponent>();

            // Load different shoot sound effects
            shootSounds = new AudioEmitterSoundController[4];
            for (int i = 0; i < shootSounds.Length; i++)
            {
                shootSounds[i] = shootEmitter["Shoot" + i];
            }

            // Load different impact sound effects
            impactSounds = new AudioEmitterSoundController[4];
            for (int i = 0; i < impactSounds.Length; i++)
            {
                impactSounds[i] = shootTargetEmitter["Impact" + i];
            }

            SoldierWeapon weapon = Entity.Get <SoldierWeapon>();

            weapon.OnShotFired += (soldierWeapon, result) =>
            {
                Script.AddTask(async() => await FireWeapon(result));
            };
        }