/// <summary> /// /// </summary> public void Fire(FireReason fireReason = FireReason.Normal) { if (!canFire || AI.ObstacleBetweenTarget) { return; } if (fireReason == FireReason.Normal) { if (!AI.playerInFront) { return; } } if (Weapon == null) { return; } if (Time.time >= attackTime) { if (Grenades > 0 && AI.TargetDistance >= 12 && FollowingShoots > 5) { if ((Random.Range(0, 200) > 185)) { StartCoroutine(ThrowGrenade(false, Vector3.zero, Vector3.zero)); attackTime = Time.time + 3.3f; return; } } Anim.SetInteger("UpperState", 1); attackTime = (fireReason == FireReason.OnMove) ? Time.time + Random.Range(Weapon.AttackRate * 2, Weapon.AttackRate * 5) : Time.time + Weapon.AttackRate; bullet = Pooling.Instantiate(Weapon.BulletName, Weapon.FirePoint.position, transform.root.rotation); bullet.transform.LookAt(AI.TargetPosition); //build bullet data m_BulletData.Damage = Weapon.Damage; m_BulletData.isNetwork = false; m_BulletData.Position = transform.position; m_BulletData.WeaponID = Weapon.GunID; m_BulletData.Spread = 2f; m_BulletData.MaxSpread = 3f; m_BulletData.Speed = 200; m_BulletData.LifeTime = 10; m_BulletData.WeaponName = Weapon.Info.Name; bullet.GetComponent <bl_Bullet>().SetUp(m_BulletData); bullet.GetComponent <bl_Bullet>().AISetUp(AI.AIName, photonView.ViewID, AI.AITeam); if (FireSource.enabled) { FireSource.pitch = Random.Range(0.85f, 1.1f); FireSource.clip = Weapon.FireAudio; FireSource.Play(); } if (Weapon.MuzzleFlash != null) { Weapon.MuzzleFlash.Play(); } bullets--; FollowingShoots++; photonView.RPC("RpcFire", RpcTarget.Others, Weapon.FirePoint.position, AI.TargetPosition); #if UMM ShowMiniMapItem(); #endif if (bullets <= 0) { canFire = false; StartCoroutine(Reload()); } else { if (FollowingShoots > 5) { if (Random.Range(0, 15) > 12) { attackTime += Random.Range(0.01f, 5); FollowingShoots = 0; } } } isFiring = true; } }
private List <Unit> FireUnits(int difference, FireReason fireReason) { Random rand = new Random(); Dictionary <int, int> unitsToRemove = new Dictionary <int, int>(); //létrehozzuk az üres listát, értelmetlen //foreach (Unit unit in AttackingArmy.Units) //{ // unitsToRemove.Add(unit.Type.Id, 0); //} bool stop = false; List <Unit> defUnitsToRemove = new List <Unit>(); List <Unit> attUnitsToRemove = new List <Unit>(); Unit target; while (!stop) { //defending army ritkítása foreach (Unit unit in DefendingArmy.Units) { //fölösleges, ha üres lenne a lista, akkor nem is menne a foreach //if (unit.Count > 0) //{ target = DefendingArmy.Units[rand.Next(0, DefendingArmy.Units.Count - 1)]; defUnitsToRemove.Add(target); switch (fireReason) { case FireReason.Coral: difference -= target.Type.CoralCostPerTurn; break; case FireReason.Pearl: difference -= target.Type.PearlCostPerTurn; break; } if (difference <= 0) { stop = true; break; } //} } if (stop) { break; } //attacking army ritkítása foreach (Unit unit in AttackingArmy.Units) { //if (unit.Count > 0) //{ target = AttackingArmy.Units[rand.Next(0, DefendingArmy.Units.Count - 1)]; attUnitsToRemove.Add(target); switch (fireReason) { case FireReason.Coral: difference -= target.Type.CoralCostPerTurn; break; case FireReason.Pearl: difference -= target.Type.PearlCostPerTurn; break; } if (difference <= 0) { stop = true; break; } //} } } //eltávolítás a sima listákból foreach (var unit in attUnitsToRemove) { AttackingArmy.Units.Remove(unit); } foreach (var unit in defUnitsToRemove) { DefendingArmy.Units.Remove(unit); } //visszatérünk azzal amit kivettünk, hogy ki tudjuk venni az attacklist-ből return(attUnitsToRemove); }