void AvoidDanger(ref Dictionary <int, float> near_index_list) { int[] keys = new int[near_index_list.Count]; near_index_list.Keys.CopyTo(keys, 0); int keys_count = keys.Length; // Expected Bomb for (int i = 0; i < keys_count; ++i) { BombExplode expected_bomb_explode = mBombExplodeFactory.GetUrgentBombExplode(keys[i]); if (expected_bomb_explode != null) { // Expected Bomb // 폭탄 터질 시간 (0 ~ Const.BombLifeTime) // life time 늘어날 수록 위험 near_index_list[keys[i]] -= expected_bomb_explode.GetLifeTime(); } // BombExplode 구간 BombExplode bomb_explode = mBombExplodeFactory.GetBombExplode(keys[i]); if (bomb_explode != null) { near_index_list[keys[i]] -= Const.BombLifeTime; } } }
public void ExplodeBomb(BombExplode explosion) { lock (_bombs) { // Find bomb IEnumerable <Bomb> bombEnum = from bomb in _bombs where (bomb.Position.X == explosion.X && bomb.Position.Y == explosion.Y) select bomb; Bomb explodingBomb = bombEnum.First(); explodingBomb.Range = explosion.Range; explodingBomb.MapToCheck = _currentMap; Deployment.Current.Dispatcher.BeginInvoke(explodingBomb.Explode); _bombs.Remove(explodingBomb); } foreach (BrickPosition destroyedBrickPos in explosion.DestroyedBricks) { Point absoluteBrickPosition = Util.GetAbsoluteCoordinates(new Point(destroyedBrickPos.X, destroyedBrickPos.Y)); lock (_mainState.Bricks) { IEnumerable <Brick.Brick> foundBrick = _mainState.Bricks.Where(brick => brick.Position.X == absoluteBrickPosition.X && brick.Position.Y == absoluteBrickPosition.Y); if (foundBrick.Count() > 0) { BrickPosition pos = destroyedBrickPos; Deployment.Current.Dispatcher.BeginInvoke(() => ((DestroyableBrick)foundBrick.First()).ShutDown(pos.SpawnedPowerup)); } } } }
// Update is called once per frame void Update() { Collider[] hits = Physics.OverlapSphere(transform.position, bombRangeFromWall); foreach (Collider hit in hits) { if (hit.tag == "Bomb") { bombScript = hit.gameObject.GetComponent <BombExplode>(); //var hitRenderer = gameObject.GetComponent<Renderer>(); //hitRenderer.material.SetColor("_Color", Color.black); if (bombScript.bombTimer <= 0 && currentHealth == 300) { currentHealth -= 50; Debug.Log("WALL DAMAGE"); var hitRenderer = gameObject.GetComponent <Renderer>(); hitRenderer.material.SetColor("_Color", Color.grey); } else if (bombScript.bombTimer <= 0 && currentHealth == 250) { currentHealth -= 50; Debug.Log("WALL DAMAGE"); var hitRenderer = gameObject.GetComponent <Renderer>(); hitRenderer.material.SetColor("_Color", Color.blue); } else if (bombScript.bombTimer <= 0 && currentHealth == 200) { currentHealth -= 50; Debug.Log("WALL DAMAGE"); var hitRenderer = gameObject.GetComponent <Renderer>(); hitRenderer.material.SetColor("_Color", Color.cyan); } else if (bombScript.bombTimer <= 0 && currentHealth == 150) { currentHealth -= 50; Debug.Log("WALL DAMAGE"); var hitRenderer = gameObject.GetComponent <Renderer>(); hitRenderer.material.SetColor("_Color", Color.magenta); } else if (bombScript.bombTimer <= 0 && currentHealth == 100) { currentHealth -= 50; Debug.Log("WALL DAMAGE"); var hitRenderer = gameObject.GetComponent <Renderer>(); hitRenderer.material.SetColor("_Color", Color.red); } else if (bombScript.bombTimer <= 0 && currentHealth == 50) { Destroy(gameObject); Debug.Log("WALL BREAK!!"); } } } //if (wallHealth <= 0) //{ // Destroy(gameObject); // Debug.Log("WALL BREAK!!"); //} }
private void OnDisable() { if (owner != null) { owner.myBomb = null; owner = null; } myExplosion = null; }
void Shoot() { timer = 0f; gunAudio.Play(); gunLight.enabled = true; gunParticles.Stop(); gunParticles.Play(); gunLine.enabled = true; gunLine.SetPosition(0, gunEnd.position); shootRay.origin = gunEnd.position; shootRay.direction = gunEnd.forward; if (Physics.Raycast(shootRay, out shootHit, range, shootableMask)) { if (shootHit.collider.tag == "Bomb") { BombExplode explodeScript = shootHit.collider.GetComponent <BombExplode>(); explodeScript.Explode(false); gunLine.SetPosition(1, shootHit.point); } else { EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth>(); if (enemyHealth != null) { float damage = damagePerShot; if (atkBuff) { damage *= atkBuffMultiplier; } if (atkDebuff) { damage *= atkDebuffMultiplier; } int scoreChange = enemyHealth.TakeDamage((int)damage, shootHit.point); if (scoreChange != 0) { GetComponent <PlayerScore>().ChangeScore(scoreChange); } } gunLine.SetPosition(1, shootHit.point); } } else { gunLine.SetPosition(1, shootRay.origin + shootRay.direction * range); } }
void Update() { //When the boss is Down you can get a bomb if (holdingBomb == true) { if (Input.GetKeyDown(KeyCode.Q)) { anim.SetInteger("State", 4); isGettingTrown.isFlying = true; holdingBomb = false; gotBomb.GotBomb = false; playerCanMove = false; canBomb = false; } Vector3 newObjectLocation = (this.transform.forward * distance) + this.transform.position; bomb.transform.position = new Vector3(newObjectLocation.x, newObjectLocation.y + 1.1f, newObjectLocation.z); bomb.transform.rotation = Quaternion.Slerp(transform.rotation, this.transform.rotation, Time.deltaTime * 360); } if (holdingBomb == false && canBomb == true) { if (Input.GetKeyDown(KeyCode.B)) { gotBomb.GotBomb = true; bomb = Instantiate(Resources.Load <GameObject>("Bomb")); isGettingTrown = bomb.gameObject.GetComponent <BombExplode>(); bomb.name = "Bomb"; holdingBomb = true; } } if (playerCanMove == false) { trowTimer += Time.deltaTime; if (trowTimer >= maxtrowTimer) { anim.SetInteger("State", 1); trowTimer = 0; gotBomb.canMove = true; } } if (canBomb == false) { canBombTimer += Time.deltaTime; if (canBombTimer >= maxBombTimer) { canBombTimer = 0; canBomb = true; } } }
public void EndAllPowerups() { if (currentPowerup != null) { currentPowerup.End(); } if (lastingPowerup != null) { lastingPowerup.End(); } currentPowerup = new PowerupBase.EmptyPowerup(gameObject); lastingPowerup = new PowerupBase.EmptyPowerup(gameObject); BombExplode BE = GetComponentInChildren <BombExplode>(); if (BE) { GameObject.Destroy(BE.gameObject); } }
public void Explode(float radius) { this.disabled = true; this.baseR.velocity = Vectors.zero; this.myExplosion = Pool.NetworkEnable("RCAsset/BombExplodeMain", this.baseT.position, Quaternion.Euler(0f, 0f, 0f), 0).GetComponent <BombExplode>(); foreach (HERO hero in FengGameManagerMKII.Heroes) { if (Vector3.Distance(hero.baseT.position, this.baseT.position) < radius && !hero.BasePV.IsMine && !hero.BombImmune) { PhotonPlayer owner = hero.BasePV.owner; if (PhotonNetwork.player.RCteam > 0) { int num = PhotonNetwork.player.RCteam; int num2 = owner.RCteam; if (num == 0 || num != num2) { hero.markDie(); hero.BasePV.RPC("netDie2", PhotonTargets.All, new object[] { -1, BombName });; FengGameManagerMKII.FGM.PlayerKillInfoUpdate(PhotonNetwork.player, 0); } } else { hero.markDie(); hero.BasePV.RPC("netDie2", PhotonTargets.All, new object[] { -1, BombName }); FengGameManagerMKII.FGM.PlayerKillInfoUpdate(PhotonNetwork.player, 0); } } } base.StartCoroutine(this.WaitAndFade(1.5f)); }
private void MessageReceived() { lock (_receivedData) { _receivedData.Seek(0, SeekOrigin.Begin); int messageType = _receivedData.ReadByte(); ServerMessageType type = (ServerMessageType)messageType; switch (type) { case ServerMessageType.Map: Map map = Serializer.DeserializeWithLengthPrefix <Map>(_receivedData, PrefixStyle.Base128); Debug.WriteLine("Map received."); // Map successfully received, change game state to wait for start _gameInfo.Level = map; _gameInfo.State = RunStates.WaitingForGameStart; // Update status display Deployment.Current.Dispatcher.BeginInvoke(() => _mainState.DisplayStatusMessage("Waiting for players to be ready...\nYou are NOT ready.")); SendResponse(new ClientStatusUpdate(ClientUpdate.MapOk)); break; case ServerMessageType.Player: PlayerInfo playerInfo = Serializer.DeserializeWithLengthPrefix <PlayerInfo>(_receivedData, PrefixStyle.Base128); _gameInfo.AddPlayer(playerInfo.Color, playerInfo.X, playerInfo.Y); SendResponse(new ClientStatusUpdate(ClientUpdate.PlayerInfoOk)); Debug.WriteLine("Player info received..."); break; case ServerMessageType.StatusUpdate: ServerStatusUpdate update = Serializer.DeserializeWithLengthPrefix <ServerStatusUpdate>(_receivedData, PrefixStyle.Base128); _gameInfo.UpdateStatus(update); break; case ServerMessageType.BombExplosion: BombExplode explosion = Serializer.DeserializeWithLengthPrefix <BombExplode>(_receivedData, PrefixStyle.Base128); _gameInfo.ExplodeBomb(explosion); break; case ServerMessageType.PlayerDeath: PlayerDeath playerDeath = Serializer.DeserializeWithLengthPrefix <PlayerDeath>(_receivedData, PrefixStyle.Base128); _gameInfo.KillPlayer(playerDeath); break; case ServerMessageType.GameOver: GameOverUpdate gameOverUpdate = Serializer.DeserializeWithLengthPrefix <GameOverUpdate>(_receivedData, PrefixStyle.Base128); _gameInfo.EndGame(gameOverUpdate); SendResponseSync("GO OK"); break; default: Debug.WriteLine("Unrecognised package received!"); break; } _receivedData = new MemoryStream(); } }