コード例 #1
0
ファイル: AsteroidCollisions.cs プロジェクト: jamiehenson/STR
    void OnTriggerEnter(Collider other)
    {
        if (Network.isClient)
            return;
        bool hit = false;
        if (universeN() != -1)
        {
            manager = GameObject.Find("Character" + universeN()).GetComponent<PlayerManager>();
            GameObject collided = other.gameObject;
            string collidedTag = collided.tag;
            switch (collidedTag)
            {
                case "EnemyWeapon":
                    Network.Destroy(collided);
                    break;
                case "Enemy":
                    PlayerCollisions.Boom(collided);
                    Network.Destroy(collided);
                    break;
                case "Player":
                    // Player takes damage
                    manager.updateHitPoints(-asteroidDamage * gameObject.transform.localScale.x);
                    // Asteroid explosion effect happens on all clients
                    //networkView.RPC("destroyAfterExplosion", RPCMode.Others);
                    Network.Instantiate(explosion, transform.position, transform.rotation, 200);
                    // Destroy the asteroid everywhere
                    Network.Destroy(gameObject);
                    break;
                case "PlayerBeam":
                    // Do what we want for beam
                    PlayerCollisions.WeaponBoom(gameObject, 1);
                    Network.Destroy(collided);
                    health = health - (WeaponHandler.beamDamage);
                    hit = true;
                    break;
                case "PlayerCannon":
                    // Do what we want for cannon
                    PlayerCollisions.WeaponBoom(gameObject, 2);
                    Network.Destroy(collided);
                    iTween.MoveBy(gameObject, new Vector3(collided.rigidbody.velocity.x / 10, collided.rigidbody.velocity.y / 10, 0), 4f);
                    iTween.RotateAdd(gameObject, new Vector3(50, 50), 5f);
                    hit = true;
                    health = health - (WeaponHandler.cannonDamage);
                    break;
                case "PlayerMine":
                    // Do what we want for mine
                    if (Network.isClient)
                    {
                        for (int i = 0; i < 1; i++)
                        {

                            Transform fragment = (Transform)Instantiate(MineFrag, gameObject.transform.position, Random.rotation);
                            fragment.name = "MineFragment";
                            Physics.IgnoreCollision(fragment.collider, gameObject.collider);
                            fragment.rigidbody.AddForce((Random.insideUnitSphere.normalized * 2) * force);
                        }
                        for (int i = 0; i < 1; i++)
                        {
                            Transform fragment = (Transform)Instantiate(MineFrag, gameObject.transform.position, Random.rotation);
                            fragment.name = "Mine Fragment";
                            Physics.IgnoreCollision(fragment.collider, gameObject.collider);
                            fragment.rigidbody.AddForce((Random.insideUnitCircle.normalized) * force);
                        }

                    }
                    Network.Destroy(collided);
                    hit = true;
                    health = health - (WeaponHandler.mineDamage);

                    break;
                case "MineFrag":
                    health = health - (WeaponHandler.mineFragmentDamage);
                    Network.Destroy(collided);
                    hit = true;
                    break;
                default:
                    break;
            }
            if (health <= 0 && hit)
            {
                int scoreAddition = (int)(100 * transform.localScale.x);
                manager.updateScore(scoreAddition);
                networkView.RPC("scoreXP", RPCMode.All, universeN(), scoreAddition);
                Network.Instantiate(explosion, transform.position, transform.rotation, 0);
                Network.Destroy(gameObject);
            }
        }
    }