Пример #1
0
        /*-------------------------------------------------------------------------
         * 街名描画
         * 上陸地点も含む
         * ---------------------------------------------------------------------------*/
        private void draw_cityname_proc(Vector2 offset, LoopXImage image)
        {
            if (m_lib.setting.map_icon == MapIcon.Big)
            {
                // 大きいアイコン
                foreach (GvoWorldInfo.Info i in m_world.NoSeas)
                {
                    Vector2 p = image.GlobalPos2LocalPos(transform.ToVector2(i.position), offset);
                    if (i.IconRect != null)
                    {
                        m_lib.device.sprites.AddDrawSprites(new Vector3(p.X, p.Y, 0.3f), i.IconRect);
                    }

                    if (m_lib.setting.map_draw_names == MapDrawNames.Hide)
                    {
                        continue;
                    }
                    if (i.NameRect == null)
                    {
                        continue;
                    }
                    p.X += i.StringOffset1.X;
                    p.Y += i.StringOffset1.Y;
                    m_lib.device.sprites.AddDrawSprites(new Vector3(p.X, p.Y, 0.3f), i.NameRect);
                }
            }
            else
            {
                // 小さいアイコン
                foreach (GvoWorldInfo.Info i in m_world.NoSeas)
                {
                    Vector2 p = image.GlobalPos2LocalPos(transform.ToVector2(i.position), offset);
                    if (i.SmallIconRect != null)
                    {
                        m_lib.device.sprites.AddDrawSprites(new Vector3(p.X, p.Y, 0.3f), i.SmallIconRect);
                    }

                    if (m_lib.setting.map_draw_names == MapDrawNames.Hide)
                    {
                        continue;
                    }
                    if (i.NameRect == null)
                    {
                        continue;
                    }
                    p.X += i.StringOffset2.X;
                    p.Y += i.StringOffset2.Y;
                    m_lib.device.sprites.AddDrawSprites(new Vector3(p.X, p.Y, 0.3f), i.NameRect);
                }
            }
        }
Пример #2
0
        private void draw_namerects(Vector2 offset, LoopXImage image, hittest_list list)
        {
            foreach (GvoWorldInfo.Info i in list)
            {
                if (i.NameRect == null)
                {
                    continue;
                }

                Vector2 p = image.GlobalPos2LocalPos(transform.ToVector2(i.position), offset);

                if (m_lib.setting.map_icon == MapIcon.Big)
                {
                    // 대 아이콘
                    p.X += i.StringOffset1.X;
                    p.Y += i.StringOffset1.Y;
                }
                else
                {
                    // 소 아이콘
                    p.X += i.StringOffset2.X;
                    p.Y += i.StringOffset2.Y;
                }

                m_lib.device.sprites.AddDrawSpritesNC(new Vector3(p.X, p.Y, 0.3f), i.NameRect, i.angle, -1);
            }
        }
Пример #3
0
        /*-------------------------------------------------------------------------
         * 線描画
         * 1000刻みでの線となる
         * ---------------------------------------------------------------------------*/
        static public void DrawLines(gvt_lib lib)
        {
            lib.loop_image.EnumDrawCallBack(new LoopXImage.DrawHandler(draw_lines_proc), 0);

            // 縦方向は1回の描画でよい
            LoopXImage image  = lib.loop_image;
            Vector2    size   = image.Device.client_size;
            Vector2    offset = image.GetDrawOffset();

            int index = 0;

            for (float y = 0; y < def.GAME_HEIGHT; y += 1000, index++)
            {
                // 地図座標に変換
                Vector2 pos0 = transform.game_pos2_map_pos(new Vector2(0, y), image);
                Vector2 pos  = image.GlobalPos2LocalPos(pos0, offset);

                if (pos.Y < 0)
                {
                    continue;
                }
                if (pos.Y >= size.Y)
                {
                    continue;
                }

                image.Device.DrawLine(new Vector3(0, pos.Y, 0.79f), new Vector2(size.X, pos.Y), Color.FromArgb(128, 0, 0, 0).ToArgb());
            }
        }
