コード例 #1
0
ファイル: Sounds.cs プロジェクト: vitran96/unityro
    public void Add(RSW.Sound sound, GameObject parent)
    {
        if (_parent == null)
        {
            _parent = new GameObject("_sounds");
            _parent.transform.parent = MapRenderer.mapParent.transform;
        }

        var clip = FileManager.Load(sound.file) as AudioClip;

        Playing p = new Playing();

        p.playAt = 0;
        p.info   = sound;
        p.clip   = clip;

        if (parent == null) //static sound
        {
            var obj = new GameObject(sound.file + "[" + sound.name + "]" + sound.cycle);
            obj.transform.parent        = _parent.transform;
            p.source                    = obj.AddComponent <AudioSource>();
            p.source.transform.position = new Vector3(sound.pos[0], sound.pos[1], sound.pos[2]);
        }
        else    //sound is attached to an entity
        {
            p.source = parent.GetComponent <AudioSource>();
        }

        p.source.loop                  = false;
        p.source.playOnAwake           = false;
        p.source.volume                = Mathf.Clamp(sound.vol, 0, 1);
        p.source.spatialBlend          = 1;
        p.source.rolloffMode           = AudioRolloffMode.Linear;
        p.source.spatialize            = true;
        p.source.outputAudioMixerGroup = MapRenderer.SoundsMixerGroup;
        p.source.dopplerLevel          = 0;
        p.source.minDistance           = p.info.width;
        p.source.maxDistance           = sound.range + sound.height;

        playing.Add(p);
    }
コード例 #2
0
ファイル: WorldLoader.cs プロジェクト: vitran96/unityro
    public static RSW Load(BinaryReader data)
    {
        //read header
        string header     = data.ReadBinaryString(4);
        string version    = Convert.ToString(data.ReadByte());
        string subversion = Convert.ToString(data.ReadByte());

        version += "." + subversion;
        double dversion = double.Parse(version, CultureInfo.InvariantCulture);

        //check for valid .rsw file
        if (!string.Equals(header, RSW.Header))
        {
            throw new Exception("WorldLoader.Load: Header (" + header + ") is not \"GRSW\"");
        }

        RSW rsw = new RSW(version);

        //read sub files
        files.ini = data.ReadBinaryString(40);
        files.gnd = data.ReadBinaryString(40);
        files.gat = data.ReadBinaryString(40);

        if (dversion >= 1.4)
        {
            files.src = data.ReadBinaryString(40);
        }

        //read water info
        if (dversion >= 1.3)
        {
            rsw.water.level = data.ReadFloat() / 5;

            if (dversion >= 1.8)
            {
                rsw.water.type       = data.ReadLong();
                rsw.water.waveHeight = data.ReadFloat() / 5;
                rsw.water.waveSpeed  = data.ReadFloat();
                rsw.water.wavePitch  = data.ReadFloat();

                if (dversion >= 1.9)
                {
                    rsw.water.animSpeed = data.ReadLong();
                }
            }
        }

        //read lightmap
        if (dversion >= 1.5)
        {
            rsw.light.longitude = data.ReadLong();
            rsw.light.latitude  = data.ReadLong();
            for (int i = 0; i < 3; i++)
            {
                rsw.light.diffuse[i] = data.ReadFloat();
            }
            for (int i = 0; i < 3; i++)
            {
                rsw.light.ambient[i] = data.ReadFloat();
            }

            if (dversion >= 1.7)
            {
                rsw.light.intensity = data.ReadFloat();
            }
        }

        // Read ground
        if (dversion >= 1.6)
        {
            rsw.ground.top    = data.ReadLong();
            rsw.ground.bottom = data.ReadLong();
            rsw.ground.left   = data.ReadLong();
            rsw.ground.right  = data.ReadLong();
        }

        // Read Object
        int count   = data.ReadLong();
        var models  = rsw.modelDescriptors = new List <RSW.ModelDescriptor>(count);
        var lights  = rsw.lights = new List <RSW.Light>(count);
        var sounds  = rsw.sounds = new List <RSW.Sound>(count);
        var effects = rsw.effects = new List <RSW.Effect>(count);

        for (int i = 0; i < count; i++)
        {
            switch (data.ReadLong())
            {
            case 1:     //load model
                var model = new RSW.ModelDescriptor();
                model.name      = dversion >= 1.3 ? data.ReadBinaryString(40) : null;
                model.animType  = dversion >= 1.3 ? data.ReadLong() : 0;
                model.animSpeed = dversion >= 1.3 ? data.ReadFloat() : 0f;
                model.blockType = dversion >= 1.3 ? data.ReadLong() : 0;
                model.filename  = data.ReadBinaryString(80);
                model.nodename  = data.ReadBinaryString(80);
                model.position  = new float[3];
                for (int j = 0; j < model.position.Length; j++)
                {
                    model.position[j] = data.ReadFloat() / 5;
                }
                model.rotation = new float[3];
                for (int j = 0; j < model.rotation.Length; j++)
                {
                    model.rotation[j] = data.ReadFloat();
                }
                model.scale = new float[3];
                for (int j = 0; j < model.scale.Length; j++)
                {
                    model.scale[j] = data.ReadFloat() / 5;
                }
                models.Add(model);
                continue;

            case 2:     //load light
                var light = new RSW.Light();
                light.name = data.ReadBinaryString(80);
                light.pos  = new float[3];
                for (int j = 0; j < light.pos.Length; j++)
                {
                    light.pos[j] = data.ReadFloat() / 5;
                }
                light.color = new float[3];
                for (int j = 0; j < light.color.Length; j++)
                {
                    light.color[j] = data.ReadFloat();
                }
                light.range = data.ReadFloat();
                lights.Add(light);
                continue;

            case 3:     //load sound
                var sound = new RSW.Sound();
                sound.name = data.ReadBinaryString(80);
                sound.file = "data/wav/" + data.ReadBinaryString(80);
                sound.pos  = new float[3];
                for (int j = 0; j < sound.pos.Length; j++)
                {
                    sound.pos[j] = data.ReadFloat() / 5;
                }
                sound.vol    = data.ReadFloat();
                sound.width  = data.ReadLong();
                sound.height = data.ReadLong();
                sound.range  = data.ReadFloat();
                sound.cycle  = dversion >= 2.0 ? data.ReadFloat() : 0f;
                sounds.Add(sound);
                continue;

            case 4:     //load effect
                var effect = new RSW.Effect();
                effect.name = data.ReadBinaryString(80);
                effect.pos  = new float[3];
                for (int j = 0; j < effect.pos.Length; j++)
                {
                    effect.pos[j] = data.ReadFloat() / 5;
                }
                effect.id    = data.ReadLong();
                effect.delay = data.ReadFloat() * 10;
                effect.param = new float[4];
                for (int j = 0; j < effect.param.Length; j++)
                {
                    effect.param[j] = data.ReadFloat();
                }
                effects.Add(effect);
                continue;
            }
        }

        models.TrimExcess();
        sounds.TrimExcess();
        lights.TrimExcess();
        effects.TrimExcess();

        return(rsw);
    }