/*-------------------------------------------------------------------------
         * 街名と上陸地点名のバッファ作成
         * ---------------------------------------------------------------------------*/
        private void create_city_buffer()
        {
            m_icons1_vb      = create_buffer(m_world.NoSeas.Count);
            m_icons2_vb      = create_buffer(m_world.NoSeas.Count);
            m_city_names1_vb = create_buffer(m_world.NoSeas.Count);
            m_city_names2_vb = create_buffer(m_world.NoSeas.Count);

            sprite_vertex[] icons1_vbo      = new sprite_vertex[m_world.NoSeas.Count * 4];
            sprite_vertex[] icons2_vbo      = new sprite_vertex[m_world.NoSeas.Count * 4];
            sprite_vertex[] city_names1_vbo = new sprite_vertex[m_world.NoSeas.Count * 4];
            sprite_vertex[] city_names2_vbo = new sprite_vertex[m_world.NoSeas.Count * 4];

            int index = 0;

            foreach (GvoWorldInfo.Info i in m_world.NoSeas)
            {
                // アイコン
                set_vbo(ref icons1_vbo, index, i.position, new Point(0, 0), i.IconRect, -1);
                set_vbo(ref icons2_vbo, index, i.position, new Point(0, 0), i.SmallIconRect, -1);
                // 文字
                set_vbo(ref city_names1_vbo, index, i.position, i.StringOffset1, i.NameRect, -1);
                set_vbo(ref city_names2_vbo, index, i.position, i.StringOffset2, i.NameRect, -1);

                index++;
            }
            // 頂点を転送
            m_icons1_vb.SetData <sprite_vertex>(icons1_vbo);
            m_icons2_vb.SetData <sprite_vertex>(icons2_vbo);
            m_city_names1_vb.SetData <sprite_vertex>(city_names1_vbo);
            m_city_names2_vb.SetData <sprite_vertex>(city_names2_vbo);
        }
 /*-------------------------------------------------------------------------
  * 1つのバッファを描画
  * パラメータは設定してあること
  * ---------------------------------------------------------------------------*/
 private void draw_buffer(d3d_writable_vb_with_index vb, int sprite_count)
 {
     m_lib.device.device.SetStreamSource(0, vb.vb, 0, sprite_vertex.SizeInBytes);
     m_lib.device.device.Indices = vb.ib;
     m_lib.device.device.DrawIndexedPrimitives(PrimitiveType.TriangleList,
                                               0, 0, sprite_count * 4, 0, sprite_count * 2);
 }
Beispiel #3
0
        private d3d_writable_vb_with_index m_sea_names_vb;        // 여름용 해역명

        /*-------------------------------------------------------------------------
         *
         * ---------------------------------------------------------------------------*/
        public draw_infonames(gvt_lib lib, GvoWorldInfo world)
        {
            m_lib   = lib;
            m_world = world;

            m_device = lib.device.device;

            // 쉐이더사용時
            m_is_create_buffers = false;
            m_is_error          = false;

            m_icons1_vb = null;
            m_icons2_vb = null;
            m_icons3_vb = null;

            m_city_names1_vb = null;
            m_city_names2_vb = null;
            m_city_names3_vb = null;

            m_shore_names_vb = null;
            m_land_names_vb  = null;

            m_sea_icons1_vb = null;
            m_sea_icons2_vb = null;
            m_sea_names_vb  = null;
        }
        private d3d_writable_vb_with_index m_sea_names2_vb;                                     // 冬用海域名

        /*-------------------------------------------------------------------------
         *
         * ---------------------------------------------------------------------------*/
        public draw_infonames(gvt_lib lib, GvoWorldInfo world)
        {
            m_lib   = lib;
            m_world = world;

            // シェーダ使用時
            m_is_create_buffers = false;
            m_is_error          = false;
            m_icons1_vb         = null;
            m_city_names1_vb    = null;
            m_icons2_vb         = null;
            m_city_names2_vb    = null;

            m_sea_names1_vb = null;
            m_sea_names2_vb = null;
        }