Пример #4
0
        /*-------------------------------------------------------------------------
         * 海域名描画
         * ---------------------------------------------------------------------------*/
        private void draw_seaname_proc(Vector2 offset, LoopXImage image)
        {
            d3d_sprite_rects.rect _rect = m_lib.seainfonameimage.GetWindArrowIcon();
            int color1 = (m_world.Season.now_season == gvo_season.season.summer)? -1: (96 << (8 * 3)) | 0x00ffffff;
            int color2 = (m_world.Season.now_season == gvo_season.season.winter)? -1: (96 << (8 * 3)) | 0x00ffffff;

            int index = 0;

            foreach (GvoWorldInfo.Info i in m_world.Seas)
            {
                Vector2 p = image.GlobalPos2LocalPos(transform.ToVector2(i.position), offset);
                // 海域名
                m_lib.device.sprites.AddDrawSprites(new Vector3(p.X - 6, p.Y, 0.3f), m_lib.seainfonameimage.GetRect(index));
                index++;

                // 風向き描画
                if (i.SeaInfo == null)
                {
                    continue;
                }
                p.X += i.SeaInfo.WindPos.X - i.position.X;
                p.Y += i.SeaInfo.WindPos.Y - i.position.Y;
                m_lib.device.sprites.AddDrawSpritesNC(new Vector3(p.X - 6, p.Y, 0.3f), _rect, i.SeaInfo.SummerAngle, color1);
                m_lib.device.sprites.AddDrawSpritesNC(new Vector3(p.X + 6, p.Y, 0.3f), _rect, i.SeaInfo.WinterAngle, color2);
            }
        }
Пример #5
0
        private void draw_cityicon2_proc(Vector2 offset, LoopXImage image)
        {
            if (m_lib.setting.map_icon == MapIcon.Hide)
            {
                return;
            }

            foreach (GvoWorldInfo.Info i in m_world.Cities)
            {
                Vector2 p = image.GlobalPos2LocalPos(transform.ToVector2(i.position), offset);

                // 조합(2)이나 주점아가씨(1)가 존재하지 않을 경우 스킵
                if ((i.Sakaba & 2) != 2 && (i.Sakaba & 1) != 1)
                {
                    continue;
                }

                // 카리브 영지인 경우 스킵
                if (i.AllianceType == GvoWorldInfo.AllianceType.Territory &&
                    (i.CulturalSphere == GvoWorldInfo.CulturalSphere.Caribbean || i.CulturalSphere == GvoWorldInfo.CulturalSphere.EastLatinAmerica))
                {
                    continue;
                }

                m_lib.device.sprites.AddDrawSprites(new Vector3(p.X, p.Y, 0.3f), i.SmallIconRect);
            }
        }
Пример #6
0
        private void draw_seaicon_proc(Vector2 offset, LoopXImage image)
        {
            if (m_lib.setting.map_draw_names == MapDrawNames.Hide)
            {
                return;
            }

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

            int index = 0;

            foreach (GvoWorldInfo.Info i in m_world.Seas)
            {
                // 풍향그리기
                if (i.SeaInfo == null)
                {
                    continue;
                }

                Vector2 p = image.GlobalPos2LocalPos(transform.ToVector2(i.position), offset);

                if (m_world.Season.now_season == gvo_season.season.summer)
                {
                    m_lib.device.sprites.AddDrawSpritesNC(new Vector3(p.X - 3 - 1, p.Y + 3 + 1, 0.3f), _rect, i.SeaInfo.SummerAngle, -1);
                }
                else
                {
                    m_lib.device.sprites.AddDrawSpritesNC(new Vector3(p.X - 3 - 1, p.Y + 3 + 1, 0.3f), _rect, i.SeaInfo.WinterAngle, -1);
                }

                index++;
            }
        }
Пример #7
0
        /*-------------------------------------------------------------------------
         * 선그리기
         * 100단위の선となる
         * ---------------------------------------------------------------------------*/
        static public void DrawLines100(gvt_lib lib)
        {
            lib.loop_image.EnumDrawCallBack(new LoopXImage.DrawHandler(draw_lines100_proc), 0);

            // 세로방향は1회の그리기でよい
            LoopXImage image  = lib.loop_image;
            Vector2    size   = image.Device.client_size;
            Vector2    offset = image.GetDrawOffset();

            int index = 0;

            for (float y = 0; y < def.GAME_HEIGHT; y += 100, index++)
            {
                // 지도좌표に변환
                Vector2 pos0 = transform.game_pos2_map_pos(new Vector2(0, y), image);
                Vector2 pos  = image.GlobalPos2LocalPos(pos0, offset);

                if (index >= 10)
                {
                    index = 0;
                }

                if (pos.Y < 0)
                {
                    continue;
                }
                if (pos.Y >= size.Y)
                {
                    continue;
                }

                int color = (index == 0)? Color.FromArgb(128, 0, 0, 0).ToArgb(): Color.FromArgb(128, 128, 128, 128).ToArgb();
                image.Device.DrawLine(new Vector3(0, pos.Y, 0.79f), new Vector2(size.X, pos.Y), color);
            }
        }
