예제 #1
0
파일: game_data.cs 프로젝트: dqchess/mario
    public void get_mission_data(ref byte[] data, ref byte[] url)
    {
        m_map_data.map_ver = m_self_map_ver;
        MemoryStream ms;

        byte[] b = new byte[4];
        for (int m = 0; m < 3; ++m)
        {
            ms = new MemoryStream();
            for (int j = 0; j < m_map_data.maps[m].y_num; ++j)
            {
                for (int i = 0; i < m_map_data.maps[m].x_num; ++i)
                {
                    b = System.BitConverter.GetBytes(m_arrays[m][j][i].type);
                    ms.Write(b, 0, b.Length);
                    for (int k = 0; k < m_arrays[m][j][i].param.Count; ++k)
                    {
                        b = System.BitConverter.GetBytes(m_arrays[m][j][i].param[k]);
                        ms.Write(b, 0, b.Length);
                    }
                }
            }
            m_map_data.maps[m].array = ms.ToArray();
        }

        ms = new MemoryStream();
        ProtoBuf.Serializer.Serialize(ms, m_map_data);
        data = utils.Compress(ms.ToArray());

        protocol.map.map_url murl = new protocol.map.map_url();
        murl.map_theme = m_map_data.maps[0].map_theme;
        int cs = m_map_data.maps[0].qd_y - 2;
        int zs = m_map_data.maps[0].qd_y + 8;

        if (zs > m_map_data.maps[0].y_num)
        {
            zs = m_map_data.maps[0].y_num;
            cs = zs - 10;
        }

        ms = new MemoryStream();
        for (int j = cs; j < zs; ++j)
        {
            for (int i = 0; i < 15; ++i)
            {
                b = System.BitConverter.GetBytes(m_arrays[0][j][i].type);
                ms.Write(b, 0, b.Length);
            }
        }
        murl.array = ms.ToArray();

        ms = new MemoryStream();
        ProtoBuf.Serializer.Serialize(ms, murl);
        url = utils.Compress(ms.ToArray());
    }
예제 #2
0
파일: game_data.cs 프로젝트: dqchess/mario
    public Texture2D mission_to_texture(byte[] data)
    {
        if (data.Length == 0)
        {
            return(Resources.Load("texture/back/back") as Texture2D);
        }
        try
        {
            byte[] arr = utils.Decompress(data);
            protocol.map.map_url mu      = net_http._instance.parse_packet <protocol.map.map_url> (arr);
            Texture2D            texture = new Texture2D(360, 240, TextureFormat.RGBA32, false);
            Texture2D            bt      = Resources.Load("texture/back/back_" + mu.map_theme.ToString()) as Texture2D;
            texture.SetPixels(0, 0, 360, 240, bt.GetPixels());

            MemoryStream ms = new MemoryStream(mu.array);
            byte[]       b  = new byte[4];
            for (int j = 0; j < 10; ++j)
            {
                for (int i = 0; i < 15; ++i)
                {
                    ms.Read(b, 0, b.Length);
                    int type = System.BitConverter.ToInt32(b, 0);
                    if (type > 0)
                    {
                        s_t_unit unit = game_data._instance.get_t_unit(type);
                        if (unit == null)
                        {
                            continue;
                        }
                        if (mario._instance.m_self.m_review == 1 && unit.review == 1)
                        {
                            continue;
                        }
                        Texture2D tt = null;
                        if (unit.kfg == 1)
                        {
                            tt = Resources.Load("texture/" + unit.icon + "_" + mu.map_theme.ToString()) as Texture2D;
                        }
                        else
                        {
                            tt = Resources.Load("texture/" + unit.icon) as Texture2D;
                        }
                        Color[] c = tt.GetPixels();
                        for (int y = 0; y < 24; ++y)
                        {
                            for (int x = 0; x < 24; ++x)
                            {
                                Color cc  = c[y * 24 + x];
                                Color cc1 = texture.GetPixel(i * 24 + x, j * 24 + y);
                                cc.r = cc.r * cc.a + cc1.r * (1 - cc.a);
                                cc.g = cc.g * cc.a + cc1.g * (1 - cc.a);
                                cc.b = cc.b * cc.a + cc1.b * (1 - cc.a);
                                cc.a = 1;
                                texture.SetPixel(i * 24 + x, j * 24 + y, cc);
                            }
                        }
                    }
                }
            }
            texture.Apply(false);

            return(texture);
        }
        catch (System.Exception)
        {
            return(Resources.Load("texture/back/back") as Texture2D);
        }
    }