Beispiel #5
0
        /*-------------------------------------------------------------------------
         * 해역명と풍향のバッファ작성
         * ---------------------------------------------------------------------------*/
        private void create_sea_buffer()
        {
            m_sea_icons1_vb = create_buffer(m_world.Seas.Count * 3);
            m_sea_icons2_vb = create_buffer(m_world.Seas.Count * 3);
            m_sea_names_vb  = create_buffer(m_world.Seas.Count * 3);

            sprite_vertex[] vbo1 = new sprite_vertex[(m_world.Seas.Count * 3) * 4];
            sprite_vertex[] vbo2 = new sprite_vertex[(m_world.Seas.Count * 3) * 4];
            sprite_vertex[] vbo3 = new sprite_vertex[(m_world.Seas.Count * 3) * 4];

            int   index = 0;
            float scale = this.GetDpiScaleRatio();
            int   diff  = (int)(3 * scale);

            foreach (GvoWorldInfo.Info i in m_world.Seas)
            {
                // 문자 위치
                var pos = new Point(i.position.X, i.position.Y);
                set_vbo(ref vbo3, index, pos, new Point(diff, -diff), m_lib.nameTexture.getRect(i.Name), i.angle, -1);
                index++;
            }

            d3d_sprite_rects.rect windRect = m_lib.icons.GetIcon(icons.icon_index.wind_arrow);

            foreach (GvoWorldInfo.Info i in m_world.Seas)
            {
                // 풍향
                if (i.SeaInfo != null)
                {
                    Point pos = new Point(i.position.X - 1, i.position.Y + 1);

                    // 夏
                    set_vbo(ref vbo1, index, pos, new Point(-diff, diff), windRect, i.SeaInfo.SummerAngle, -1);
                    index++;
                    // 冬
                    set_vbo(ref vbo2, index, pos, new Point(-diff, diff), windRect, i.SeaInfo.WinterAngle, -1);
                    index++;
                }
            }

            // 頂点を전送
            m_sea_icons1_vb.SetData <sprite_vertex>(vbo1);
            m_sea_icons2_vb.SetData <sprite_vertex>(vbo2);
            m_sea_names_vb.SetData <sprite_vertex>(vbo3);
        }
        /*-------------------------------------------------------------------------
         * 海域名と風向きのバッファ作成
         * ---------------------------------------------------------------------------*/
        private void create_sea_buffer()
        {
            m_sea_names1_vb = create_buffer(m_world.Seas.Count * 3);
            m_sea_names2_vb = create_buffer(m_world.Seas.Count * 3);
            sprite_vertex[] vbo1 = new sprite_vertex[(m_world.Seas.Count * 3) * 4];
            sprite_vertex[] vbo2 = new sprite_vertex[(m_world.Seas.Count * 3) * 4];

            int   index  = 0;
            float scale  = this.GetDpiScaleRatio();
            int   offset = (int)(6 * scale);

            foreach (GvoWorldInfo.Info i in m_world.Seas)
            {
                // 文字
                var pos = new Point(i.position.X, i.position.Y);
                pos.Y += (int)((pos.Y - i.SeaInfo.WindPos.Y) * scale * 0.2f); // 文字表示位置をちょっとだけ調整するの
                set_vbo(ref vbo1, index, pos, new Point(-offset, 0), m_lib.seainfonameimage.GetRect(index), -1);
                set_vbo(ref vbo2, index, pos, new Point(-offset, 0), m_lib.seainfonameimage.GetRect(index), -1);
                index++;
            }

            foreach (GvoWorldInfo.Info i in m_world.Seas)
            {
                // 風向き
                if (i.SeaInfo != null)
                {
                    Point pos = new Point(i.SeaInfo.WindPos.X - i.position.X,
                                          i.SeaInfo.WindPos.Y - i.position.Y);

                    // 夏
                    set_vbo(ref vbo1, index, i.position, new Point(pos.X - offset, pos.Y), m_lib.seainfonameimage.GetWindArrowIcon(), i.SeaInfo.SummerAngle, -1);
                    set_vbo(ref vbo2, index, i.position, new Point(pos.X - offset, pos.Y), m_lib.seainfonameimage.GetWindArrowIcon(), i.SeaInfo.SummerAngle, WIND_ANGLE_COLOR2);
                    index++;
                    // 冬
                    set_vbo(ref vbo1, index, i.position, new Point(pos.X + offset, pos.Y), m_lib.seainfonameimage.GetWindArrowIcon(), i.SeaInfo.WinterAngle, WIND_ANGLE_COLOR2);
                    set_vbo(ref vbo2, index, i.position, new Point(pos.X + offset, pos.Y), m_lib.seainfonameimage.GetWindArrowIcon(), i.SeaInfo.WinterAngle, -1);
                    index++;
                }
            }

            // 頂点を転送
            m_sea_names1_vb.SetData <sprite_vertex>(vbo1);
            m_sea_names2_vb.SetData <sprite_vertex>(vbo2);
        }
        /*-------------------------------------------------------------------------
         *
         * ---------------------------------------------------------------------------*/
        public void Dispose()
        {
            if (m_decl != null)
            {
                m_decl.Dispose();
            }
            if (m_icons1_vb != null)
            {
                m_icons1_vb.Dispose();
            }
            if (m_city_names1_vb != null)
            {
                m_city_names1_vb.Dispose();
            }
            if (m_icons2_vb != null)
            {
                m_icons2_vb.Dispose();
            }
            if (m_city_names2_vb != null)
            {
                m_city_names2_vb.Dispose();
            }
            if (m_sea_names1_vb != null)
            {
                m_sea_names1_vb.Dispose();
            }
            if (m_sea_names2_vb != null)
            {
                m_sea_names2_vb.Dispose();
            }

            m_decl           = null;
            m_icons1_vb      = null;
            m_city_names1_vb = null;
            m_icons2_vb      = null;
            m_city_names2_vb = null;
            m_sea_names1_vb  = null;
            m_sea_names2_vb  = null;
        }