Пример #8
0
        /*-------------------------------------------------------------------------
         * 위도, 경도그리기
         * ---------------------------------------------------------------------------*/
        static private void draw_points_proc(Vector2 offset, LoopXImage image)
        {
            d3d_systemfont font = image.Device.systemfont;
            Vector2        size = image.Device.client_size;

            for (float x = 0; x < def.GAME_WIDTH; x += 1000)
            {
                Vector2 pos0 = transform.game_pos2_map_pos(new Vector2(x, 0), image);
                Vector2 pos  = image.GlobalPos2LocalPos(pos0, offset);

                Rectangle rect = font.MeasureText(x.ToString());

                if (pos.X + (rect.Width + 4) < 0)
                {
                    continue;
                }
                if (pos.X >= size.X)
                {
                    continue;
                }

                image.Device.DrawFillRect(new Vector3(pos.X - (rect.Width / 2) - 3, 0, 0.1f), new Vector2(rect.Width + 2 * 2, rect.Height), Color.FromArgb(220, 100, 100, 100).ToArgb());
                font.DrawTextC(x.ToString(), (int)pos.X, 0, Color.White);
            }
        }
Пример #9
0
        /*-------------------------------------------------------------------------
         * 선그리기
         * ---------------------------------------------------------------------------*/
        static private void draw_lines100_proc(Vector2 offset, LoopXImage image)
        {
            Vector2 size = image.Device.client_size;

            int index = 0;

            for (float x = 0; x < def.GAME_WIDTH; x += 100, index++)
            {
                // 지도좌표に변환
                Vector2 pos0 = transform.game_pos2_map_pos(new Vector2(x, 0), image);
                Vector2 pos  = image.GlobalPos2LocalPos(pos0, offset);

                if (index >= 10)
                {
                    index = 0;
                }

                if (pos.X < 0)
                {
                    continue;
                }
                if (pos.X >= size.X)
                {
                    continue;
                }

                int color = (index == 0)? Color.FromArgb(128, 0, 0, 0).ToArgb(): Color.FromArgb(128, 128, 128, 128).ToArgb();
                image.Device.DrawLine(new Vector3(pos.X, 0, 0.79f), new Vector2(pos.X, size.Y), color);
            }
        }
Пример #10
0
        /*-------------------------------------------------------------------------
         * 描画 角度
         * ---------------------------------------------------------------------------*/
        private void draw_angle_proc(Vector2 offset, LoopXImage image)
        {
            List <ShareShip> list = ShareList;

            m_lib.device.line.Width        = 1;
            m_lib.device.line.Antialias    = m_lib.setting.enable_line_antialias;
            m_lib.device.line.Pattern      = -1;
            m_lib.device.line.PatternScale = 1.0f;
            m_lib.device.line.Begin();

            foreach (ShareRoutes.ShareShip s in list)
            {
                if (s.Position.X < 0)
                {
                    continue;
                }
                if (s.Position.Y < 0)
                {
                    continue;
                }
                if (s.AngleVector.LengthSq() < 0.5f)
                {
                    continue;
                }

                // 地図座標に変換
                Vector2 pos0 = transform.game_pos2_map_pos(new Vector2(s.Position.X, s.Position.Y), image);
                Vector2 pos  = image.GlobalPos2LocalPos(pos0, offset);

                // クランプ
                if (pos.X + ANGLE_LINE_LENGTH < 0)
                {
                    continue;
                }
                if (pos.X - ANGLE_LINE_LENGTH >= image.Device.client_size.X)
                {
                    continue;
                }
                if (pos.Y + ANGLE_LINE_LENGTH < 0)
                {
                    continue;
                }
                if (pos.Y - ANGLE_LINE_LENGTH >= image.Device.client_size.Y)
                {
                    continue;
                }

                Vector2[] points = new Vector2[2];
                points[0] = pos;
                points[1] = pos + (s.AngleVector * ANGLE_LINE_LENGTH);
                m_lib.device.line.Draw(points, Color.FromArgb(200, 64, 64, 64));
            }
            m_lib.device.line.End();
        }
Пример #11
0
        /*-------------------------------------------------------------------------
         * 해역명그리기
         * ---------------------------------------------------------------------------*/
        private void draw_seaname_proc(Vector2 offset, LoopXImage image)
        {
            if (m_lib.setting.map_draw_names == MapDrawNames.Hide)
            {
                return;
            }

            int index = 0;

            foreach (GvoWorldInfo.Info i in m_world.Seas)
            {
                Vector2 p = image.GlobalPos2LocalPos(transform.ToVector2(i.position), offset);
                // 해역명
                m_lib.device.sprites.AddDrawSpritesNC(new Vector3(p.X + 3, p.Y, 0.3f), m_lib.nameTexture.getRect(i.Name), i.angle, -1);
                index++;
            }
        }
