コード例 #1
0
    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;
            }
        }
    }
コード例 #2
0
        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));
                    }
                }
            }
        }
コード例 #3
0
    // 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!!");

        //}
    }
コード例 #4
0
ファイル: Bomb.cs プロジェクト: Lineyka/Anarchy
 private void OnDisable()
 {
     if (owner != null)
     {
         owner.myBomb = null;
         owner        = null;
     }
     myExplosion = null;
 }
コード例 #5
0
    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);
        }
    }
コード例 #6
0
    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;
            }
        }
    }
コード例 #7
0
    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);
        }
    }
コード例 #8
0
ファイル: Bomb.cs プロジェクト: Lineyka/Anarchy
 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));
 }
コード例 #9
0
        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();
            }
        }