Beispiel #8
0
        /*-------------------------------------------------------------------------
         * バッファを구축する
         * 구축されていればなにもしない
         * ---------------------------------------------------------------------------*/
        private void create_buffers()
        {
            m_lib.nameTexture.init(m_world);

            if (!m_lib.device.is_use_ve1_1_ps1_1)
            {
                return;                                                   // 쉐이더を使わない
            }
            if (m_is_create_buffers)
            {
                return;                                         // 작성されている
            }
            if (m_is_error)
            {
                return;                          // 오류
            }
            try {
                m_decl = new VertexDeclaration(m_lib.device.device, sprite_vertex.VertexElements);

                // 도시명と상륙지점명のバッファ작성
                create_city_buffer();
                create_sea_buffer();

                m_is_create_buffers = true;
                m_is_error          = false;
            } catch {
                // 실패
                m_is_create_buffers = false;
                m_icons1_vb         = null;
                m_city_names1_vb    = null;
                m_icons2_vb         = null;
                m_city_names2_vb    = null;

                m_sea_icons1_vb = null;
                m_sea_icons2_vb = null;
                m_sea_names_vb  = null;
                m_is_error      = true;
            }
        }
        /*-------------------------------------------------------------------------
         * バッファを構築する
         * 構築されていればなにもしない
         * ---------------------------------------------------------------------------*/
        private void create_buffers()
        {
            if (!m_lib.device.is_use_ve1_1_ps1_1)
            {
                return;                                                         // シェーダを使わない
            }
            if (m_is_create_buffers)
            {
                return;                                                                         // 作成されている
            }
            if (m_is_error)
            {
                return;                                                                                 // エラー
            }
            try{
                m_decl = new VertexDeclaration(m_lib.device.device, sprite_vertex.VertexElements);

                // 街名と上陸地点名のバッファ作成
                create_city_buffer();
                create_sea_buffer();

                m_is_create_buffers = true;
                m_is_error          = false;
            }catch {
                // 失敗
                m_is_create_buffers = false;
                m_icons1_vb         = null;
                m_city_names1_vb    = null;
                m_icons2_vb         = null;
                m_city_names2_vb    = null;

                m_sea_names1_vb = null;
                m_sea_names2_vb = null;
                m_is_error      = true;
            }
        }