Пример #12
0
        /*-------------------------------------------------------------------------
         * 描画 名前
         * ---------------------------------------------------------------------------*/
        private void draw_name_proc(Vector2 offset, LoopXImage image)
        {
            List <ShareShipListBB> list = ShareListBB;

            D3dBB2d.CullingRect crect = new D3dBB2d.CullingRect(image.Device.client_size);
            d3d_textured_font   font  = m_lib.device.textured_font;

            foreach (ShareShipListBB bb in list)
            {
                // バウンディングボックスで画面外かどうか調べる
                if (bb.IsCulling(offset, image.ImageScale, crect))
                {
                    continue;
                }

                foreach (ShareRoutes.ShareShip s in bb.List)
                {
                    if (s.Position.X < 0)
                    {
                        continue;
                    }
                    if (s.Position.Y < 0)
                    {
                        continue;
                    }

                    // 地図座標に変換
                    Vector2 pos0 = transform.game_pos2_map_pos(new Vector2(s.Position.X, s.Position.Y), image);
                    Vector2 pos  = image.GlobalPos2LocalPos(pos0, offset);

                    // 名前
                    Rectangle rect = font.MeasureText(s.Name, Color.Black);
                    rect.Width  += 4;
                    rect.Height += 4;

                    int     halh_x = rect.Width / 2;
                    Vector3 p      = new Vector3(pos.X - halh_x - 2, pos.Y - 3, 0.31f);
                    Vector2 size   = new Vector2(rect.Width, rect.Height);
                    m_lib.device.DrawFillRect(p, size, Color.FromArgb(128, 255, 255, 255).ToArgb());
                    m_lib.device.DrawLineRect(p, size, Color.Gray.ToArgb());
                    font.DrawTextC(s.Name, new Vector3(pos.X, pos.Y + 1, 0.31f), Color.Black);
                }
            }
        }
Пример #13
0
        /*-------------------------------------------------------------------------
         * 그리기
         * ---------------------------------------------------------------------------*/
        private void draw_proc(Vector2 offset, LoopXImage image)
        {
            float size = image.ImageScale;

            if (size < 0.5)
            {
                size = 0.5f;
            }
            else if (size > 1)
            {
                size = 1;
            }

            Vector2 scale = new Vector2(size, size);

            // 목적지용
            size *= 1.5f;
            Vector2 scale2 = new Vector2(size, size);

            foreach (data p in m_datas)
            {
                int index = (int)p.type;
                if (index < 0)
                {
                    index = 0;
                }
                if (index > (int)map_mark_type.icon11)
                {
                    index = (int)map_mark_type.icon11;
                }
                if (!is_draw(index))
                {
                    continue;
                }

                Vector2 v   = image.GlobalPos2LocalPos(new Vector2(p.position.X, p.position.Y), offset);
                Vector3 pos = new Vector3(v.X, v.Y, 0.5f);

                m_lib.device.sprites.AddDrawSprites(pos, m_lib.icons.GetIcon(icons.icon_index.memo_icon_0 + index),
                                                    (index == (int)map_mark_type.icon11)? scale2: scale,
                                                    Color.White.ToArgb());
            }
        }
Пример #14
0
                /*-------------------------------------------------------------------------
                 * 그리기
                 * ---------------------------------------------------------------------------*/
                public void Draw(Vector2 offset, LoopXImage image, int color)
                {
                    if (IsCreate)
                    {
                        // マスクから作った텍스쳐あり
                        Draw(new Vector3(offset.X, offset.Y, 0.79f), image.ImageScale, color);
                    }
                    else
                    {
                        // 単純な矩形
                        // マスクを作らない분텍스쳐容량を削る
                        Vector2 pos0 = m_pos;
                        Vector2 pos  = image.GlobalPos2LocalPos(pos0, offset);
                        Vector2 size = m_size;
                        size.X -= 1;
                        size.Y -= 1;
                        size   *= image.ImageScale;

                        // 화면외컬링
                        if (pos.X + size.X < 0)
                        {
                            return;
                        }
                        if (pos.Y + size.Y < 0)
                        {
                            return;
                        }
                        Vector2 csize = image.Device.client_size;
                        if (pos.X >= csize.X)
                        {
                            return;
                        }
                        if (pos.Y >= csize.Y)
                        {
                            return;
                        }

                        image.Device.DrawFillRect(new Vector3(pos.X, pos.Y, 0.79f), size, color);
                    }
                }
Пример #15
0
        /*-------------------------------------------------------------------------
         * 自分の船を描く
         * ---------------------------------------------------------------------------*/
        private void draw_myship_proc(Vector2 offset, LoopXImage image)
        {
            // 地図座標に変換
            Vector2 pos = image.GlobalPos2LocalPos(transform.game_pos2_map_pos(transform.ToVector2(m_pos), m_lib.loop_image), offset);

            // 角度
            draw_angle_line_all(pos, image);

            m_lib.device.sprites.BeginDrawSprites(m_lib.icons.texture);
            // 到達予想位置
            int color = -1;

            if (m_lib.setting.draw_setting_myship_expect_pos)
            {
                if (draw_expect_pos(pos, m_db.SpeedCalculator.speed_map))
                {
                    color = Color.FromArgb(160, 255, 255, 255).ToArgb();
                }
            }
            // 自分の船位置
            m_lib.device.sprites.AddDrawSpritesNC(new Vector3(pos.X, pos.Y, 0.3f + 0.001f), m_lib.icons.GetIcon(icons.icon_index.myship), color);
            m_lib.device.sprites.EndDrawSprites();
        }
Пример #16
0
        private void draw_iconrects(Vector2 offset, LoopXImage image, hittest_list list)
        {
            foreach (GvoWorldInfo.Info i in list)
            {
                Vector2 p = image.GlobalPos2LocalPos(transform.ToVector2(i.position), offset);

                d3d_sprite_rects.rect refRect;
                if (m_lib.setting.map_icon == MapIcon.Big)
                {
                    // 대 아이콘
                    refRect = i.IconRect;
                }
                else
                {
                    refRect = i.SmallIconRect;
                }

                if (refRect != null)
                {
                    m_lib.device.sprites.AddDrawSprites(new Vector3(p.X, p.Y, 0.3f), refRect);
                }
            }
        }
Пример #17
0
        /*-------------------------------------------------------------------------
         * 描画
         * ---------------------------------------------------------------------------*/
        private void draw_proc(Vector2 offset, LoopXImage image)
        {
            List <ShareShipListBB> list = ShareListBB;

            D3dBB2d.CullingRect rect = new D3dBB2d.CullingRect(image.Device.client_size);
            foreach (ShareShipListBB bb in list)
            {
                // バウンディングボックスで画面外かどうか調べる
                if (bb.IsCulling(offset, image.ImageScale, rect))
                {
                    continue;
                }

#if DRAW_POPUPS_BOUNDINGBOX
                d3d_bb2d.Draw(bb.bb, image.device, 0.5f, offset, image.scale, Color.Red.ToArgb());
#endif
                foreach (ShareRoutes.ShareShip s in bb.List)
                {
                    if (s.Position.X < 0)
                    {
                        continue;
                    }
                    if (s.Position.Y < 0)
                    {
                        continue;
                    }

                    // 地図座標に変換
                    Vector2 pos0 = transform.game_pos2_map_pos(transform.ToVector2(s.Position), image);
                    Vector2 pos  = image.GlobalPos2LocalPos(pos0, offset);

                    // 船
                    icons.icon_index index = (s.State == State.in_the_sea)? icons.icon_index.myship: icons.icon_index.share_city;
                    m_lib.device.sprites.AddDrawSprites(new Vector3(pos.X, pos.Y, 0.31f), m_lib.icons.GetIcon(index));
                }
            }
        }
Пример #18
0
        private void draw_cityname2_proc(Vector2 offset, LoopXImage image)
        {
            if (m_lib.setting.map_draw_names == MapDrawNames.Hide)
            {
                return;
            }

            foreach (GvoWorldInfo.Info i in m_world.Cities)
            {
                if (i.NameRect == null)
                {
                    continue;
                }

                // 조합(2)이나 주점아가씨(1)가 존재하지 않을 경우 스킵
                if ((i.Sakaba & 2) != 2 && (i.Sakaba & 1) != 1)
                {
                    continue;
                }

                // 카리브 영지인 경우 스킵
                if (i.AllianceType == GvoWorldInfo.AllianceType.Territory &&
                    (i.CulturalSphere == GvoWorldInfo.CulturalSphere.Caribbean || i.CulturalSphere == GvoWorldInfo.CulturalSphere.EastLatinAmerica))
                {
                    continue;
                }

                Vector2 p = image.GlobalPos2LocalPos(transform.ToVector2(i.position), offset);

                // 소 아이콘
                p.X += i.StringOffset2.X;
                p.Y += i.StringOffset2.Y;

                m_lib.device.sprites.AddDrawSpritesNC(new Vector3(p.X, p.Y, 0.3f), i.NameRect, i.angle, -1);
            }
        }