Beispiel #10
0
        /*-------------------------------------------------------------------------
         * 도시명と상륙지점명のバッファ작성
         * ---------------------------------------------------------------------------*/
        private void create_city_buffer()
        {
            m_icons1_vb = create_buffer(m_world.Cities.Count + m_world.Shores.Count + m_world.NoSeas.Count);
            m_icons2_vb = create_buffer(m_world.Cities.Count + m_world.Shores.Count + m_world.NoSeas.Count);
            m_icons3_vb = create_buffer(m_world.Cities.Count);

            m_city_names1_vb = create_buffer(m_world.Cities.Count);
            m_city_names2_vb = create_buffer(m_world.Cities.Count);
            m_city_names3_vb = create_buffer(m_world.Cities.Count);

            m_shore_names_vb = create_buffer(m_world.Shores.Count);
            m_land_names_vb  = create_buffer(m_world.NoSeas.Count);

            sprite_vertex[] icons1_vbo = new sprite_vertex[(m_world.Cities.Count + m_world.Shores.Count + m_world.NoSeas.Count) * 4];
            sprite_vertex[] icons2_vbo = new sprite_vertex[(m_world.Cities.Count + m_world.Shores.Count + m_world.NoSeas.Count) * 4];
            sprite_vertex[] icons3_vbo = new sprite_vertex[(m_world.Cities.Count) * 4];

            sprite_vertex[] city_names1_vbo = new sprite_vertex[m_world.Cities.Count * 4];
            sprite_vertex[] city_names2_vbo = new sprite_vertex[m_world.Cities.Count * 4];
            sprite_vertex[] city_names3_vbo = new sprite_vertex[m_world.Cities.Count * 4];

            sprite_vertex[] shore_names_vbo = new sprite_vertex[m_world.Shores.Count * 4];
            sprite_vertex[] land_names_vbo  = new sprite_vertex[m_world.NoSeas.Count * 4];

            int index = 0;

            foreach (GvoWorldInfo.Info i in m_world.Cities)
            {
                // 아이콘
                set_vbo(ref icons1_vbo, index, i.position, new Point(0, 0), i.IconRect, 0, -1);
                set_vbo(ref icons2_vbo, index, i.position, new Point(0, 0), i.SmallIconRect, 0, -1);

                // 문자 (도시이름)
                set_vbo(ref city_names1_vbo, index, i.position, i.StringOffset1, i.NameRect, i.angle, -1);
                set_vbo(ref city_names2_vbo, index, i.position, i.StringOffset2, i.NameRect, i.angle, -1);

                // 조합(2)이나 주점아가씨(1)가 존재할 경우, 카리브 영지가 아닌 경우
                if (((i.Sakaba & 2) == 2 || (i.Sakaba & 1) == 1) && (i.AllianceType != GvoWorldInfo.AllianceType.Territory ||
                                                                     (i.CulturalSphere != GvoWorldInfo.CulturalSphere.Caribbean && i.CulturalSphere != GvoWorldInfo.CulturalSphere.EastLatinAmerica)))
                {
                    set_vbo(ref icons3_vbo, index, i.position, new Point(0, 0), i.SmallIconRect, 0, -1);
                    set_vbo(ref city_names3_vbo, index, i.position, i.StringOffset2, i.NameRect, i.angle, -1);
                }

                index++;
            }
            int index2 = 0;

            foreach (GvoWorldInfo.Info i in m_world.Shores)
            {
                // 아이콘
                set_vbo(ref icons1_vbo, index, i.position, new Point(0, 0), i.IconRect, 0, -1);
                set_vbo(ref icons2_vbo, index, i.position, new Point(0, 0), i.SmallIconRect, 0, -1);

                // 문자 (도시이름)
                set_vbo(ref shore_names_vbo, index2, i.position, i.StringOffset2, i.NameRect, i.angle, -1);

                index++;
                index2++;
            }
            int index3 = 0;

            foreach (GvoWorldInfo.Info i in m_world.NoSeas)
            {
                // 아이콘
                set_vbo(ref icons1_vbo, index, i.position, new Point(0, 0), i.IconRect, 0, -1);
                set_vbo(ref icons2_vbo, index, i.position, new Point(0, 0), i.SmallIconRect, 0, -1);

                // 문자 (도시이름)
                set_vbo(ref land_names_vbo, index3, i.position, i.StringOffset2, i.NameRect, i.angle, -1);

                index++;
                index3++;
            }
            // 정점들을 설정
            m_icons1_vb.SetData <sprite_vertex>(icons1_vbo);
            m_icons2_vb.SetData <sprite_vertex>(icons2_vbo);
            m_icons3_vb.SetData <sprite_vertex>(icons3_vbo);

            m_city_names1_vb.SetData <sprite_vertex>(city_names1_vbo);
            m_city_names2_vb.SetData <sprite_vertex>(city_names2_vbo);
            m_city_names3_vb.SetData <sprite_vertex>(city_names3_vbo);

            m_shore_names_vb.SetData <sprite_vertex>(shore_names_vbo);
            m_land_names_vb.SetData <sprite_vertex>(land_names_vbo);
        }