Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nanahira
ygopro
Commits
c7d6b2a5
Commit
c7d6b2a5
authored
Mar 15, 2025
by
nanahira
Committed by
GitHub
Mar 15, 2025
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into patch-miniaudio
parents
602cbc88
f5d1f205
Changes
38
Show whitespace changes
Inline
Side-by-side
Showing
38 changed files
with
1007 additions
and
1014 deletions
+1007
-1014
gframe/CGUIImageButton.cpp
gframe/CGUIImageButton.cpp
+8
-8
gframe/CGUIImageButton.h
gframe/CGUIImageButton.h
+2
-2
gframe/CGUITTFont.cpp
gframe/CGUITTFont.cpp
+29
-36
gframe/client_card.cpp
gframe/client_card.cpp
+1
-1
gframe/client_card.h
gframe/client_card.h
+3
-3
gframe/client_field.cpp
gframe/client_field.cpp
+41
-66
gframe/client_field.h
gframe/client_field.h
+1
-0
gframe/config.h
gframe/config.h
+4
-8
gframe/data_manager.cpp
gframe/data_manager.cpp
+21
-19
gframe/deck_con.cpp
gframe/deck_con.cpp
+28
-17
gframe/deck_con.h
gframe/deck_con.h
+6
-5
gframe/deck_manager.cpp
gframe/deck_manager.cpp
+28
-26
gframe/deck_manager.h
gframe/deck_manager.h
+4
-4
gframe/drawing.cpp
gframe/drawing.cpp
+90
-89
gframe/duelclient.cpp
gframe/duelclient.cpp
+16
-16
gframe/duelclient.h
gframe/duelclient.h
+1
-1
gframe/event_handler.cpp
gframe/event_handler.cpp
+50
-50
gframe/game.cpp
gframe/game.cpp
+466
-475
gframe/game.h
gframe/game.h
+48
-47
gframe/gframe.cpp
gframe/gframe.cpp
+27
-28
gframe/image_manager.cpp
gframe/image_manager.cpp
+9
-9
gframe/image_manager.h
gframe/image_manager.h
+1
-1
gframe/lzma/premake5.lua
gframe/lzma/premake5.lua
+1
-0
gframe/materials.cpp
gframe/materials.cpp
+64
-64
gframe/materials.h
gframe/materials.h
+30
-25
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+2
-2
gframe/menu_handler.h
gframe/menu_handler.h
+3
-3
gframe/netserver.h
gframe/netserver.h
+1
-1
gframe/premake5.lua
gframe/premake5.lua
+3
-1
gframe/replay_mode.h
gframe/replay_mode.h
+1
-1
gframe/single_mode.h
gframe/single_mode.h
+1
-1
gframe/spmemvfs/premake5.lua
gframe/spmemvfs/premake5.lua
+1
-0
premake/event/premake5.lua
premake/event/premake5.lua
+1
-0
premake/freetype/premake5.lua
premake/freetype/premake5.lua
+5
-0
premake/gframe/ygopro.rc
premake/gframe/ygopro.rc
+5
-5
premake/irrlicht/premake5.lua
premake/irrlicht/premake5.lua
+2
-0
premake/lua/premake5.lua
premake/lua/premake5.lua
+2
-0
premake/sqlite3/premake5.lua
premake/sqlite3/premake5.lua
+1
-0
No files found.
gframe/CGUIImageButton.cpp
View file @
c7d6b2a5
...
...
@@ -15,7 +15,7 @@ namespace irr {
namespace
gui
{
void
Draw2DImageRotation
(
video
::
IVideoDriver
*
driver
,
video
::
ITexture
*
image
,
core
::
rect
<
s32
>
sourceRect
,
core
::
position2d
<
s32
>
position
,
core
::
position
2d
<
s32
>
rotationPoint
,
f32
rotation
,
core
::
vector2df
scale
,
bool
useAlphaChannel
,
video
::
SColor
color
)
{
core
::
vector2d
<
s32
>
position
,
core
::
vector
2d
<
s32
>
rotationPoint
,
f32
rotation
,
core
::
vector2df
scale
,
bool
useAlphaChannel
,
video
::
SColor
color
)
{
irr
::
video
::
SMaterial
material
;
irr
::
core
::
matrix4
oldProjMat
=
driver
->
getTransform
(
irr
::
video
::
ETS_PROJECTION
);
driver
->
setTransform
(
irr
::
video
::
ETS_PROJECTION
,
irr
::
core
::
matrix4
());
...
...
@@ -63,7 +63,7 @@ void Draw2DImageRotation(video::IVideoDriver* driver, video::ITexture* image, co
driver
->
setTransform
(
irr
::
video
::
ETS_VIEW
,
oldViewMat
);
}
void
Draw2DImageQuad
(
video
::
IVideoDriver
*
driver
,
video
::
ITexture
*
image
,
core
::
rect
<
s32
>
sourceRect
,
core
::
position
2d
<
s32
>
corner
[
4
],
bool
useAlphaChannel
,
video
::
SColor
color
)
{
core
::
vector
2d
<
s32
>
corner
[
4
],
bool
useAlphaChannel
,
video
::
SColor
color
)
{
irr
::
video
::
SMaterial
material
;
irr
::
core
::
matrix4
oldProjMat
=
driver
->
getTransform
(
irr
::
video
::
ETS_PROJECTION
);
driver
->
setTransform
(
irr
::
video
::
ETS_PROJECTION
,
irr
::
core
::
matrix4
());
...
...
@@ -255,7 +255,7 @@ bool CGUIImageButton::OnEvent(const SEvent& event)
if
(
event
.
MouseInput
.
Event
==
EMIE_LMOUSE_PRESSED_DOWN
)
{
if
(
Environment
->
hasFocus
(
this
)
&&
!
AbsoluteClippingRect
.
isPointInside
(
core
::
position
2d
<
s32
>
(
event
.
MouseInput
.
X
,
event
.
MouseInput
.
Y
)))
!
AbsoluteClippingRect
.
isPointInside
(
core
::
vector
2d
<
s32
>
(
event
.
MouseInput
.
X
,
event
.
MouseInput
.
Y
)))
{
Environment
->
removeFocus
(
this
);
return
false
;
...
...
@@ -272,7 +272,7 @@ bool CGUIImageButton::OnEvent(const SEvent& event)
{
bool
wasPressed
=
Pressed
;
if
(
!
AbsoluteClippingRect
.
isPointInside
(
core
::
position
2d
<
s32
>
(
event
.
MouseInput
.
X
,
event
.
MouseInput
.
Y
)))
if
(
!
AbsoluteClippingRect
.
isPointInside
(
core
::
vector
2d
<
s32
>
(
event
.
MouseInput
.
X
,
event
.
MouseInput
.
Y
)))
{
if
(
!
IsPushButton
)
setPressed
(
false
);
...
...
@@ -313,8 +313,8 @@ void CGUIImageButton::draw() {
return
;
IGUISkin
*
skin
=
Environment
->
getSkin
();
video
::
IVideoDriver
*
driver
=
Environment
->
getVideoDriver
();
core
::
position
2di
center
=
AbsoluteRect
.
getCenter
();
core
::
position
2di
pos
=
center
;
irr
::
core
::
vector
2di
center
=
AbsoluteRect
.
getCenter
();
irr
::
core
::
vector
2di
pos
=
center
;
pos
.
X
-=
(
s32
)(
ImageRect
.
getWidth
()
*
imageScale
.
X
*
0.5
f
);
pos
.
Y
-=
(
s32
)(
ImageRect
.
getHeight
()
*
imageScale
.
Y
*
0.5
f
);
if
(
Pressed
)
{
...
...
@@ -341,7 +341,7 @@ void CGUIImageButton::setImage(video::ITexture* image)
Image
=
image
;
if
(
image
)
{
ImageRect
=
core
::
rect
<
s32
>
(
core
::
position
2d
<
s32
>
(
0
,
0
),
image
->
getOriginalSize
());
ImageRect
=
core
::
rect
<
s32
>
(
core
::
vector
2d
<
s32
>
(
0
,
0
),
image
->
getOriginalSize
());
if
(
isFixedSize
)
imageScale
=
core
::
vector2df
((
irr
::
f32
)
imageSize
.
Width
/
image
->
getSize
().
Width
,
(
irr
::
f32
)
imageSize
.
Height
/
image
->
getSize
().
Height
);
}
...
...
@@ -413,7 +413,7 @@ void CGUIImageButton::setPressedImage(video::ITexture* image)
PressedImage
=
image
;
if
(
image
)
PressedImageRect
=
core
::
rect
<
s32
>
(
core
::
position
2d
<
s32
>
(
0
,
0
),
image
->
getOriginalSize
());
PressedImageRect
=
core
::
rect
<
s32
>
(
core
::
vector
2d
<
s32
>
(
0
,
0
),
image
->
getOriginalSize
());
}
...
...
gframe/CGUIImageButton.h
View file @
c7d6b2a5
...
...
@@ -20,10 +20,10 @@ namespace gui {
class
IGUISpriteBank
;
void
Draw2DImageRotation
(
video
::
IVideoDriver
*
driver
,
video
::
ITexture
*
image
,
core
::
rect
<
s32
>
sourceRect
,
core
::
position2d
<
s32
>
position
,
core
::
position
2d
<
s32
>
rotationPoint
,
f32
rotation
=
0.0
f
,
core
::
vector2d
<
s32
>
position
,
core
::
vector
2d
<
s32
>
rotationPoint
,
f32
rotation
=
0.0
f
,
core
::
vector2df
scale
=
core
::
vector2df
(
1.0
,
1.0
),
bool
useAlphaChannel
=
true
,
video
::
SColor
color
=
0xffffffff
);
void
Draw2DImageQuad
(
video
::
IVideoDriver
*
driver
,
video
::
ITexture
*
image
,
core
::
rect
<
s32
>
sourceRect
,
core
::
position
2d
<
s32
>
corner
[
4
],
bool
useAlphaChannel
=
true
,
video
::
SColor
color
=
0xffffffff
);
core
::
vector
2d
<
s32
>
corner
[
4
],
bool
useAlphaChannel
=
true
,
video
::
SColor
color
=
0xffffffff
);
class
CGUIImageButton
:
public
IGUIButton
{
public:
...
...
gframe/CGUITTFont.cpp
View file @
c7d6b2a5
...
...
@@ -505,7 +505,7 @@ void CGUITTFont::drawUstring(const core::ustring& utext, const core::rect<s32>&p
// Set up some variables.
core
::
dimension2d
<
s32
>
textDimension
;
core
::
position
2d
<
s32
>
offset
=
position
.
UpperLeftCorner
;
core
::
vector
2d
<
s32
>
offset
=
position
.
UpperLeftCorner
;
// Determine offset positions.
if
(
hcenter
||
vcenter
)
{
...
...
@@ -561,7 +561,7 @@ void CGUITTFont::drawUstring(const core::ustring& utext, const core::rect<s32>&p
// Determine rendering information.
SGUITTGlyph
&
glyph
=
Glyphs
[
n
-
1
];
CGUITTGlyphPage
*
const
page
=
Glyph_Pages
[
glyph
.
glyph_page
];
page
->
render_positions
.
push_back
(
core
::
position
2di
(
offset
.
X
+
offx
,
offset
.
Y
+
offy
));
page
->
render_positions
.
push_back
(
irr
::
core
::
vector
2di
(
offset
.
X
+
offx
,
offset
.
Y
+
offy
));
page
->
render_source_rects
.
push_back
(
glyph
.
source_rect
);
Render_Map
.
set
(
glyph
.
glyph_page
,
page
);
}
...
...
@@ -832,7 +832,7 @@ video::IImage* CGUITTFont::createTextureFromChar(const uchar32_t& ch) {
// Copy the image data out of the page texture.
core
::
dimension2du
glyph_size
(
glyph
.
source_rect
.
getSize
());
video
::
IImage
*
image
=
Driver
->
createImage
(
format
,
glyph_size
);
pageholder
->
copyTo
(
image
,
core
::
position
2di
(
0
,
0
),
glyph
.
source_rect
);
pageholder
->
copyTo
(
image
,
irr
::
core
::
vector
2di
(
0
,
0
),
glyph
.
source_rect
);
tex
->
unlock
();
return
image
;
...
...
@@ -854,17 +854,14 @@ void CGUITTFont::createSharedPlane() {
0---1
*/
using
namespace
core
;
using
namespace
video
;
using
namespace
scene
;
S3DVertex
vertices
[
4
];
video
::
S3DVertex
vertices
[
4
];
u16
indices
[
6
]
=
{
0
,
2
,
3
,
3
,
1
,
0
};
vertices
[
0
]
=
S3DVertex
(
vector3df
(
0
,
-
1
,
0
),
vector3df
(
0
,
0
,
-
1
),
SColor
(
255
,
255
,
255
,
255
),
vector2df
(
0
,
1
));
vertices
[
1
]
=
S3DVertex
(
vector3df
(
1
,
-
1
,
0
),
vector3df
(
0
,
0
,
-
1
),
SColor
(
255
,
255
,
255
,
255
),
vector2df
(
1
,
1
));
vertices
[
2
]
=
S3DVertex
(
vector3df
(
0
,
0
,
0
),
vector3df
(
0
,
0
,
-
1
),
SColor
(
255
,
255
,
255
,
255
),
vector2df
(
0
,
0
));
vertices
[
3
]
=
S3DVertex
(
vector3df
(
1
,
0
,
0
),
vector3df
(
0
,
0
,
-
1
),
SColor
(
255
,
255
,
255
,
255
),
vector2df
(
1
,
0
));
vertices
[
0
]
=
video
::
S3DVertex
(
core
::
vector3df
(
0
,
-
1
,
0
),
core
::
vector3df
(
0
,
0
,
-
1
),
video
::
SColor
(
255
,
255
,
255
,
255
),
core
::
vector2df
(
0
,
1
));
vertices
[
1
]
=
video
::
S3DVertex
(
core
::
vector3df
(
1
,
-
1
,
0
),
core
::
vector3df
(
0
,
0
,
-
1
),
video
::
SColor
(
255
,
255
,
255
,
255
),
core
::
vector2df
(
1
,
1
));
vertices
[
2
]
=
video
::
S3DVertex
(
core
::
vector3df
(
0
,
0
,
0
),
core
::
vector3df
(
0
,
0
,
-
1
),
video
::
SColor
(
255
,
255
,
255
,
255
),
core
::
vector2df
(
0
,
0
));
vertices
[
3
]
=
video
::
S3DVertex
(
core
::
vector3df
(
1
,
0
,
0
),
core
::
vector3df
(
0
,
0
,
-
1
),
video
::
SColor
(
255
,
255
,
255
,
255
),
core
::
vector2df
(
1
,
0
));
SMeshBuffer
*
buf
=
new
SMeshBuffer
();
scene
::
SMeshBuffer
*
buf
=
new
scene
::
SMeshBuffer
();
buf
->
append
(
vertices
,
4
,
indices
,
6
);
shared_plane_
.
addMeshBuffer
(
buf
);
...
...
@@ -882,11 +879,7 @@ core::dimension2d<u32> CGUITTFont::getDimensionUntilEndOfLine(const wchar_t* p)
}
core
::
array
<
scene
::
ISceneNode
*>
CGUITTFont
::
addTextSceneNode
(
const
wchar_t
*
text
,
scene
::
ISceneManager
*
smgr
,
scene
::
ISceneNode
*
parent
,
const
video
::
SColor
&
color
,
bool
center
)
{
using
namespace
core
;
using
namespace
video
;
using
namespace
scene
;
array
<
scene
::
ISceneNode
*>
container
;
core
::
array
<
scene
::
ISceneNode
*>
container
;
if
(
!
Driver
||
!
smgr
)
return
container
;
if
(
!
parent
)
...
...
@@ -897,8 +890,8 @@ core::array<scene::ISceneNode*> CGUITTFont::addTextSceneNode(const wchar_t* text
if
(
!
shared_plane_ptr_
)
//this points to a static mesh that contains the plane
createSharedPlane
();
//if it's not initialized, we create one.
dimension2d
<
s32
>
text_size
(
getDimension
(
text
));
//convert from unsigned to signed.
vector3df
start_point
(
0
,
0
,
0
),
offset
;
core
::
dimension2d
<
s32
>
text_size
(
getDimension
(
text
));
//convert from unsigned to signed.
core
::
vector3df
start_point
(
0
,
0
,
0
),
offset
;
/** NOTICE:
Because we are considering adding texts into 3D world, all Y axis vectors are inverted.
...
...
@@ -912,7 +905,7 @@ core::array<scene::ISceneNode*> CGUITTFont::addTextSceneNode(const wchar_t* text
}
// the default font material
SMaterial
mat
;
video
::
SMaterial
mat
;
mat
.
setFlag
(
video
::
EMF_LIGHTING
,
true
);
mat
.
setFlag
(
video
::
EMF_ZWRITE_ENABLE
,
false
);
mat
.
setFlag
(
video
::
EMF_NORMALIZE_NORMALS
,
true
);
...
...
@@ -924,7 +917,7 @@ core::array<scene::ISceneNode*> CGUITTFont::addTextSceneNode(const wchar_t* text
wchar_t
current_char
=
0
,
previous_char
=
0
;
u32
n
=
0
;
array
<
u32
>
glyph_indices
;
core
::
array
<
u32
>
glyph_indices
;
while
(
*
text
)
{
current_char
=
*
text
;
...
...
@@ -957,23 +950,23 @@ core::array<scene::ISceneNode*> CGUITTFont::addTextSceneNode(const wchar_t* text
s32
offy
=
(
font_metrics
.
ascender
/
64
)
-
glyph
.
offset
.
Y
;
// Apply kerning.
vector2di
k
=
getKerning
(
current_char
,
previous_char
);
core
::
vector2di
k
=
getKerning
(
current_char
,
previous_char
);
offset
.
X
+=
k
.
X
;
offset
.
Y
+=
k
.
Y
;
vector3df
current_pos
(
offset
.
X
+
offx
,
offset
.
Y
-
offy
,
0
);
dimension2d
<
u32
>
letter_size
=
dimension2d
<
u32
>
(
texw
,
texh
);
core
::
vector3df
current_pos
(
offset
.
X
+
offx
,
offset
.
Y
-
offy
,
0
);
core
::
dimension2d
<
u32
>
letter_size
=
core
::
dimension2d
<
u32
>
(
texw
,
texh
);
// Now we copy planes corresponding to the letter size.
IMeshManipulator
*
mani
=
smgr
->
getMeshManipulator
();
IMesh
*
meshcopy
=
mani
->
createMeshCopy
(
shared_plane_ptr_
);
mani
->
scale
(
meshcopy
,
vector3df
((
f32
)
letter_size
.
Width
,
(
f32
)
letter_size
.
Height
,
1
));
scene
::
IMeshManipulator
*
mani
=
smgr
->
getMeshManipulator
();
scene
::
IMesh
*
meshcopy
=
mani
->
createMeshCopy
(
shared_plane_ptr_
);
mani
->
scale
(
meshcopy
,
core
::
vector3df
((
f32
)
letter_size
.
Width
,
(
f32
)
letter_size
.
Height
,
1
));
ISceneNode
*
current_node
=
smgr
->
addMeshSceneNode
(
meshcopy
,
parent
,
-
1
,
current_pos
);
scene
::
ISceneNode
*
current_node
=
smgr
->
addMeshSceneNode
(
meshcopy
,
parent
,
-
1
,
current_pos
);
meshcopy
->
drop
();
current_node
->
getMaterial
(
0
)
=
mat
;
current_node
->
setAutomaticCulling
(
EAC_OFF
);
current_node
->
setAutomaticCulling
(
scene
::
EAC_OFF
);
current_node
->
setIsDebugObject
(
true
);
//so the picking won't have any effect on individual letter
//current_node->setDebugDataVisible(EDS_BBOX); //de-comment this when debugging
...
...
@@ -991,7 +984,7 @@ core::array<scene::ISceneNode*> CGUITTFont::addTextSceneNode(const wchar_t* text
for
(
u32
i
=
0
;
i
<
glyph_indices
.
size
();
++
i
)
{
u32
n
=
glyph_indices
[
i
];
SGUITTGlyph
const
&
glyph
=
Glyphs
[
n
-
1
];
ITexture
*
current_tex
=
Glyph_Pages
[
glyph
.
glyph_page
]
->
texture
;
video
::
ITexture
*
current_tex
=
Glyph_Pages
[
glyph
.
glyph_page
]
->
texture
;
f32
page_texture_size
=
(
f32
)
current_tex
->
getSize
().
Width
;
//Now we calculate the UV position according to the texture size and the source rect.
//
...
...
@@ -1007,15 +1000,15 @@ core::array<scene::ISceneNode*> CGUITTFont::addTextSceneNode(const wchar_t* text
f32
v2
=
v1
+
(
glyph
.
source_rect
.
getHeight
()
/
page_texture_size
);
//we can be quite sure that this is IMeshSceneNode, because we just added them in the above loop.
IMeshSceneNode
*
node
=
static_cast
<
IMeshSceneNode
*>
(
container
[
i
]);
scene
::
IMeshSceneNode
*
node
=
static_cast
<
scene
::
IMeshSceneNode
*>
(
container
[
i
]);
S3DVertex
*
pv
=
static_cast
<
S3DVertex
*>
(
node
->
getMesh
()
->
getMeshBuffer
(
0
)
->
getVertices
());
video
::
S3DVertex
*
pv
=
static_cast
<
video
::
S3DVertex
*>
(
node
->
getMesh
()
->
getMeshBuffer
(
0
)
->
getVertices
());
//pv[0].TCoords.Y = pv[1].TCoords.Y = (letter_size.Height - 1) / static_cast<f32>(letter_size.Height);
//pv[1].TCoords.X = pv[3].TCoords.X = (letter_size.Width - 1) / static_cast<f32>(letter_size.Width);
pv
[
0
].
TCoords
=
vector2df
(
u1
,
v2
);
pv
[
1
].
TCoords
=
vector2df
(
u2
,
v2
);
pv
[
2
].
TCoords
=
vector2df
(
u1
,
v1
);
pv
[
3
].
TCoords
=
vector2df
(
u2
,
v1
);
pv
[
0
].
TCoords
=
core
::
vector2df
(
u1
,
v2
);
pv
[
1
].
TCoords
=
core
::
vector2df
(
u2
,
v2
);
pv
[
2
].
TCoords
=
core
::
vector2df
(
u1
,
v1
);
pv
[
3
].
TCoords
=
core
::
vector2df
(
u2
,
v1
);
container
[
i
]
->
getMaterial
(
0
).
setTexture
(
0
,
current_tex
);
}
...
...
gframe/client_card.cpp
View file @
c7d6b2a5
...
...
@@ -56,7 +56,7 @@ void ClientCard::UpdateInfo(unsigned char* buf) {
}
if
(
flag
&
QUERY_POSITION
)
{
int
pdata
=
(
BufferIO
::
ReadInt32
(
buf
)
>>
24
)
&
0xff
;
if
((
location
&
(
LOCATION_EXTRA
|
LOCATION_REMOVED
))
&&
(
u8
)
pdata
!=
position
)
{
if
((
location
&
(
LOCATION_EXTRA
|
LOCATION_REMOVED
))
&&
pdata
!=
position
)
{
position
=
pdata
;
mainGame
->
dField
.
MoveCard
(
this
,
1
);
}
else
...
...
gframe/client_card.h
View file @
c7d6b2a5
...
...
@@ -15,9 +15,9 @@ public:
irr
::
core
::
vector3df
curRot
;
irr
::
core
::
vector3df
dPos
;
irr
::
core
::
vector3df
dRot
;
u32
curAlpha
{
255
};
u32
dAlpha
{
0
};
u32
aniFrame
{
0
};
irr
::
u32
curAlpha
{
255
};
irr
::
u32
dAlpha
{
0
};
irr
::
u32
aniFrame
{
0
};
bool
is_moving
{
false
};
bool
is_fading
{
false
};
bool
is_hovered
{
false
};
...
...
gframe/client_field.cpp
View file @
c7d6b2a5
...
...
@@ -143,6 +143,16 @@ void ClientField::Initial(int player, int deckc, int extrac) {
GetCardLocation
(
pcard
,
&
pcard
->
curPos
,
&
pcard
->
curRot
,
true
);
}
}
void
ClientField
::
ResetSequence
(
std
::
vector
<
ClientCard
*>&
list
,
bool
reset_height
)
{
unsigned
char
seq
=
0
;
for
(
auto
&
pcard
:
list
)
{
pcard
->
sequence
=
seq
++
;
if
(
reset_height
)
{
pcard
->
curPos
.
Z
=
0.01
f
+
0.01
f
*
pcard
->
sequence
;
pcard
->
mTransform
.
setTranslation
(
pcard
->
curPos
);
}
}
}
ClientCard
*
ClientField
::
GetCard
(
int
controler
,
int
location
,
int
sequence
,
int
sub_seq
)
{
std
::
vector
<
ClientCard
*>*
lst
=
0
;
bool
is_xyz
=
(
location
&
LOCATION_OVERLAY
)
!=
0
;
...
...
@@ -194,16 +204,10 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
case
LOCATION_DECK
:
{
if
(
sequence
!=
0
||
deck
[
controler
].
size
()
==
0
)
{
deck
[
controler
].
push_back
(
pcard
);
pcard
->
sequence
=
(
unsigned
char
)(
deck
[
controler
].
size
()
-
1
);
}
else
{
deck
[
controler
].
push_back
(
0
);
for
(
int
i
=
deck
[
controler
].
size
()
-
1
;
i
>
0
;
--
i
)
{
deck
[
controler
][
i
]
=
deck
[
controler
][
i
-
1
];
deck
[
controler
][
i
]
->
sequence
++
;
}
deck
[
controler
][
0
]
=
pcard
;
pcard
->
sequence
=
0
;
deck
[
controler
].
insert
(
deck
[
controler
].
begin
(),
pcard
);
}
ResetSequence
(
deck
[
controler
],
true
);
pcard
->
is_reversed
=
false
;
pcard
->
ClearData
();
pcard
->
ClearTarget
();
...
...
@@ -212,7 +216,7 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
}
case
LOCATION_HAND
:
{
hand
[
controler
].
push_back
(
pcard
);
pcard
->
sequence
=
(
unsigned
char
)(
hand
[
controler
].
size
()
-
1
);
ResetSequence
(
hand
[
controler
],
false
);
break
;
}
case
LOCATION_MZONE
:
{
...
...
@@ -225,30 +229,22 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
}
case
LOCATION_GRAVE
:
{
grave
[
controler
].
push_back
(
pcard
);
pcard
->
sequence
=
(
unsigned
char
)(
grave
[
controler
].
size
()
-
1
);
ResetSequence
(
grave
[
controler
],
false
);
break
;
}
case
LOCATION_REMOVED
:
{
remove
[
controler
].
push_back
(
pcard
);
pcard
->
sequence
=
(
unsigned
char
)(
remove
[
controler
].
size
()
-
1
);
ResetSequence
(
remove
[
controler
],
false
);
break
;
}
case
LOCATION_EXTRA
:
{
if
(
extra_p_count
[
controler
]
==
0
||
(
pcard
->
position
&
POS_FACEUP
))
{
extra
[
controler
].
push_back
(
pcard
);
pcard
->
sequence
=
(
unsigned
char
)(
extra
[
controler
].
size
()
-
1
);
}
else
{
extra
[
controler
].
push_back
(
0
);
int
p
=
extra
[
controler
].
size
()
-
extra_p_count
[
controler
]
-
1
;
for
(
int
i
=
extra
[
controler
].
size
()
-
1
;
i
>
p
;
--
i
)
{
extra
[
controler
][
i
]
=
extra
[
controler
][
i
-
1
];
extra
[
controler
][
i
]
->
sequence
++
;
extra
[
controler
][
i
]
->
curPos
+=
irr
::
core
::
vector3df
(
0
,
0
,
0.01
f
);
extra
[
controler
][
i
]
->
mTransform
.
setTranslation
(
extra
[
controler
][
i
]
->
curPos
);
}
extra
[
controler
][
p
]
=
pcard
;
pcard
->
sequence
=
p
;
size_t
faceup_begin
=
extra
[
controler
].
size
()
-
extra_p_count
[
controler
];
extra
[
controler
].
insert
(
extra
[
controler
].
begin
()
+
faceup_begin
,
pcard
);
}
ResetSequence
(
extra
[
controler
],
true
);
if
(
pcard
->
position
&
POS_FACEUP
)
extra_p_count
[
controler
]
++
;
break
;
...
...
@@ -256,73 +252,52 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
}
}
ClientCard
*
ClientField
::
RemoveCard
(
int
controler
,
int
location
,
int
sequence
)
{
ClientCard
*
pcard
=
0
;
ClientCard
*
pcard
=
nullptr
;
switch
(
location
)
{
case
LOCATION_DECK
:
{
pcard
=
deck
[
controler
][
sequence
];
for
(
size_t
i
=
sequence
;
i
<
deck
[
controler
].
size
()
-
1
;
++
i
)
{
deck
[
controler
][
i
]
=
deck
[
controler
][
i
+
1
];
deck
[
controler
][
i
]
->
sequence
--
;
deck
[
controler
][
i
]
->
curPos
-=
irr
::
core
::
vector3df
(
0
,
0
,
0.01
f
);
deck
[
controler
][
i
]
->
mTransform
.
setTranslation
(
deck
[
controler
][
i
]
->
curPos
);
}
deck
[
controler
].
erase
(
deck
[
controler
].
end
()
-
1
);
deck
[
controler
].
erase
(
deck
[
controler
].
begin
()
+
sequence
);
ResetSequence
(
deck
[
controler
],
true
);
break
;
}
case
LOCATION_HAND
:
{
pcard
=
hand
[
controler
][
sequence
];
for
(
size_t
i
=
sequence
;
i
<
hand
[
controler
].
size
()
-
1
;
++
i
)
{
hand
[
controler
][
i
]
=
hand
[
controler
][
i
+
1
];
hand
[
controler
][
i
]
->
sequence
--
;
}
hand
[
controler
].
erase
(
hand
[
controler
].
end
()
-
1
);
hand
[
controler
].
erase
(
hand
[
controler
].
begin
()
+
sequence
);
ResetSequence
(
hand
[
controler
],
false
);
break
;
}
case
LOCATION_MZONE
:
{
pcard
=
mzone
[
controler
][
sequence
];
mzone
[
controler
][
sequence
]
=
0
;
mzone
[
controler
][
sequence
]
=
nullptr
;
break
;
}
case
LOCATION_SZONE
:
{
pcard
=
szone
[
controler
][
sequence
];
szone
[
controler
][
sequence
]
=
0
;
szone
[
controler
][
sequence
]
=
nullptr
;
break
;
}
case
LOCATION_GRAVE
:
{
pcard
=
grave
[
controler
][
sequence
];
for
(
size_t
i
=
sequence
;
i
<
grave
[
controler
].
size
()
-
1
;
++
i
)
{
grave
[
controler
][
i
]
=
grave
[
controler
][
i
+
1
];
grave
[
controler
][
i
]
->
sequence
--
;
grave
[
controler
][
i
]
->
curPos
-=
irr
::
core
::
vector3df
(
0
,
0
,
0.01
f
);
grave
[
controler
][
i
]
->
mTransform
.
setTranslation
(
grave
[
controler
][
i
]
->
curPos
);
}
grave
[
controler
].
erase
(
grave
[
controler
].
end
()
-
1
);
grave
[
controler
].
erase
(
grave
[
controler
].
begin
()
+
sequence
);
ResetSequence
(
grave
[
controler
],
true
);
break
;
}
case
LOCATION_REMOVED
:
{
pcard
=
remove
[
controler
][
sequence
];
for
(
size_t
i
=
sequence
;
i
<
remove
[
controler
].
size
()
-
1
;
++
i
)
{
remove
[
controler
][
i
]
=
remove
[
controler
][
i
+
1
];
remove
[
controler
][
i
]
->
sequence
--
;
remove
[
controler
][
i
]
->
curPos
-=
irr
::
core
::
vector3df
(
0
,
0
,
0.01
f
);
remove
[
controler
][
i
]
->
mTransform
.
setTranslation
(
remove
[
controler
][
i
]
->
curPos
);
}
remove
[
controler
].
erase
(
remove
[
controler
].
end
()
-
1
);
remove
[
controler
].
erase
(
remove
[
controler
].
begin
()
+
sequence
);
ResetSequence
(
remove
[
controler
],
true
);
break
;
}
case
LOCATION_EXTRA
:
{
pcard
=
extra
[
controler
][
sequence
];
for
(
size_t
i
=
sequence
;
i
<
extra
[
controler
].
size
()
-
1
;
++
i
)
{
extra
[
controler
][
i
]
=
extra
[
controler
][
i
+
1
];
extra
[
controler
][
i
]
->
sequence
--
;
extra
[
controler
][
i
]
->
curPos
-=
irr
::
core
::
vector3df
(
0
,
0
,
0.01
f
);
extra
[
controler
][
i
]
->
mTransform
.
setTranslation
(
extra
[
controler
][
i
]
->
curPos
);
}
extra
[
controler
].
erase
(
extra
[
controler
].
end
()
-
1
);
extra
[
controler
].
erase
(
extra
[
controler
].
begin
()
+
sequence
);
ResetSequence
(
extra
[
controler
],
true
);
if
(
pcard
->
position
&
POS_FACEUP
)
extra_p_count
[
controler
]
--
;
break
;
}
default:
return
nullptr
;
}
pcard
->
location
=
0
;
return
pcard
;
...
...
@@ -456,7 +431,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnCardSelect
[
i
],
selectable_cards
[
i
]
->
chain_code
));
else
mainGame
->
btnCardSelect
[
i
]
->
setImage
(
imageManager
.
tCover
[
selectable_cards
[
i
]
->
controler
+
2
]);
mainGame
->
btnCardSelect
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
startpos
+
i
*
125
,
55
,
startpos
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardSelect
[
i
]
->
setRelativePosition
(
irr
::
core
::
rect
<
irr
::
s32
>
(
startpos
+
i
*
125
,
55
,
startpos
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardSelect
[
i
]
->
setPressed
(
false
);
mainGame
->
btnCardSelect
[
i
]
->
setVisible
(
true
);
if
(
mainGame
->
dInfo
.
curMsg
!=
MSG_SORT_CARD
)
{
...
...
@@ -511,7 +486,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
mainGame
->
stCardPos
[
i
]
->
setBackgroundColor
(
0xffffffff
);
}
mainGame
->
stCardPos
[
i
]
->
setVisible
(
true
);
mainGame
->
stCardPos
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
startpos
+
i
*
125
,
30
,
startpos
+
120
+
i
*
125
,
50
));
mainGame
->
stCardPos
[
i
]
->
setRelativePosition
(
irr
::
core
::
rect
<
irr
::
s32
>
(
startpos
+
i
*
125
,
30
,
startpos
+
120
+
i
*
125
,
50
));
}
if
(
selectable_cards
.
size
()
<=
5
)
{
for
(
int
i
=
selectable_cards
.
size
();
i
<
5
;
++
i
)
{
...
...
@@ -544,7 +519,7 @@ void ClientField::ShowChainCard() {
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnCardSelect
[
i
],
selectable_cards
[
i
]
->
code
));
else
mainGame
->
btnCardSelect
[
i
]
->
setImage
(
imageManager
.
tCover
[
selectable_cards
[
i
]
->
controler
+
2
]);
mainGame
->
btnCardSelect
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
startpos
+
i
*
125
,
55
,
startpos
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardSelect
[
i
]
->
setRelativePosition
(
irr
::
core
::
rect
<
irr
::
s32
>
(
startpos
+
i
*
125
,
55
,
startpos
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardSelect
[
i
]
->
setPressed
(
false
);
mainGame
->
btnCardSelect
[
i
]
->
setVisible
(
true
);
wchar_t
formatBuffer
[
2048
];
...
...
@@ -563,7 +538,7 @@ void ClientField::ShowChainCard() {
else
mainGame
->
stCardPos
[
i
]
->
setBackgroundColor
(
0xffffffff
);
}
mainGame
->
stCardPos
[
i
]
->
setVisible
(
true
);
mainGame
->
stCardPos
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
startpos
+
i
*
125
,
30
,
startpos
+
120
+
i
*
125
,
50
));
mainGame
->
stCardPos
[
i
]
->
setRelativePosition
(
irr
::
core
::
rect
<
irr
::
s32
>
(
startpos
+
i
*
125
,
30
,
startpos
+
120
+
i
*
125
,
50
));
}
if
(
selectable_cards
.
size
()
<=
5
)
{
for
(
int
i
=
selectable_cards
.
size
();
i
<
5
;
++
i
)
{
...
...
@@ -599,7 +574,7 @@ void ClientField::ShowLocationCard() {
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnCardDisplay
[
i
],
display_cards
[
i
]
->
code
));
else
mainGame
->
btnCardDisplay
[
i
]
->
setImage
(
imageManager
.
tCover
[
display_cards
[
i
]
->
controler
+
2
]);
mainGame
->
btnCardDisplay
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
startpos
+
i
*
125
,
55
,
startpos
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardDisplay
[
i
]
->
setRelativePosition
(
irr
::
core
::
rect
<
irr
::
s32
>
(
startpos
+
i
*
125
,
55
,
startpos
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardDisplay
[
i
]
->
setPressed
(
false
);
mainGame
->
btnCardDisplay
[
i
]
->
setVisible
(
true
);
wchar_t
formatBuffer
[
2048
];
...
...
@@ -632,7 +607,7 @@ void ClientField::ShowLocationCard() {
mainGame
->
stDisplayPos
[
i
]
->
setBackgroundColor
(
0xffffffff
);
}
mainGame
->
stDisplayPos
[
i
]
->
setVisible
(
true
);
mainGame
->
stDisplayPos
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
startpos
+
i
*
125
,
30
,
startpos
+
120
+
i
*
125
,
50
));
mainGame
->
stDisplayPos
[
i
]
->
setRelativePosition
(
irr
::
core
::
rect
<
irr
::
s32
>
(
startpos
+
i
*
125
,
30
,
startpos
+
120
+
i
*
125
,
50
));
}
if
(
display_cards
.
size
()
<=
5
)
{
for
(
int
i
=
display_cards
.
size
();
i
<
5
;
++
i
)
{
...
...
@@ -677,7 +652,7 @@ void ClientField::ShowSelectOption(int select_hint) {
mainGame
->
btnOptionOK
->
setVisible
(
false
);
for
(
int
i
=
0
;
i
<
5
;
i
++
)
mainGame
->
btnOption
[
i
]
->
setVisible
(
i
<
count
);
recti
pos
=
mainGame
->
wOptions
->
getRelativePosition
();
irr
::
core
::
recti
pos
=
mainGame
->
wOptions
->
getRelativePosition
();
int
newheight
=
30
+
40
*
(
scrollbar
?
5
:
count
);
int
oldheight
=
pos
.
LowerRightCorner
.
Y
-
pos
.
UpperLeftCorner
.
Y
;
pos
.
UpperLeftCorner
.
Y
=
pos
.
UpperLeftCorner
.
Y
+
(
oldheight
-
newheight
)
/
2
;
...
...
@@ -692,7 +667,7 @@ void ClientField::ShowSelectOption(int select_hint) {
mainGame
->
btnOptionOK
->
setVisible
(
true
);
for
(
int
i
=
0
;
i
<
5
;
i
++
)
mainGame
->
btnOption
[
i
]
->
setVisible
(
false
);
recti
pos
=
mainGame
->
wOptions
->
getRelativePosition
();
irr
::
core
::
recti
pos
=
mainGame
->
wOptions
->
getRelativePosition
();
pos
.
LowerRightCorner
.
Y
=
pos
.
UpperLeftCorner
.
Y
+
140
;
mainGame
->
wOptions
->
setRelativePosition
(
pos
);
}
...
...
gframe/client_field.h
View file @
c7d6b2a5
...
...
@@ -96,6 +96,7 @@ public:
~
ClientField
();
void
Clear
();
void
Initial
(
int
player
,
int
deckc
,
int
extrac
);
void
ResetSequence
(
std
::
vector
<
ClientCard
*>&
list
,
bool
reset_height
);
ClientCard
*
GetCard
(
int
controler
,
int
location
,
int
sequence
,
int
sub_seq
=
0
);
void
AddCard
(
ClientCard
*
pcard
,
int
controler
,
int
location
,
int
sequence
);
ClientCard
*
RemoveCard
(
int
controler
,
int
location
,
int
sequence
);
...
...
gframe/config.h
View file @
c7d6b2a5
...
...
@@ -3,6 +3,9 @@
#define _IRR_STATIC_LIB_
#define IRR_COMPILE_WITH_DX9_DEV_PACK
#include <cerrno>
#ifdef _WIN32
#define NOMINMAX
...
...
@@ -22,7 +25,6 @@
#else //_WIN32
#include <errno.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
...
...
@@ -44,7 +46,7 @@
#endif
#include <cstdio>
#include <
stdlib.h
>
#include <
cstdlib
>
#include <iostream>
#include <algorithm>
#include <string>
...
...
@@ -71,12 +73,6 @@ inline FILE* mywfopen(const wchar_t* filename, const char* mode) {
}
#include <irrlicht.h>
using
namespace
irr
;
using
namespace
core
;
using
namespace
scene
;
using
namespace
video
;
using
namespace
io
;
using
namespace
gui
;
extern
const
unsigned
short
PRO_VERSION
;
extern
unsigned
int
enable_log
;
...
...
gframe/data_manager.cpp
View file @
c7d6b2a5
...
...
@@ -13,23 +13,21 @@ DataManager::DataManager() : _datas(32768), _strings(32768) {
extra_setcode
=
{
{
8512558u
,
{
0x8f
,
0x54
,
0x59
,
0x82
,
0x13a
}},
};
}
bool
DataManager
::
ReadDB
(
sqlite3
*
pDB
)
{
sqlite3_stmt
*
pStmt
{}
;
sqlite3_stmt
*
pStmt
=
nullptr
;
const
char
*
sql
=
"select * from datas,texts where datas.id=texts.id"
;
if
(
sqlite3_prepare_v2
(
pDB
,
sql
,
-
1
,
&
pStmt
,
0
)
!=
SQLITE_OK
)
return
Error
(
pDB
);
return
Error
(
pDB
,
pStmt
);
wchar_t
strBuffer
[
4096
];
int
step
=
0
;
do
{
CardDataC
cd
;
CardString
cs
;
step
=
sqlite3_step
(
pStmt
);
if
(
step
==
SQLITE_BUSY
||
step
==
SQLITE_ERROR
||
step
==
SQLITE_MISUSE
)
return
Error
(
pDB
,
pStmt
);
else
if
(
step
==
SQLITE_ROW
)
{
if
(
step
==
SQLITE_ROW
)
{
cd
.
code
=
sqlite3_column_int
(
pStmt
,
0
);
cd
.
ot
=
sqlite3_column_int
(
pStmt
,
1
);
cd
.
alias
=
sqlite3_column_int
(
pStmt
,
2
);
auto
setcode
=
sqlite3_column_int64
(
pStmt
,
3
);
uint64_t
setcode
=
static_cast
<
uint64_t
>
(
sqlite3_column_int64
(
pStmt
,
3
)
);
if
(
setcode
)
{
auto
it
=
extra_setcode
.
find
(
cd
.
code
);
if
(
it
!=
extra_setcode
.
end
())
{
...
...
@@ -42,7 +40,7 @@ bool DataManager::ReadDB(sqlite3* pDB) {
else
cd
.
set_setcode
(
setcode
);
}
cd
.
type
=
s
qlite3_column_int
(
pStmt
,
4
);
cd
.
type
=
s
tatic_cast
<
decltype
(
cd
.
type
)
>
(
sqlite3_column_int64
(
pStmt
,
4
)
);
cd
.
attack
=
sqlite3_column_int
(
pStmt
,
5
);
cd
.
defense
=
sqlite3_column_int
(
pStmt
,
6
);
if
(
cd
.
type
&
TYPE_LINK
)
{
...
...
@@ -51,13 +49,13 @@ bool DataManager::ReadDB(sqlite3* pDB) {
}
else
cd
.
link_marker
=
0
;
u
nsigned
int
level
=
sqlite3_column_int
(
pStmt
,
7
);
u
int32_t
level
=
static_cast
<
uint32_t
>
(
sqlite3_column_int
(
pStmt
,
7
)
);
cd
.
level
=
level
&
0xff
;
cd
.
lscale
=
(
level
>>
24
)
&
0xff
;
cd
.
rscale
=
(
level
>>
16
)
&
0xff
;
cd
.
race
=
s
qlite3_column_int
(
pStmt
,
8
);
cd
.
attribute
=
s
qlite3_column_int
(
pStmt
,
9
);
cd
.
category
=
s
qlite3_column_int
(
pStmt
,
10
);
cd
.
race
=
s
tatic_cast
<
decltype
(
cd
.
race
)
>
(
sqlite3_column_int64
(
pStmt
,
8
)
);
cd
.
attribute
=
s
tatic_cast
<
decltype
(
cd
.
attribute
)
>
(
sqlite3_column_int64
(
pStmt
,
9
)
);
cd
.
category
=
s
tatic_cast
<
decltype
(
cd
.
category
)
>
(
sqlite3_column_int64
(
pStmt
,
10
)
);
_datas
[
cd
.
code
]
=
cd
;
if
(
const
char
*
text
=
(
const
char
*
)
sqlite3_column_text
(
pStmt
,
12
))
{
BufferIO
::
DecodeUTF8
(
text
,
strBuffer
);
...
...
@@ -76,7 +74,9 @@ bool DataManager::ReadDB(sqlite3* pDB) {
}
_strings
[
cd
.
code
]
=
cs
;
}
}
while
(
step
!=
SQLITE_DONE
);
else
if
(
step
!=
SQLITE_DONE
)
return
Error
(
pDB
,
pStmt
);
}
while
(
step
==
SQLITE_ROW
);
sqlite3_finalize
(
pStmt
);
return
true
;
}
...
...
@@ -84,17 +84,17 @@ bool DataManager::LoadDB(const wchar_t* wfile) {
char
file
[
256
];
BufferIO
::
EncodeUTF8
(
wfile
,
file
);
#ifdef _WIN32
IReadFile
*
reader
=
FileSystem
->
createAndOpenFile
(
wfile
);
auto
reader
=
FileSystem
->
createAndOpenFile
(
wfile
);
#else
IReadFile
*
reader
=
FileSystem
->
createAndOpenFile
(
file
);
auto
reader
=
FileSystem
->
createAndOpenFile
(
file
);
#endif
if
(
reader
==
nullptr
)
return
false
;
spmemvfs_db_t
db
;
spmembuffer_t
*
mem
=
(
spmembuffer_t
*
)
calloc
(
sizeof
(
spmembuffer_t
),
1
);
spmembuffer_t
*
mem
=
(
spmembuffer_t
*
)
std
::
calloc
(
sizeof
(
spmembuffer_t
),
1
);
spmemvfs_env_init
();
mem
->
total
=
mem
->
used
=
reader
->
getSize
();
mem
->
data
=
(
char
*
)
malloc
(
mem
->
total
+
1
);
mem
->
data
=
(
char
*
)
std
::
malloc
(
mem
->
total
+
1
);
reader
->
read
(
mem
->
data
,
mem
->
total
);
reader
->
drop
();
(
mem
->
data
)[
mem
->
total
]
=
'\0'
;
...
...
@@ -417,9 +417,9 @@ unsigned char* DataManager::ReadScriptFromIrrFS(const char* script_name, int* sl
#ifdef _WIN32
wchar_t
fname
[
256
]{};
BufferIO
::
DecodeUTF8
(
script_name
,
fname
);
IReadFile
*
reader
=
FileSystem
->
createAndOpenFile
(
fname
);
auto
reader
=
FileSystem
->
createAndOpenFile
(
fname
);
#else
IReadFile
*
reader
=
FileSystem
->
createAndOpenFile
(
script_name
);
auto
reader
=
FileSystem
->
createAndOpenFile
(
script_name
);
#endif
if
(
!
reader
)
return
nullptr
;
...
...
@@ -431,7 +431,9 @@ unsigned char* DataManager::ReadScriptFromIrrFS(const char* script_name, int* sl
return
scriptBuffer
;
}
unsigned
char
*
DataManager
::
ReadScriptFromFile
(
const
char
*
script_name
,
int
*
slen
)
{
FILE
*
fp
=
std
::
fopen
(
script_name
,
"rb"
);
wchar_t
fname
[
256
]{};
BufferIO
::
DecodeUTF8
(
script_name
,
fname
);
FILE
*
fp
=
mywfopen
(
fname
,
"rb"
);
if
(
!
fp
)
return
nullptr
;
size_t
len
=
std
::
fread
(
scriptBuffer
,
1
,
sizeof
scriptBuffer
,
fp
);
...
...
gframe/deck_con.cpp
View file @
c7d6b2a5
...
...
@@ -69,7 +69,18 @@ void DeckBuilder::Initialize() {
mainGame
->
btnSideShuffle
->
setVisible
(
false
);
mainGame
->
btnSideSort
->
setVisible
(
false
);
mainGame
->
btnSideReload
->
setVisible
(
false
);
filterList
=
&
deckManager
.
_lfList
[
mainGame
->
gameConf
.
use_lflist
?
mainGame
->
gameConf
.
default_lflist
:
deckManager
.
_lfList
.
size
()
-
1
].
content
;
if
(
mainGame
->
gameConf
.
use_lflist
)
{
if
(
mainGame
->
gameConf
.
default_lflist
>=
0
&&
mainGame
->
gameConf
.
default_lflist
<
(
int
)
deckManager
.
_lfList
.
size
())
{
filterList
=
&
deckManager
.
_lfList
[
mainGame
->
gameConf
.
default_lflist
];
}
else
{
mainGame
->
gameConf
.
default_lflist
=
0
;
filterList
=
&
deckManager
.
_lfList
.
front
();
}
}
else
{
filterList
=
&
deckManager
.
_lfList
.
back
();
}
ClearSearch
();
rnd
.
reset
((
uint_fast32_t
)
std
::
time
(
nullptr
));
mouse_pos
.
set
(
0
,
0
);
...
...
@@ -126,7 +137,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
return
false
;
switch
(
event
.
EventType
)
{
case
irr
:
:
EET_GUI_EVENT
:
{
s32
id
=
event
.
GUIEvent
.
Caller
->
getID
();
irr
::
s32
id
=
event
.
GUIEvent
.
Caller
->
getID
();
if
(((
mainGame
->
wCategories
->
isVisible
()
&&
id
!=
BUTTON_CATEGORY_OK
)
||
(
mainGame
->
wQuery
->
isVisible
()
&&
id
!=
BUTTON_YES
&&
id
!=
BUTTON_NO
)
||
(
mainGame
->
wLinkMarks
->
isVisible
()
&&
id
!=
BUTTON_MARKERS_OK
)
||
...
...
@@ -1224,7 +1235,7 @@ void DeckBuilder::GetHoveredCard() {
irr
::
gui
::
IGUIElement
*
root
=
mainGame
->
env
->
getRootGUIElement
();
if
(
root
->
getElementFromPoint
(
mouse_pos
)
!=
root
)
return
;
position
2di
pos
=
mainGame
->
ResizeReverse
(
mouse_pos
.
X
,
mouse_pos
.
Y
);
irr
::
core
::
vector
2di
pos
=
mainGame
->
ResizeReverse
(
mouse_pos
.
X
,
mouse_pos
.
Y
);
int
x
=
pos
.
X
;
int
y
=
pos
.
Y
;
is_lastcard
=
0
;
...
...
@@ -1480,7 +1491,7 @@ void DeckBuilder::FilterCards() {
if
(
filter_marks
&&
(
data
.
link_marker
&
filter_marks
)
!=
filter_marks
)
continue
;
if
(
filter_lm
)
{
if
(
filter_lm
<=
3
&&
(
!
filterList
->
co
unt
(
ptr
->
first
)
||
(
*
filterList
)
.
at
(
ptr
->
first
)
!=
filter_lm
-
1
))
if
(
filter_lm
<=
3
&&
(
!
filterList
->
co
ntent
.
count
(
ptr
->
first
)
||
filterList
->
content
.
at
(
ptr
->
first
)
!=
filter_lm
-
1
))
continue
;
if
(
filter_lm
==
4
&&
!
(
data
.
ot
&
AVAIL_OCG
))
continue
;
...
...
@@ -1669,13 +1680,13 @@ void DeckBuilder::ShowDeckManage() {
void
DeckBuilder
::
ShowBigCard
(
int
code
,
float
zoom
)
{
bigcard_code
=
code
;
bigcard_zoom
=
zoom
;
ITexture
*
img
=
imageManager
.
GetBigPicture
(
code
,
zoom
);
auto
img
=
imageManager
.
GetBigPicture
(
code
,
zoom
);
mainGame
->
imgBigCard
->
setImage
(
img
);
auto
size
=
img
->
getSize
();
s32
left
=
mainGame
->
window_size
.
Width
/
2
-
size
.
Width
/
2
;
s32
top
=
mainGame
->
window_size
.
Height
/
2
-
size
.
Height
/
2
;
mainGame
->
imgBigCard
->
setRelativePosition
(
recti
(
0
,
0
,
size
.
Width
,
size
.
Height
));
mainGame
->
wBigCard
->
setRelativePosition
(
recti
(
left
,
top
,
left
+
size
.
Width
,
top
+
size
.
Height
));
irr
::
s32
left
=
mainGame
->
window_size
.
Width
/
2
-
size
.
Width
/
2
;
irr
::
s32
top
=
mainGame
->
window_size
.
Height
/
2
-
size
.
Height
/
2
;
mainGame
->
imgBigCard
->
setRelativePosition
(
irr
::
core
::
recti
(
0
,
0
,
size
.
Width
,
size
.
Height
));
mainGame
->
wBigCard
->
setRelativePosition
(
irr
::
core
::
recti
(
left
,
top
,
left
+
size
.
Width
,
top
+
size
.
Height
));
mainGame
->
gMutex
.
lock
();
mainGame
->
btnBigCardOriginalSize
->
setVisible
(
true
);
mainGame
->
btnBigCardZoomIn
->
setVisible
(
true
);
...
...
@@ -1685,12 +1696,12 @@ void DeckBuilder::ShowBigCard(int code, float zoom) {
mainGame
->
env
->
getRootGUIElement
()
->
bringToFront
(
mainGame
->
wBigCard
);
mainGame
->
gMutex
.
unlock
();
}
void
DeckBuilder
::
ZoomBigCard
(
s32
centerx
,
s32
centery
)
{
void
DeckBuilder
::
ZoomBigCard
(
irr
::
s32
centerx
,
irr
::
s32
centery
)
{
if
(
bigcard_zoom
>=
4
)
bigcard_zoom
=
4
;
if
(
bigcard_zoom
<=
0.2
f
)
bigcard_zoom
=
0.2
f
;
ITexture
*
img
=
imageManager
.
GetBigPicture
(
bigcard_code
,
bigcard_zoom
);
auto
img
=
imageManager
.
GetBigPicture
(
bigcard_code
,
bigcard_zoom
);
mainGame
->
imgBigCard
->
setImage
(
img
);
auto
size
=
img
->
getSize
();
auto
pos
=
mainGame
->
wBigCard
->
getRelativePosition
();
...
...
@@ -1700,10 +1711,10 @@ void DeckBuilder::ZoomBigCard(s32 centerx, s32 centery) {
}
float
posx
=
(
float
)(
centerx
-
pos
.
UpperLeftCorner
.
X
)
/
pos
.
getWidth
();
float
posy
=
(
float
)(
centery
-
pos
.
UpperLeftCorner
.
Y
)
/
pos
.
getHeight
();
s32
left
=
centerx
-
size
.
Width
*
posx
;
s32
top
=
centery
-
size
.
Height
*
posy
;
mainGame
->
imgBigCard
->
setRelativePosition
(
recti
(
0
,
0
,
size
.
Width
,
size
.
Height
));
mainGame
->
wBigCard
->
setRelativePosition
(
recti
(
left
,
top
,
left
+
size
.
Width
,
top
+
size
.
Height
));
irr
::
s32
left
=
centerx
-
size
.
Width
*
posx
;
irr
::
s32
top
=
centery
-
size
.
Height
*
posy
;
mainGame
->
imgBigCard
->
setRelativePosition
(
irr
::
core
::
recti
(
0
,
0
,
size
.
Width
,
size
.
Height
));
mainGame
->
wBigCard
->
setRelativePosition
(
irr
::
core
::
recti
(
left
,
top
,
left
+
size
.
Width
,
top
+
size
.
Height
));
}
void
DeckBuilder
::
CloseBigCard
()
{
mainGame
->
HideElement
(
mainGame
->
wBigCard
);
...
...
@@ -1822,8 +1833,8 @@ void DeckBuilder::pop_side(int seq) {
bool
DeckBuilder
::
check_limit
(
code_pointer
pointer
)
{
unsigned
int
limitcode
=
pointer
->
second
.
alias
?
pointer
->
second
.
alias
:
pointer
->
first
;
int
limit
=
3
;
auto
flit
=
filterList
->
find
(
limitcode
);
if
(
flit
!=
filterList
->
end
())
auto
flit
=
filterList
->
content
.
find
(
limitcode
);
if
(
flit
!=
filterList
->
content
.
end
())
limit
=
flit
->
second
;
for
(
auto
it
=
deckManager
.
current_deck
.
main
.
begin
();
it
!=
deckManager
.
current_deck
.
main
.
end
();
++
it
)
{
if
((
*
it
)
->
first
==
limitcode
||
(
*
it
)
->
second
.
alias
==
limitcode
)
...
...
gframe/deck_con.h
View file @
c7d6b2a5
#ifndef DECK_CON_H
#define DECK_CON_H
#include "config.h"
#include <unordered_map>
#include <vector>
#include <irrlicht.h>
#include "data_manager.h"
#include "deck_manager.h"
#include "../ocgcore/mtrandom.h"
namespace
ygo
{
...
...
@@ -28,7 +29,7 @@ public:
void
ChangeCategory
(
int
catesel
);
void
ShowDeckManage
();
void
ShowBigCard
(
int
code
,
float
zoom
);
void
ZoomBigCard
(
s32
centerx
=
-
1
,
s32
centery
=
-
1
);
void
ZoomBigCard
(
irr
::
s32
centerx
=
-
1
,
irr
::
s32
centery
=
-
1
);
void
CloseBigCard
();
bool
CardNameContains
(
const
wchar_t
*
haystack
,
const
wchar_t
*
needle
);
...
...
@@ -56,7 +57,7 @@ public:
unsigned
int
filter_scl
{};
unsigned
int
filter_marks
{};
int
filter_lm
{};
position
2di
mouse_pos
;
irr
::
core
::
vector
2di
mouse_pos
;
int
hovered_code
{};
int
hovered_pos
{};
int
hovered_seq
{
-
1
};
...
...
@@ -74,14 +75,14 @@ public:
code_pointer
draging_pointer
;
int
prev_category
{};
int
prev_deck
{};
s32
prev_operation
{};
irr
::
s32
prev_operation
{};
int
prev_sel
{
-
1
};
bool
is_modified
{};
bool
readonly
{};
bool
showing_pack
{};
mt19937
rnd
;
const
std
::
unordered_map
<
int
,
int
>*
filterList
;
const
LFList
*
filterList
{}
;
std
::
vector
<
code_pointer
>
results
;
wchar_t
result_string
[
8
]{};
std
::
vector
<
std
::
wstring
>
expansionPacks
;
...
...
gframe/deck_manager.cpp
View file @
c7d6b2a5
...
...
@@ -14,7 +14,7 @@ void DeckManager::LoadLFListSingle(const char* path) {
char
linebuf
[
256
]{};
wchar_t
strBuffer
[
256
]{};
if
(
fp
)
{
while
(
std
::
fgets
(
linebuf
,
256
,
fp
))
{
while
(
std
::
fgets
(
linebuf
,
sizeof
linebuf
,
fp
))
{
if
(
linebuf
[
0
]
==
'#'
)
continue
;
if
(
linebuf
[
0
]
==
'!'
)
{
...
...
@@ -28,19 +28,16 @@ void DeckManager::LoadLFListSingle(const char* path) {
cur
=
_lfList
.
rbegin
();
continue
;
}
int
code
=
0
;
int
count
=
-
1
;
if
(
std
::
sscanf
(
linebuf
,
"%d %d"
,
&
code
,
&
count
)
!=
2
)
if
(
cur
==
_lfList
.
rend
())
continue
;
if
(
code
<=
0
||
code
>
MAX_CARD_ID
)
unsigned
int
code
=
0
;
int
count
=
-
1
;
if
(
std
::
sscanf
(
linebuf
,
"%9u%*[ ]%9d"
,
&
code
,
&
count
)
!=
2
)
continue
;
if
(
count
<
0
||
count
>
2
)
continue
;
if
(
cur
==
_lfList
.
rend
())
continue
;
unsigned
int
hcode
=
code
;
cur
->
content
[
code
]
=
count
;
cur
->
hash
=
cur
->
hash
^
((
hcode
<<
18
)
|
(
hcode
>>
14
))
^
((
hcode
<<
(
27
+
count
))
|
(
h
code
>>
(
5
-
count
)));
cur
->
hash
=
cur
->
hash
^
((
code
<<
18
)
|
(
code
>>
14
))
^
((
code
<<
(
27
+
count
))
|
(
code
>>
(
5
-
count
)));
}
std
::
fclose
(
fp
);
}
...
...
@@ -53,7 +50,7 @@ void DeckManager::LoadLFList() {
nolimit
.
hash
=
0
;
_lfList
.
push_back
(
nolimit
);
}
const
wchar_t
*
DeckManager
::
GetLFListName
(
int
lfhash
)
{
const
wchar_t
*
DeckManager
::
GetLFListName
(
unsigned
int
lfhash
)
{
auto
lit
=
std
::
find_if
(
_lfList
.
begin
(),
_lfList
.
end
(),
[
lfhash
](
const
ygo
::
LFList
&
list
)
{
return
list
.
hash
==
lfhash
;
});
...
...
@@ -61,12 +58,12 @@ const wchar_t* DeckManager::GetLFListName(int lfhash) {
return
lit
->
listName
.
c_str
();
return
dataManager
.
unknown_string
;
}
const
std
::
unordered_map
<
int
,
int
>*
DeckManager
::
GetLFListContent
(
int
lfhash
)
{
const
LFList
*
DeckManager
::
GetLFList
(
unsigned
int
lfhash
)
{
auto
lit
=
std
::
find_if
(
_lfList
.
begin
(),
_lfList
.
end
(),
[
lfhash
](
const
ygo
::
LFList
&
list
)
{
return
list
.
hash
==
lfhash
;
});
if
(
lit
!=
_lfList
.
end
())
return
&
lit
->
content
;
if
(
lit
!=
_lfList
.
end
())
return
&
(
*
lit
)
;
return
nullptr
;
}
static
unsigned
int
checkAvail
(
unsigned
int
ot
,
unsigned
int
avail
)
{
...
...
@@ -87,9 +84,10 @@ unsigned int DeckManager::CheckDeck(Deck& deck, int lfhash, int rule) {
return
(
DECKERROR_EXTRACOUNT
<<
28
)
|
(
unsigned
)
deck
.
extra
.
size
();
if
(
deck
.
side
.
size
()
>
SIDE_MAX_SIZE
)
return
(
DECKERROR_SIDECOUNT
<<
28
)
|
(
unsigned
)
deck
.
side
.
size
();
auto
l
ist
=
GetLFListConten
t
(
lfhash
);
if
(
!
list
)
auto
l
flist
=
GetLFLis
t
(
lfhash
);
if
(
!
l
fl
ist
)
return
0
;
auto
&
list
=
lflist
->
content
;
const
unsigned
int
rule_map
[
6
]
=
{
AVAIL_OCG
,
AVAIL_TCG
,
AVAIL_SC
,
AVAIL_CUSTOM
,
AVAIL_OCGTCG
,
0
};
unsigned
int
avail
=
0
;
if
(
rule
>=
0
&&
rule
<
(
int
)(
sizeof
rule_map
/
sizeof
rule_map
[
0
]))
...
...
@@ -105,8 +103,8 @@ unsigned int DeckManager::CheckDeck(Deck& deck, int lfhash, int rule) {
int
dc
=
ccount
[
code
];
if
(
dc
>
3
)
return
(
DECKERROR_CARDCOUNT
<<
28
)
|
cit
->
first
;
auto
it
=
list
->
find
(
code
);
if
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
auto
it
=
list
.
find
(
code
);
if
(
it
!=
list
.
end
()
&&
dc
>
it
->
second
)
return
(
DECKERROR_LFLIST
<<
28
)
|
cit
->
first
;
}
for
(
auto
&
cit
:
deck
.
extra
)
{
...
...
@@ -120,8 +118,8 @@ unsigned int DeckManager::CheckDeck(Deck& deck, int lfhash, int rule) {
int
dc
=
ccount
[
code
];
if
(
dc
>
3
)
return
(
DECKERROR_CARDCOUNT
<<
28
)
|
cit
->
first
;
auto
it
=
list
->
find
(
code
);
if
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
auto
it
=
list
.
find
(
code
);
if
(
it
!=
list
.
end
()
&&
dc
>
it
->
second
)
return
(
DECKERROR_LFLIST
<<
28
)
|
cit
->
first
;
}
for
(
auto
&
cit
:
deck
.
side
)
{
...
...
@@ -135,8 +133,8 @@ unsigned int DeckManager::CheckDeck(Deck& deck, int lfhash, int rule) {
int
dc
=
ccount
[
code
];
if
(
dc
>
3
)
return
(
DECKERROR_CARDCOUNT
<<
28
)
|
cit
->
first
;
auto
it
=
list
->
find
(
code
);
if
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
auto
it
=
list
.
find
(
code
);
if
(
it
!=
list
.
end
()
&&
dc
>
it
->
second
)
return
(
DECKERROR_LFLIST
<<
28
)
|
cit
->
first
;
}
return
0
;
...
...
@@ -185,25 +183,29 @@ int DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, bool is_p
return
errorcode
;
}
int
DeckManager
::
LoadDeck
(
Deck
&
deck
,
std
::
istringstream
&
deckStream
,
bool
is_packlist
)
{
int
ct
=
0
,
mainc
=
0
,
sidec
=
0
,
code
=
0
;
size_t
ct
=
0
;
int
mainc
=
0
,
sidec
=
0
,
code
=
0
;
int
cardlist
[
PACK_MAX_SIZE
]{};
bool
is_side
=
false
;
std
::
string
linebuf
;
while
(
std
::
getline
(
deckStream
,
linebuf
,
'\n'
)
&&
ct
<
(
int
)(
sizeof
cardlist
/
sizeof
cardlist
[
0
]))
{
while
(
std
::
getline
(
deckStream
,
linebuf
,
'\n'
)
&&
ct
<
(
sizeof
cardlist
/
sizeof
cardlist
[
0
]))
{
if
(
linebuf
[
0
]
==
'!'
)
{
is_side
=
true
;
continue
;
}
if
(
linebuf
[
0
]
<
'0'
||
linebuf
[
0
]
>
'9'
)
continue
;
code
=
std
::
stoi
(
linebuf
);
errno
=
0
;
code
=
std
::
strtol
(
linebuf
.
c_str
(),
nullptr
,
10
);
if
(
errno
==
ERANGE
)
continue
;
cardlist
[
ct
++
]
=
code
;
if
(
is_side
)
++
sidec
;
else
++
mainc
;
}
return
LoadDeck
(
current_
deck
,
cardlist
,
mainc
,
sidec
,
is_packlist
);
return
LoadDeck
(
deck
,
cardlist
,
mainc
,
sidec
,
is_packlist
);
}
bool
DeckManager
::
LoadSide
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
)
{
std
::
unordered_map
<
int
,
int
>
pcount
;
...
...
@@ -277,7 +279,7 @@ irr::io::IReadFile* DeckManager::OpenDeckReader(const wchar_t* file) {
}
bool
DeckManager
::
LoadCurrentDeck
(
const
wchar_t
*
file
,
bool
is_packlist
)
{
current_deck
.
clear
();
IReadFile
*
reader
=
OpenDeckReader
(
file
);
auto
reader
=
OpenDeckReader
(
file
);
if
(
!
reader
)
{
wchar_t
localfile
[
256
];
myswprintf
(
localfile
,
L"./deck/%ls.ydk"
,
file
);
...
...
gframe/deck_manager.h
View file @
c7d6b2a5
...
...
@@ -16,13 +16,13 @@ namespace ygo {
struct
LFList
{
unsigned
int
hash
{};
std
::
wstring
listName
;
std
::
unordered_map
<
int
,
int
>
content
;
std
::
unordered_map
<
unsigned
int
,
int
>
content
;
};
struct
Deck
{
std
::
vector
<
code_pointer
>
main
;
std
::
vector
<
code_pointer
>
extra
;
std
::
vector
<
code_pointer
>
side
;
Deck
()
{}
Deck
()
=
default
;
Deck
(
const
Deck
&
ndeck
)
{
main
=
ndeck
.
main
;
extra
=
ndeck
.
extra
;
...
...
@@ -44,8 +44,8 @@ public:
void
LoadLFListSingle
(
const
char
*
path
);
void
LoadLFList
();
const
wchar_t
*
GetLFListName
(
int
lfhash
);
const
std
::
unordered_map
<
int
,
int
>*
GetLFListContent
(
int
lfhash
);
const
wchar_t
*
GetLFListName
(
unsigned
int
lfhash
);
const
LFList
*
GetLFList
(
unsigned
int
lfhash
);
unsigned
int
CheckDeck
(
Deck
&
deck
,
int
lfhash
,
int
rule
);
int
LoadDeck
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
,
bool
is_packlist
=
false
);
int
LoadDeck
(
Deck
&
deck
,
std
::
istringstream
&
deckStream
,
bool
is_packlist
=
false
);
...
...
gframe/drawing.cpp
View file @
c7d6b2a5
...
...
@@ -50,7 +50,7 @@ void Game::DrawSelectionLine(irr::video::S3DVertex* vec, bool strip, int width,
}
}
void
Game
::
DrawSelectionLine
(
irr
::
gui
::
IGUIElement
*
element
,
int
width
,
irr
::
video
::
SColor
color
)
{
recti
pos
=
element
->
getAbsolutePosition
();
irr
::
core
::
recti
pos
=
element
->
getAbsolutePosition
();
float
x1
=
pos
.
UpperLeftCorner
.
X
;
float
x2
=
pos
.
LowerRightCorner
.
X
;
float
y1
=
pos
.
UpperLeftCorner
.
Y
;
...
...
@@ -58,22 +58,22 @@ void Game::DrawSelectionLine(irr::gui::IGUIElement* element, int width, irr::vid
float
w
=
pos
.
getWidth
();
float
h
=
pos
.
getHeight
();
if
(
linePatternD3D
<
15
)
{
driver
->
draw2DRectangle
(
color
,
recti
(
x1
-
1
-
width
,
y1
-
1
-
width
,
x1
+
(
w
*
(
linePatternD3D
+
1
)
/
15.0
)
+
1
+
width
,
y1
-
1
));
driver
->
draw2DRectangle
(
color
,
recti
(
x2
-
(
w
*
(
linePatternD3D
+
1
)
/
15.0
)
-
1
-
width
,
y2
+
1
,
x2
+
1
+
width
,
y2
+
1
+
width
));
driver
->
draw2DRectangle
(
color
,
recti
(
x1
-
1
-
width
,
y1
-
1
-
width
,
x1
-
1
,
y2
-
(
h
*
(
linePatternD3D
+
1
)
/
15.0
)
+
1
+
width
));
driver
->
draw2DRectangle
(
color
,
recti
(
x2
+
1
,
y1
+
(
h
*
(
linePatternD3D
+
1
)
/
15.0
)
-
1
-
width
,
x2
+
1
+
width
,
y2
+
1
+
width
));
driver
->
draw2DRectangle
(
color
,
irr
::
core
::
recti
(
x1
-
1
-
width
,
y1
-
1
-
width
,
x1
+
(
w
*
(
linePatternD3D
+
1
)
/
15.0
)
+
1
+
width
,
y1
-
1
));
driver
->
draw2DRectangle
(
color
,
irr
::
core
::
recti
(
x2
-
(
w
*
(
linePatternD3D
+
1
)
/
15.0
)
-
1
-
width
,
y2
+
1
,
x2
+
1
+
width
,
y2
+
1
+
width
));
driver
->
draw2DRectangle
(
color
,
irr
::
core
::
recti
(
x1
-
1
-
width
,
y1
-
1
-
width
,
x1
-
1
,
y2
-
(
h
*
(
linePatternD3D
+
1
)
/
15.0
)
+
1
+
width
));
driver
->
draw2DRectangle
(
color
,
irr
::
core
::
recti
(
x2
+
1
,
y1
+
(
h
*
(
linePatternD3D
+
1
)
/
15.0
)
-
1
-
width
,
x2
+
1
+
width
,
y2
+
1
+
width
));
}
else
{
driver
->
draw2DRectangle
(
color
,
recti
(
x1
-
1
-
width
+
(
w
*
(
linePatternD3D
-
14
)
/
15.0
),
y1
-
1
-
width
,
x2
+
1
+
width
,
y1
-
1
));
driver
->
draw2DRectangle
(
color
,
recti
(
x1
-
1
-
width
,
y2
+
1
,
x2
-
(
w
*
(
linePatternD3D
-
14
)
/
15.0
)
+
1
+
width
,
y2
+
1
+
width
));
driver
->
draw2DRectangle
(
color
,
recti
(
x1
-
1
-
width
,
y2
-
(
h
*
(
linePatternD3D
-
14
)
/
15.0
)
-
1
-
width
,
x1
-
1
,
y2
+
1
+
width
));
driver
->
draw2DRectangle
(
color
,
recti
(
x2
+
1
,
y1
-
1
-
width
,
x2
+
1
+
width
,
y1
+
(
h
*
(
linePatternD3D
-
14
)
/
15.0
)
+
1
+
width
));
driver
->
draw2DRectangle
(
color
,
irr
::
core
::
recti
(
x1
-
1
-
width
+
(
w
*
(
linePatternD3D
-
14
)
/
15.0
),
y1
-
1
-
width
,
x2
+
1
+
width
,
y1
-
1
));
driver
->
draw2DRectangle
(
color
,
irr
::
core
::
recti
(
x1
-
1
-
width
,
y2
+
1
,
x2
-
(
w
*
(
linePatternD3D
-
14
)
/
15.0
)
+
1
+
width
,
y2
+
1
+
width
));
driver
->
draw2DRectangle
(
color
,
irr
::
core
::
recti
(
x1
-
1
-
width
,
y2
-
(
h
*
(
linePatternD3D
-
14
)
/
15.0
)
-
1
-
width
,
x1
-
1
,
y2
+
1
+
width
));
driver
->
draw2DRectangle
(
color
,
irr
::
core
::
recti
(
x2
+
1
,
y1
-
1
-
width
,
x2
+
1
+
width
,
y1
+
(
h
*
(
linePatternD3D
-
14
)
/
15.0
)
+
1
+
width
));
}
}
void
Game
::
DrawBackGround
()
{
static
int
selFieldAlpha
=
255
;
static
int
selFieldDAlpha
=
-
10
;
// matrix4 im = irr::core::IdentityMatrix;
// im.setTranslation(vector3df(0, 0, -0.01f));
// im.setTranslation(
irr::core::
vector3df(0, 0, -0.01f));
// driver->setTransform(irr::video::ETS_WORLD, im);
//dark shade
// matManager.mSelField.AmbientColor = 0xff000000;
...
...
@@ -98,7 +98,7 @@ void Game::DrawBackGround() {
fieldcode2
=
dField
.
szone
[
1
][
5
]
->
code
;
int
fieldcode
=
(
fieldcode1
>
0
)
?
fieldcode1
:
fieldcode2
;
if
(
fieldcode1
>
0
&&
fieldcode2
>
0
&&
fieldcode1
!=
fieldcode2
)
{
ITexture
*
texture
=
imageManager
.
GetTextureField
(
fieldcode1
);
auto
texture
=
imageManager
.
GetTextureField
(
fieldcode1
);
if
(
texture
)
{
drawField
=
true
;
matManager
.
mTexture
.
setTexture
(
0
,
texture
);
...
...
@@ -113,7 +113,7 @@ void Game::DrawBackGround() {
driver
->
drawVertexPrimitiveList
(
matManager
.
vFieldSpell2
,
4
,
matManager
.
iRectangle
,
2
);
}
}
else
if
(
fieldcode
>
0
)
{
ITexture
*
texture
=
imageManager
.
GetTextureField
(
fieldcode
);
auto
texture
=
imageManager
.
GetTextureField
(
fieldcode
);
if
(
texture
)
{
drawField
=
true
;
matManager
.
mTexture
.
setTexture
(
0
,
texture
);
...
...
@@ -186,7 +186,7 @@ void Game::DrawBackGround() {
if
(
dField
.
hovered_location
!=
0
&&
dField
.
hovered_location
!=
2
&&
dField
.
hovered_location
!=
POSITION_HINT
&&
!
(
dInfo
.
duel_rule
<
4
&&
dField
.
hovered_location
==
LOCATION_MZONE
&&
dField
.
hovered_sequence
>
4
)
&&
!
(
dInfo
.
duel_rule
>=
4
&&
dField
.
hovered_location
==
LOCATION_SZONE
&&
dField
.
hovered_sequence
>
5
))
{
S3DVertex
*
vertex
=
0
;
irr
::
video
::
S3DVertex
*
vertex
=
0
;
if
(
dField
.
hovered_location
==
LOCATION_DECK
)
vertex
=
matManager
.
vFieldDeck
[
dField
.
hovered_controler
];
else
if
(
dField
.
hovered_location
==
LOCATION_MZONE
)
{
...
...
@@ -406,16 +406,16 @@ void Game::DrawCard(ClientCard* pcard) {
matManager
.
mTexture
.
setTexture
(
0
,
imageManager
.
tAttack
);
driver
->
setMaterial
(
matManager
.
mTexture
);
irr
::
core
::
matrix4
atk
;
atk
.
setTranslation
(
pcard
->
curPos
+
vector3df
(
0
,
(
pcard
->
controler
==
0
?
-
1
:
1
)
*
(
atkdy
/
4.0
f
+
0.35
f
),
0.05
f
));
atk
.
setRotationRadians
(
vector3df
(
0
,
0
,
pcard
->
controler
==
0
?
0
:
3.1415926
f
));
atk
.
setTranslation
(
pcard
->
curPos
+
irr
::
core
::
vector3df
(
0
,
(
pcard
->
controler
==
0
?
-
1
:
1
)
*
(
atkdy
/
4.0
f
+
0.35
f
),
0.05
f
));
atk
.
setRotationRadians
(
irr
::
core
::
vector3df
(
0
,
0
,
pcard
->
controler
==
0
?
0
:
3.1415926
f
));
driver
->
setTransform
(
irr
::
video
::
ETS_WORLD
,
atk
);
driver
->
drawVertexPrimitiveList
(
matManager
.
vSymbol
,
4
,
matManager
.
iRectangle
,
2
);
}
}
template
<
typename
T
>
void
Game
::
DrawShadowText
(
irr
::
gui
::
CGUITTFont
*
font
,
const
T
&
text
,
const
core
::
rect
<
s32
>&
position
,
const
core
::
rect
<
s32
>&
padding
,
video
::
SColor
color
,
video
::
SColor
shadowcolor
,
bool
hcenter
,
bool
vcenter
,
const
core
::
rect
<
s32
>*
clip
)
{
core
::
rect
<
s32
>
shadowposition
=
recti
(
position
.
UpperLeftCorner
.
X
-
padding
.
UpperLeftCorner
.
X
,
position
.
UpperLeftCorner
.
Y
-
padding
.
UpperLeftCorner
.
Y
,
void
Game
::
DrawShadowText
(
irr
::
gui
::
CGUITTFont
*
font
,
const
T
&
text
,
const
irr
::
core
::
rect
<
irr
::
s32
>&
position
,
const
irr
::
core
::
rect
<
irr
::
s32
>&
padding
,
irr
::
video
::
SColor
color
,
irr
::
video
::
SColor
shadowcolor
,
bool
hcenter
,
bool
vcenter
,
const
irr
::
core
::
rect
<
irr
::
s32
>*
clip
)
{
irr
::
core
::
rect
<
irr
::
s32
>
shadowposition
=
irr
::
core
::
recti
(
position
.
UpperLeftCorner
.
X
-
padding
.
UpperLeftCorner
.
X
,
position
.
UpperLeftCorner
.
Y
-
padding
.
UpperLeftCorner
.
Y
,
position
.
LowerRightCorner
.
X
-
padding
.
LowerRightCorner
.
X
,
position
.
LowerRightCorner
.
Y
-
padding
.
LowerRightCorner
.
Y
);
font
->
drawUstring
(
text
,
shadowposition
,
shadowcolor
,
hcenter
,
vcenter
,
clip
);
font
->
drawUstring
(
text
,
position
,
color
,
hcenter
,
vcenter
,
clip
);
...
...
@@ -429,45 +429,45 @@ void Game::DrawMisc() {
matManager
.
mTexture
.
setTexture
(
0
,
imageManager
.
tAct
);
driver
->
setMaterial
(
matManager
.
mTexture
);
if
(
dField
.
deck_act
)
{
im
.
setTranslation
(
vector3df
((
matManager
.
vFieldDeck
[
0
][
0
].
Pos
.
X
+
matManager
.
vFieldDeck
[
0
][
1
].
Pos
.
X
)
/
2
,
im
.
setTranslation
(
irr
::
core
::
vector3df
((
matManager
.
vFieldDeck
[
0
][
0
].
Pos
.
X
+
matManager
.
vFieldDeck
[
0
][
1
].
Pos
.
X
)
/
2
,
(
matManager
.
vFieldDeck
[
0
][
0
].
Pos
.
Y
+
matManager
.
vFieldDeck
[
0
][
2
].
Pos
.
Y
)
/
2
,
dField
.
deck
[
0
].
size
()
*
0.01
f
+
0.02
f
));
driver
->
setTransform
(
irr
::
video
::
ETS_WORLD
,
im
);
driver
->
drawVertexPrimitiveList
(
matManager
.
vActivate
,
4
,
matManager
.
iRectangle
,
2
);
}
if
(
dField
.
grave_act
)
{
im
.
setTranslation
(
vector3df
((
matManager
.
vFieldGrave
[
0
][
rule
][
0
].
Pos
.
X
+
matManager
.
vFieldGrave
[
0
][
rule
][
1
].
Pos
.
X
)
/
2
,
im
.
setTranslation
(
irr
::
core
::
vector3df
((
matManager
.
vFieldGrave
[
0
][
rule
][
0
].
Pos
.
X
+
matManager
.
vFieldGrave
[
0
][
rule
][
1
].
Pos
.
X
)
/
2
,
(
matManager
.
vFieldGrave
[
0
][
rule
][
0
].
Pos
.
Y
+
matManager
.
vFieldGrave
[
0
][
rule
][
2
].
Pos
.
Y
)
/
2
,
dField
.
grave
[
0
].
size
()
*
0.01
f
+
0.02
f
));
driver
->
setTransform
(
irr
::
video
::
ETS_WORLD
,
im
);
driver
->
drawVertexPrimitiveList
(
matManager
.
vActivate
,
4
,
matManager
.
iRectangle
,
2
);
}
if
(
dField
.
remove_act
)
{
im
.
setTranslation
(
vector3df
((
matManager
.
vFieldRemove
[
0
][
rule
][
0
].
Pos
.
X
+
matManager
.
vFieldRemove
[
0
][
rule
][
1
].
Pos
.
X
)
/
2
,
im
.
setTranslation
(
irr
::
core
::
vector3df
((
matManager
.
vFieldRemove
[
0
][
rule
][
0
].
Pos
.
X
+
matManager
.
vFieldRemove
[
0
][
rule
][
1
].
Pos
.
X
)
/
2
,
(
matManager
.
vFieldRemove
[
0
][
rule
][
0
].
Pos
.
Y
+
matManager
.
vFieldRemove
[
0
][
rule
][
2
].
Pos
.
Y
)
/
2
,
dField
.
remove
[
0
].
size
()
*
0.01
f
+
0.02
f
));
driver
->
setTransform
(
irr
::
video
::
ETS_WORLD
,
im
);
driver
->
drawVertexPrimitiveList
(
matManager
.
vActivate
,
4
,
matManager
.
iRectangle
,
2
);
}
if
(
dField
.
extra_act
)
{
im
.
setTranslation
(
vector3df
((
matManager
.
vFieldExtra
[
0
][
0
].
Pos
.
X
+
matManager
.
vFieldExtra
[
0
][
1
].
Pos
.
X
)
/
2
,
im
.
setTranslation
(
irr
::
core
::
vector3df
((
matManager
.
vFieldExtra
[
0
][
0
].
Pos
.
X
+
matManager
.
vFieldExtra
[
0
][
1
].
Pos
.
X
)
/
2
,
(
matManager
.
vFieldExtra
[
0
][
0
].
Pos
.
Y
+
matManager
.
vFieldExtra
[
0
][
2
].
Pos
.
Y
)
/
2
,
dField
.
extra
[
0
].
size
()
*
0.01
f
+
0.02
f
));
driver
->
setTransform
(
irr
::
video
::
ETS_WORLD
,
im
);
driver
->
drawVertexPrimitiveList
(
matManager
.
vActivate
,
4
,
matManager
.
iRectangle
,
2
);
}
if
(
dField
.
pzone_act
[
0
])
{
int
seq
=
dInfo
.
duel_rule
>=
4
?
0
:
6
;
im
.
setTranslation
(
vector3df
((
matManager
.
vFieldSzone
[
0
][
seq
][
rule
][
0
].
Pos
.
X
+
matManager
.
vFieldSzone
[
0
][
seq
][
rule
][
1
].
Pos
.
X
)
/
2
,
im
.
setTranslation
(
irr
::
core
::
vector3df
((
matManager
.
vFieldSzone
[
0
][
seq
][
rule
][
0
].
Pos
.
X
+
matManager
.
vFieldSzone
[
0
][
seq
][
rule
][
1
].
Pos
.
X
)
/
2
,
(
matManager
.
vFieldSzone
[
0
][
seq
][
rule
][
0
].
Pos
.
Y
+
matManager
.
vFieldSzone
[
0
][
seq
][
rule
][
2
].
Pos
.
Y
)
/
2
,
0.03
f
));
driver
->
setTransform
(
irr
::
video
::
ETS_WORLD
,
im
);
driver
->
drawVertexPrimitiveList
(
matManager
.
vActivate
,
4
,
matManager
.
iRectangle
,
2
);
}
if
(
dField
.
pzone_act
[
1
])
{
int
seq
=
dInfo
.
duel_rule
>=
4
?
0
:
6
;
im
.
setTranslation
(
vector3df
((
matManager
.
vFieldSzone
[
1
][
seq
][
rule
][
0
].
Pos
.
X
+
matManager
.
vFieldSzone
[
1
][
seq
][
rule
][
1
].
Pos
.
X
)
/
2
,
im
.
setTranslation
(
irr
::
core
::
vector3df
((
matManager
.
vFieldSzone
[
1
][
seq
][
rule
][
0
].
Pos
.
X
+
matManager
.
vFieldSzone
[
1
][
seq
][
rule
][
1
].
Pos
.
X
)
/
2
,
(
matManager
.
vFieldSzone
[
1
][
seq
][
rule
][
0
].
Pos
.
Y
+
matManager
.
vFieldSzone
[
1
][
seq
][
rule
][
2
].
Pos
.
Y
)
/
2
,
0.03
f
));
driver
->
setTransform
(
irr
::
video
::
ETS_WORLD
,
im
);
driver
->
drawVertexPrimitiveList
(
matManager
.
vActivate
,
4
,
matManager
.
iRectangle
,
2
);
}
if
(
dField
.
conti_act
)
{
irr
::
core
::
vector3df
pos
=
vector3df
((
matManager
.
vFieldContiAct
[
0
].
X
+
matManager
.
vFieldContiAct
[
1
].
X
)
/
2
,
irr
::
core
::
vector3df
pos
=
irr
::
core
::
vector3df
((
matManager
.
vFieldContiAct
[
0
].
X
+
matManager
.
vFieldContiAct
[
1
].
X
)
/
2
,
(
matManager
.
vFieldContiAct
[
0
].
Y
+
matManager
.
vFieldContiAct
[
2
].
Y
)
/
2
,
0
);
im
.
setRotationRadians
(
irr
::
core
::
vector3df
(
0
,
0
,
0
));
for
(
auto
cit
=
dField
.
conti_cards
.
begin
();
cit
!=
dField
.
conti_cards
.
end
();
++
cit
)
{
...
...
@@ -498,10 +498,10 @@ void Game::DrawMisc() {
it
.
setScale
(
0.6
f
);
it
.
setTranslation
(
dField
.
chains
[
i
].
chain_pos
);
matManager
.
mTRTexture
.
setTexture
(
0
,
imageManager
.
tNumber
);
matManager
.
vChainNum
[
0
].
TCoords
=
vector2df
(
0.19375
f
*
(
i
%
5
),
0.2421875
f
*
(
i
/
5
));
matManager
.
vChainNum
[
1
].
TCoords
=
vector2df
(
0.19375
f
*
(
i
%
5
+
1
),
0.2421875
f
*
(
i
/
5
));
matManager
.
vChainNum
[
2
].
TCoords
=
vector2df
(
0.19375
f
*
(
i
%
5
),
0.2421875
f
*
(
i
/
5
+
1
));
matManager
.
vChainNum
[
3
].
TCoords
=
vector2df
(
0.19375
f
*
(
i
%
5
+
1
),
0.2421875
f
*
(
i
/
5
+
1
));
matManager
.
vChainNum
[
0
].
TCoords
=
irr
::
core
::
vector2df
(
0.19375
f
*
(
i
%
5
),
0.2421875
f
*
(
i
/
5
));
matManager
.
vChainNum
[
1
].
TCoords
=
irr
::
core
::
vector2df
(
0.19375
f
*
(
i
%
5
+
1
),
0.2421875
f
*
(
i
/
5
));
matManager
.
vChainNum
[
2
].
TCoords
=
irr
::
core
::
vector2df
(
0.19375
f
*
(
i
%
5
),
0.2421875
f
*
(
i
/
5
+
1
));
matManager
.
vChainNum
[
3
].
TCoords
=
irr
::
core
::
vector2df
(
0.19375
f
*
(
i
%
5
+
1
),
0.2421875
f
*
(
i
/
5
+
1
));
driver
->
setMaterial
(
matManager
.
mTRTexture
);
driver
->
setTransform
(
irr
::
video
::
ETS_WORLD
,
it
);
driver
->
drawVertexPrimitiveList
(
matManager
.
vChainNum
,
4
,
matManager
.
iRectangle
,
2
);
...
...
@@ -510,11 +510,11 @@ void Game::DrawMisc() {
if
(
dField
.
cant_check_grave
)
{
matManager
.
mTexture
.
setTexture
(
0
,
imageManager
.
tNegated
);
driver
->
setMaterial
(
matManager
.
mTexture
);
ig
.
setTranslation
(
vector3df
((
matManager
.
vFieldGrave
[
0
][
rule
][
0
].
Pos
.
X
+
matManager
.
vFieldGrave
[
0
][
rule
][
1
].
Pos
.
X
)
/
2
,
ig
.
setTranslation
(
irr
::
core
::
vector3df
((
matManager
.
vFieldGrave
[
0
][
rule
][
0
].
Pos
.
X
+
matManager
.
vFieldGrave
[
0
][
rule
][
1
].
Pos
.
X
)
/
2
,
(
matManager
.
vFieldGrave
[
0
][
rule
][
0
].
Pos
.
Y
+
matManager
.
vFieldGrave
[
0
][
rule
][
2
].
Pos
.
Y
)
/
2
,
dField
.
grave
[
0
].
size
()
*
0.01
f
+
0.02
f
));
driver
->
setTransform
(
irr
::
video
::
ETS_WORLD
,
ig
);
driver
->
drawVertexPrimitiveList
(
matManager
.
vNegate
,
4
,
matManager
.
iRectangle
,
2
);
ig
.
setTranslation
(
vector3df
((
matManager
.
vFieldGrave
[
1
][
rule
][
0
].
Pos
.
X
+
matManager
.
vFieldGrave
[
1
][
rule
][
1
].
Pos
.
X
)
/
2
,
ig
.
setTranslation
(
irr
::
core
::
vector3df
((
matManager
.
vFieldGrave
[
1
][
rule
][
0
].
Pos
.
X
+
matManager
.
vFieldGrave
[
1
][
rule
][
1
].
Pos
.
X
)
/
2
,
(
matManager
.
vFieldGrave
[
1
][
rule
][
0
].
Pos
.
Y
+
matManager
.
vFieldGrave
[
1
][
rule
][
2
].
Pos
.
Y
)
/
2
,
dField
.
grave
[
1
].
size
()
*
0.01
f
+
0.02
f
));
driver
->
setTransform
(
irr
::
video
::
ETS_WORLD
,
ig
);
driver
->
drawVertexPrimitiveList
(
matManager
.
vNegate
,
4
,
matManager
.
iRectangle
,
2
);
...
...
@@ -532,8 +532,8 @@ void Game::DrawMisc() {
driver
->
draw2DRectangle
(
0xa0000000
,
Resize
(
689
,
8
,
991
,
51
));
driver
->
draw2DRectangleOutline
(
Resize
(
689
,
8
,
991
,
51
),
0xffff8080
);
}
driver
->
draw2DImage
(
imageManager
.
tLPFrame
,
Resize
(
330
,
10
,
629
,
30
),
recti
(
0
,
0
,
200
,
20
),
0
,
0
,
true
);
driver
->
draw2DImage
(
imageManager
.
tLPFrame
,
Resize
(
691
,
10
,
990
,
30
),
recti
(
0
,
0
,
200
,
20
),
0
,
0
,
true
);
driver
->
draw2DImage
(
imageManager
.
tLPFrame
,
Resize
(
330
,
10
,
629
,
30
),
irr
::
core
::
recti
(
0
,
0
,
200
,
20
),
0
,
0
,
true
);
driver
->
draw2DImage
(
imageManager
.
tLPFrame
,
Resize
(
691
,
10
,
990
,
30
),
irr
::
core
::
recti
(
0
,
0
,
200
,
20
),
0
,
0
,
true
);
if
(
dInfo
.
start_lp
)
{
auto
maxLP
=
dInfo
.
isTag
?
dInfo
.
start_lp
/
2
:
dInfo
.
start_lp
;
if
(
dInfo
.
lp
[
0
]
>=
maxLP
)
{
...
...
@@ -541,23 +541,23 @@ void Game::DrawMisc() {
auto
partialLP
=
dInfo
.
lp
[
0
]
%
maxLP
;
auto
bgColorPos
=
(
layerCount
-
1
)
%
5
;
auto
fgColorPos
=
layerCount
%
5
;
driver
->
draw2DImage
(
imageManager
.
tLPBar
,
Resize
(
335
+
290
*
partialLP
/
maxLP
,
12
,
625
,
28
),
recti
(
0
,
bgColorPos
*
16
,
16
,
(
bgColorPos
+
1
)
*
16
),
0
,
0
,
true
);
driver
->
draw2DImage
(
imageManager
.
tLPBar
,
Resize
(
335
+
290
*
partialLP
/
maxLP
,
12
,
625
,
28
),
irr
::
core
::
recti
(
0
,
bgColorPos
*
16
,
16
,
(
bgColorPos
+
1
)
*
16
),
0
,
0
,
true
);
if
(
partialLP
>
0
)
{
driver
->
draw2DImage
(
imageManager
.
tLPBar
,
Resize
(
335
,
12
,
335
+
290
*
partialLP
/
maxLP
,
28
),
recti
(
0
,
fgColorPos
*
16
,
16
,
(
fgColorPos
+
1
)
*
16
),
0
,
0
,
true
);
driver
->
draw2DImage
(
imageManager
.
tLPBar
,
Resize
(
335
,
12
,
335
+
290
*
partialLP
/
maxLP
,
28
),
irr
::
core
::
recti
(
0
,
fgColorPos
*
16
,
16
,
(
fgColorPos
+
1
)
*
16
),
0
,
0
,
true
);
}
}
else
driver
->
draw2DImage
(
imageManager
.
tLPBar
,
Resize
(
335
,
12
,
335
+
290
*
dInfo
.
lp
[
0
]
/
maxLP
,
28
),
recti
(
0
,
0
,
16
,
16
),
0
,
0
,
true
);
else
driver
->
draw2DImage
(
imageManager
.
tLPBar
,
Resize
(
335
,
12
,
335
+
290
*
dInfo
.
lp
[
0
]
/
maxLP
,
28
),
irr
::
core
::
recti
(
0
,
0
,
16
,
16
),
0
,
0
,
true
);
if
(
dInfo
.
lp
[
1
]
>=
maxLP
)
{
auto
layerCount
=
dInfo
.
lp
[
1
]
/
maxLP
;
auto
partialLP
=
dInfo
.
lp
[
1
]
%
maxLP
;
auto
bgColorPos
=
(
layerCount
-
1
)
%
5
;
auto
fgColorPos
=
layerCount
%
5
;
driver
->
draw2DImage
(
imageManager
.
tLPBar
,
Resize
(
696
,
12
,
986
-
290
*
partialLP
/
maxLP
,
28
),
recti
(
0
,
bgColorPos
*
16
,
16
,
(
bgColorPos
+
1
)
*
16
),
0
,
0
,
true
);
driver
->
draw2DImage
(
imageManager
.
tLPBar
,
Resize
(
696
,
12
,
986
-
290
*
partialLP
/
maxLP
,
28
),
irr
::
core
::
recti
(
0
,
bgColorPos
*
16
,
16
,
(
bgColorPos
+
1
)
*
16
),
0
,
0
,
true
);
if
(
partialLP
>
0
)
{
driver
->
draw2DImage
(
imageManager
.
tLPBar
,
Resize
(
986
-
290
*
partialLP
/
maxLP
,
12
,
986
,
28
),
recti
(
0
,
fgColorPos
*
16
,
16
,
(
fgColorPos
+
1
)
*
16
),
0
,
0
,
true
);
driver
->
draw2DImage
(
imageManager
.
tLPBar
,
Resize
(
986
-
290
*
partialLP
/
maxLP
,
12
,
986
,
28
),
irr
::
core
::
recti
(
0
,
fgColorPos
*
16
,
16
,
(
fgColorPos
+
1
)
*
16
),
0
,
0
,
true
);
}
}
else
driver
->
draw2DImage
(
imageManager
.
tLPBar
,
Resize
(
986
-
290
*
dInfo
.
lp
[
1
]
/
maxLP
,
12
,
986
,
28
),
recti
(
0
,
0
,
16
,
16
),
0
,
0
,
true
);
else
driver
->
draw2DImage
(
imageManager
.
tLPBar
,
Resize
(
986
-
290
*
dInfo
.
lp
[
1
]
/
maxLP
,
12
,
986
,
28
),
irr
::
core
::
recti
(
0
,
0
,
16
,
16
),
0
,
0
,
true
);
}
if
(
lpframe
)
{
dInfo
.
lp
[
lpplayer
]
-=
lpd
;
...
...
@@ -582,8 +582,8 @@ void Game::DrawMisc() {
DrawShadowText
(
numFont
,
dInfo
.
strLP
[
1
],
Resize
(
691
,
12
,
992
,
30
),
Resize
(
0
,
1
,
2
,
0
),
0xffffff00
,
0xff000000
,
true
,
false
,
0
);
if
(
!
gameConf
.
hide_player_name
)
{
recti
p1size
=
Resize
(
335
,
31
,
629
,
50
);
recti
p2size
=
Resize
(
986
,
31
,
986
,
50
);
irr
::
core
::
recti
p1size
=
Resize
(
335
,
31
,
629
,
50
);
irr
::
core
::
recti
p2size
=
Resize
(
986
,
31
,
986
,
50
);
if
(
!
dInfo
.
isTag
||
!
dInfo
.
tag_player
[
0
])
textFont
->
drawUstring
(
dInfo
.
hostname
,
p1size
,
0xffffffff
,
false
,
false
,
0
);
else
...
...
@@ -808,14 +808,14 @@ void Game::DrawGUI() {
env
->
drawAll
();
}
void
Game
::
DrawSpec
()
{
s32
midx
=
574
+
(
CARD_IMG_WIDTH
*
0.5
);
s32
midy
=
150
+
(
CARD_IMG_HEIGHT
*
0.5
);
irr
::
s32
midx
=
574
+
(
CARD_IMG_WIDTH
*
0.5
);
irr
::
s32
midy
=
150
+
(
CARD_IMG_HEIGHT
*
0.5
);
if
(
showcard
)
{
switch
(
showcard
)
{
case
1
:
{
driver
->
draw2DImage
(
imageManager
.
GetTexture
(
showcardcode
,
true
),
ResizeCardHint
(
574
,
150
));
driver
->
draw2DImage
(
imageManager
.
tMask
,
ResizeCardMid
(
574
,
150
,
574
+
(
showcarddif
>
CARD_IMG_WIDTH
?
CARD_IMG_WIDTH
:
showcarddif
),
150
+
CARD_IMG_HEIGHT
,
midx
,
midy
),
recti
(
CARD_IMG_HEIGHT
-
showcarddif
,
0
,
CARD_IMG_HEIGHT
-
(
showcarddif
>
CARD_IMG_WIDTH
?
showcarddif
-
CARD_IMG_WIDTH
:
0
),
CARD_IMG_HEIGHT
),
0
,
0
,
true
);
irr
::
core
::
recti
(
CARD_IMG_HEIGHT
-
showcarddif
,
0
,
CARD_IMG_HEIGHT
-
(
showcarddif
>
CARD_IMG_WIDTH
?
showcarddif
-
CARD_IMG_WIDTH
:
0
),
CARD_IMG_HEIGHT
),
0
,
0
,
true
);
showcarddif
+=
15
;
if
(
showcarddif
>=
CARD_IMG_HEIGHT
)
{
showcard
=
2
;
...
...
@@ -826,7 +826,7 @@ void Game::DrawSpec() {
case
2
:
{
driver
->
draw2DImage
(
imageManager
.
GetTexture
(
showcardcode
,
true
),
ResizeCardHint
(
574
,
150
));
driver
->
draw2DImage
(
imageManager
.
tMask
,
ResizeCardMid
(
574
+
showcarddif
,
150
,
574
+
CARD_IMG_WIDTH
,
150
+
CARD_IMG_HEIGHT
,
midx
,
midy
),
recti
(
0
,
0
,
CARD_IMG_WIDTH
-
showcarddif
,
CARD_IMG_HEIGHT
),
0
,
0
,
true
);
irr
::
core
::
recti
(
0
,
0
,
CARD_IMG_WIDTH
-
showcarddif
,
CARD_IMG_HEIGHT
),
0
,
0
,
true
);
showcarddif
+=
15
;
if
(
showcarddif
>=
CARD_IMG_WIDTH
)
{
showcard
=
0
;
...
...
@@ -835,7 +835,7 @@ void Game::DrawSpec() {
}
case
3
:
{
driver
->
draw2DImage
(
imageManager
.
GetTexture
(
showcardcode
,
true
),
ResizeCardHint
(
574
,
150
));
driver
->
draw2DImage
(
imageManager
.
tNegated
,
ResizeCardMid
(
536
+
showcarddif
,
141
+
showcarddif
,
792
-
showcarddif
,
397
-
showcarddif
,
midx
,
midy
),
recti
(
0
,
0
,
128
,
128
),
0
,
0
,
true
);
driver
->
draw2DImage
(
imageManager
.
tNegated
,
ResizeCardMid
(
536
+
showcarddif
,
141
+
showcarddif
,
792
-
showcarddif
,
397
-
showcarddif
,
midx
,
midy
),
irr
::
core
::
recti
(
0
,
0
,
128
,
128
),
0
,
0
,
true
);
if
(
showcarddif
<
64
)
showcarddif
+=
4
;
break
;
...
...
@@ -865,7 +865,7 @@ void Game::DrawSpec() {
case
6
:
{
driver
->
draw2DImage
(
imageManager
.
GetTexture
(
showcardcode
,
true
),
ResizeCardHint
(
574
,
150
));
driver
->
draw2DImage
(
imageManager
.
tNumber
,
ResizeCardMid
(
536
+
showcarddif
,
141
+
showcarddif
,
792
-
showcarddif
,
397
-
showcarddif
,
midx
,
midy
),
recti
((
showcardp
%
5
)
*
64
,
(
showcardp
/
5
)
*
64
,
(
showcardp
%
5
+
1
)
*
64
,
(
showcardp
/
5
+
1
)
*
64
),
0
,
0
,
true
);
irr
::
core
::
recti
((
showcardp
%
5
)
*
64
,
(
showcardp
/
5
)
*
64
,
(
showcardp
%
5
+
1
)
*
64
,
(
showcardp
/
5
+
1
)
*
64
),
0
,
0
,
true
);
if
(
showcarddif
<
64
)
showcarddif
+=
4
;
break
;
...
...
@@ -874,15 +874,15 @@ void Game::DrawSpec() {
float
mul
=
xScale
;
if
(
xScale
>
yScale
)
mul
=
yScale
;
core
::
position2d
<
s32
>
corner
[
4
];
irr
::
core
::
vector2d
<
irr
::
s32
>
corner
[
4
];
float
y
=
sin
(
showcarddif
*
3.1415926
f
/
180.0
f
)
*
CARD_IMG_HEIGHT
*
mul
;
s32
winx
=
midx
*
xScale
+
(
574
-
midx
)
*
mul
;
s32
winx2
=
midx
*
xScale
+
(
751
-
midx
)
*
mul
;
s32
winy
=
midy
*
yScale
+
(
404
-
midy
)
*
mul
;
corner
[
0
]
=
core
::
position2d
<
s32
>
(
winx
-
(
CARD_IMG_HEIGHT
*
mul
-
y
)
*
0.3
f
,
winy
-
y
);
corner
[
1
]
=
core
::
position2d
<
s32
>
(
winx2
+
(
CARD_IMG_HEIGHT
*
mul
-
y
)
*
0.3
f
,
winy
-
y
);
corner
[
2
]
=
core
::
position2d
<
s32
>
(
winx
,
winy
);
corner
[
3
]
=
core
::
position2d
<
s32
>
(
winx2
,
winy
);
irr
::
s32
winx
=
midx
*
xScale
+
(
574
-
midx
)
*
mul
;
irr
::
s32
winx2
=
midx
*
xScale
+
(
751
-
midx
)
*
mul
;
irr
::
s32
winy
=
midy
*
yScale
+
(
404
-
midy
)
*
mul
;
corner
[
0
]
=
irr
::
core
::
vector2d
<
irr
::
s32
>
(
winx
-
(
CARD_IMG_HEIGHT
*
mul
-
y
)
*
0.3
f
,
winy
-
y
);
corner
[
1
]
=
irr
::
core
::
vector2d
<
irr
::
s32
>
(
winx2
+
(
CARD_IMG_HEIGHT
*
mul
-
y
)
*
0.3
f
,
winy
-
y
);
corner
[
2
]
=
irr
::
core
::
vector2d
<
irr
::
s32
>
(
winx
,
winy
);
corner
[
3
]
=
irr
::
core
::
vector2d
<
irr
::
s32
>
(
winx2
,
winy
);
irr
::
gui
::
Draw2DImageQuad
(
driver
,
imageManager
.
GetTexture
(
showcardcode
,
true
),
ResizeFit
(
0
,
0
,
CARD_IMG_WIDTH
,
CARD_IMG_HEIGHT
),
corner
);
showcardp
++
;
showcarddif
+=
9
;
...
...
@@ -896,8 +896,8 @@ void Game::DrawSpec() {
}
case
100
:
{
if
(
showcardp
<
60
)
{
driver
->
draw2DImage
(
imageManager
.
tHand
[(
showcardcode
>>
16
)
&
0x3
],
position
2di
((
615
+
44.5
)
*
xScale
-
44.5
,
(
showcarddif
+
64
)
*
yScale
-
64
));
driver
->
draw2DImage
(
imageManager
.
tHand
[
showcardcode
&
0x3
],
position
2di
((
615
+
44.5
)
*
xScale
-
44.5
,
(
540
-
showcarddif
+
64
)
*
yScale
-
64
));
driver
->
draw2DImage
(
imageManager
.
tHand
[(
showcardcode
>>
16
)
&
0x3
],
irr
::
core
::
vector
2di
((
615
+
44.5
)
*
xScale
-
44.5
,
(
showcarddif
+
64
)
*
yScale
-
64
));
driver
->
draw2DImage
(
imageManager
.
tHand
[
showcardcode
&
0x3
],
irr
::
core
::
vector
2di
((
615
+
44.5
)
*
xScale
-
44.5
,
(
540
-
showcarddif
+
64
)
*
yScale
-
64
));
float
dy
=
-
0.333333
f
*
showcardp
+
10
;
showcardp
++
;
if
(
showcardp
<
30
)
...
...
@@ -980,7 +980,7 @@ void Game::DrawSpec() {
matk
.
setRotationRadians
(
atk_r
);
driver
->
setTransform
(
irr
::
video
::
ETS_WORLD
,
matk
);
driver
->
setMaterial
(
matManager
.
mATK
);
driver
->
drawVertexPrimitiveList
(
&
matManager
.
vArrow
[
attack_sv
],
12
,
matManager
.
iArrow
,
10
,
EVT_STANDARD
,
EPT_TRIANGLE_STRIP
);
driver
->
drawVertexPrimitiveList
(
&
matManager
.
vArrow
[
attack_sv
],
12
,
matManager
.
iArrow
,
10
,
irr
::
video
::
EVT_STANDARD
,
irr
::
scene
::
EPT_TRIANGLE_STRIP
);
attack_sv
+=
4
;
if
(
attack_sv
>
28
)
attack_sv
=
0
;
...
...
@@ -1018,9 +1018,9 @@ void Game::DrawSpec() {
int
w
=
guiFont
->
getDimension
(
msg
).
Width
;
int
h
=
guiFont
->
getDimension
(
msg
).
Height
+
2
;
recti
rectloc
(
x
,
y
-
chatRectY
-
h
,
x
+
2
+
w
,
y
-
chatRectY
);
recti
msgloc
(
x
,
y
-
chatRectY
-
h
,
x
-
4
,
y
-
chatRectY
);
recti
shadowloc
=
msgloc
+
position
2di
(
1
,
1
);
irr
::
core
::
recti
rectloc
(
x
,
y
-
chatRectY
-
h
,
x
+
2
+
w
,
y
-
chatRectY
);
irr
::
core
::
recti
msgloc
(
x
,
y
-
chatRectY
-
h
,
x
-
4
,
y
-
chatRectY
);
irr
::
core
::
recti
shadowloc
=
msgloc
+
irr
::
core
::
vector
2di
(
1
,
1
);
driver
->
draw2DRectangle
(
rectloc
,
0xa0000000
,
0xa0000000
,
0xa0000000
,
0xa0000000
);
guiFont
->
drawUstring
(
msg
,
msgloc
,
0xff000000
,
false
,
false
);
...
...
@@ -1033,7 +1033,7 @@ void Game::DrawSpec() {
void
Game
::
DrawBackImage
(
irr
::
video
::
ITexture
*
texture
)
{
if
(
!
texture
)
return
;
driver
->
draw2DImage
(
texture
,
Resize
(
0
,
0
,
1024
,
640
),
recti
(
0
,
0
,
texture
->
getOriginalSize
().
Width
,
texture
->
getOriginalSize
().
Height
));
driver
->
draw2DImage
(
texture
,
Resize
(
0
,
0
,
1024
,
640
),
irr
::
core
::
recti
(
0
,
0
,
texture
->
getOriginalSize
().
Width
,
texture
->
getOriginalSize
().
Height
));
}
void
Game
::
ShowElement
(
irr
::
gui
::
IGUIElement
*
win
,
int
autoframe
)
{
FadingUnit
fu
;
...
...
@@ -1041,7 +1041,7 @@ void Game::ShowElement(irr::gui::IGUIElement * win, int autoframe) {
for
(
auto
fit
=
fadingList
.
begin
();
fit
!=
fadingList
.
end
();
++
fit
)
if
(
win
==
fit
->
guiFading
&&
win
!=
wOptions
&&
win
!=
wANNumber
)
// the size of wOptions is always setted by ClientField::ShowSelectOption before showing it
fu
.
fadingSize
=
fit
->
fadingSize
;
irr
::
core
::
position
2di
center
=
fu
.
fadingSize
.
getCenter
();
irr
::
core
::
vector
2di
center
=
fu
.
fadingSize
.
getCenter
();
fu
.
fadingDiff
.
X
=
fu
.
fadingSize
.
getWidth
()
/
10
;
fu
.
fadingDiff
.
Y
=
(
fu
.
fadingSize
.
getHeight
()
-
4
)
/
10
;
fu
.
fadingUL
=
center
;
...
...
@@ -1126,34 +1126,35 @@ void Game::WaitFrameSignal(int frame) {
signalFrame
=
(
gameConf
.
quick_animation
&&
frame
>=
12
)
?
12
:
frame
;
frameSignal
.
Wait
();
}
void
Game
::
DrawThumb
(
code_pointer
cp
,
position2di
pos
,
const
std
::
unordered_map
<
int
,
int
>
*
lflist
,
bool
drag
)
{
void
Game
::
DrawThumb
(
code_pointer
cp
,
irr
::
core
::
vector2di
pos
,
const
LFList
*
lflist
,
bool
drag
)
{
int
code
=
cp
->
first
;
int
lcode
=
cp
->
second
.
alias
;
auto
lcode
=
cp
->
second
.
alias
;
if
(
lcode
==
0
)
lcode
=
code
;
irr
::
video
::
ITexture
*
img
=
imageManager
.
GetTextureThumb
(
code
);
if
(
img
==
nullptr
)
return
;
//nullptr->getSize() will cause a crash
dimension2d
<
u32
>
size
=
img
->
getOriginalSize
();
recti
dragloc
=
mainGame
->
Resize
(
pos
.
X
,
pos
.
Y
,
pos
.
X
+
CARD_THUMB_WIDTH
,
pos
.
Y
+
CARD_THUMB_HEIGHT
);
recti
limitloc
=
mainGame
->
Resize
(
pos
.
X
,
pos
.
Y
,
pos
.
X
+
20
,
pos
.
Y
+
20
);
recti
otloc
=
Resize
(
pos
.
X
+
7
,
pos
.
Y
+
50
,
pos
.
X
+
37
,
pos
.
Y
+
65
);
irr
::
core
::
dimension2d
<
irr
::
u32
>
size
=
img
->
getOriginalSize
();
irr
::
core
::
recti
dragloc
=
mainGame
->
Resize
(
pos
.
X
,
pos
.
Y
,
pos
.
X
+
CARD_THUMB_WIDTH
,
pos
.
Y
+
CARD_THUMB_HEIGHT
);
irr
::
core
::
recti
limitloc
=
mainGame
->
Resize
(
pos
.
X
,
pos
.
Y
,
pos
.
X
+
20
,
pos
.
Y
+
20
);
irr
::
core
::
recti
otloc
=
Resize
(
pos
.
X
+
7
,
pos
.
Y
+
50
,
pos
.
X
+
37
,
pos
.
Y
+
65
);
if
(
drag
)
{
dragloc
=
recti
(
pos
.
X
,
pos
.
Y
,
pos
.
X
+
CARD_THUMB_WIDTH
*
mainGame
->
xScale
,
pos
.
Y
+
CARD_THUMB_HEIGHT
*
mainGame
->
yScale
);
limitloc
=
recti
(
pos
.
X
,
pos
.
Y
,
pos
.
X
+
20
*
mainGame
->
xScale
,
pos
.
Y
+
20
*
mainGame
->
yScale
);
otloc
=
recti
(
pos
.
X
+
7
,
pos
.
Y
+
50
*
mainGame
->
yScale
,
pos
.
X
+
37
*
mainGame
->
xScale
,
pos
.
Y
+
65
*
mainGame
->
yScale
);
}
driver
->
draw2DImage
(
img
,
dragloc
,
rect
<
s32
>
(
0
,
0
,
size
.
Width
,
size
.
Height
));
if
(
lflist
->
count
(
lcode
))
{
switch
((
*
lflist
).
at
(
lcode
))
{
dragloc
=
irr
::
core
::
recti
(
pos
.
X
,
pos
.
Y
,
pos
.
X
+
CARD_THUMB_WIDTH
*
mainGame
->
xScale
,
pos
.
Y
+
CARD_THUMB_HEIGHT
*
mainGame
->
yScale
);
limitloc
=
irr
::
core
::
recti
(
pos
.
X
,
pos
.
Y
,
pos
.
X
+
20
*
mainGame
->
xScale
,
pos
.
Y
+
20
*
mainGame
->
yScale
);
otloc
=
irr
::
core
::
recti
(
pos
.
X
+
7
,
pos
.
Y
+
50
*
mainGame
->
yScale
,
pos
.
X
+
37
*
mainGame
->
xScale
,
pos
.
Y
+
65
*
mainGame
->
yScale
);
}
driver
->
draw2DImage
(
img
,
dragloc
,
irr
::
core
::
rect
<
irr
::
s32
>
(
0
,
0
,
size
.
Width
,
size
.
Height
));
auto
lfit
=
lflist
->
content
.
find
(
lcode
);
if
(
lfit
!=
lflist
->
content
.
end
())
{
switch
(
lfit
->
second
)
{
case
0
:
driver
->
draw2DImage
(
imageManager
.
tLim
,
limitloc
,
recti
(
0
,
0
,
64
,
64
),
0
,
0
,
true
);
driver
->
draw2DImage
(
imageManager
.
tLim
,
limitloc
,
irr
::
core
::
recti
(
0
,
0
,
64
,
64
),
0
,
0
,
true
);
break
;
case
1
:
driver
->
draw2DImage
(
imageManager
.
tLim
,
limitloc
,
recti
(
64
,
0
,
128
,
64
),
0
,
0
,
true
);
driver
->
draw2DImage
(
imageManager
.
tLim
,
limitloc
,
irr
::
core
::
recti
(
64
,
0
,
128
,
64
),
0
,
0
,
true
);
break
;
case
2
:
driver
->
draw2DImage
(
imageManager
.
tLim
,
limitloc
,
recti
(
0
,
64
,
64
,
128
),
0
,
0
,
true
);
driver
->
draw2DImage
(
imageManager
.
tLim
,
limitloc
,
irr
::
core
::
recti
(
0
,
64
,
64
,
128
),
0
,
0
,
true
);
break
;
}
}
...
...
@@ -1173,16 +1174,16 @@ void Game::DrawThumb(code_pointer cp, position2di pos, const std::unordered_map<
}
if
(
showAvail
)
{
if
((
cp
->
second
.
ot
&
AVAIL_OCG
)
&&
!
(
cp
->
second
.
ot
&
AVAIL_TCG
))
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
recti
(
0
,
128
,
128
,
192
),
0
,
0
,
true
);
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
irr
::
core
::
recti
(
0
,
128
,
128
,
192
),
0
,
0
,
true
);
else
if
((
cp
->
second
.
ot
&
AVAIL_TCG
)
&&
!
(
cp
->
second
.
ot
&
AVAIL_OCG
))
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
recti
(
0
,
192
,
128
,
256
),
0
,
0
,
true
);
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
irr
::
core
::
recti
(
0
,
192
,
128
,
256
),
0
,
0
,
true
);
}
else
if
(
showNotAvail
)
{
if
(
cp
->
second
.
ot
&
AVAIL_OCG
)
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
recti
(
0
,
0
,
128
,
64
),
0
,
0
,
true
);
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
irr
::
core
::
recti
(
0
,
0
,
128
,
64
),
0
,
0
,
true
);
else
if
(
cp
->
second
.
ot
&
AVAIL_TCG
)
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
recti
(
0
,
64
,
128
,
128
),
0
,
0
,
true
);
driver
->
draw2DImage
(
imageManager
.
tOT
,
otloc
,
irr
::
core
::
recti
(
0
,
64
,
128
,
128
),
0
,
0
,
true
);
else
if
(
!
avail
)
driver
->
draw2DImage
(
imageManager
.
tLim
,
otloc
,
recti
(
0
,
0
,
64
,
64
),
0
,
0
,
true
);
driver
->
draw2DImage
(
imageManager
.
tLim
,
otloc
,
irr
::
core
::
recti
(
0
,
0
,
64
,
64
),
0
,
0
,
true
);
}
}
void
Game
::
DrawDeckBd
()
{
...
...
@@ -1217,7 +1218,7 @@ void Game::DrawDeckBd() {
int
padding
=
scrPackCards
->
getPos
()
*
lx
;
for
(
int
i
=
0
;
i
<
mainsize
-
padding
&&
i
<
7
*
lx
;
++
i
)
{
int
j
=
i
+
padding
;
DrawThumb
(
deckManager
.
current_deck
.
main
[
j
],
position
2di
(
314
+
(
i
%
lx
)
*
dx
,
164
+
(
i
/
lx
)
*
dy
),
deckBuilder
.
filterList
);
DrawThumb
(
deckManager
.
current_deck
.
main
[
j
],
irr
::
core
::
vector
2di
(
314
+
(
i
%
lx
)
*
dx
,
164
+
(
i
/
lx
)
*
dy
),
deckBuilder
.
filterList
);
if
(
deckBuilder
.
hovered_pos
==
1
&&
deckBuilder
.
hovered_seq
==
j
)
driver
->
draw2DRectangleOutline
(
Resize
(
313
+
(
i
%
lx
)
*
dx
,
163
+
(
i
/
lx
)
*
dy
,
359
+
(
i
%
lx
)
*
dx
,
228
+
(
i
/
lx
)
*
dy
));
}
...
...
@@ -1233,7 +1234,7 @@ void Game::DrawDeckBd() {
dx
=
436.0
f
/
9
;
else
dx
=
436.0
f
/
(
deckManager
.
current_deck
.
extra
.
size
()
-
1
);
for
(
size_t
i
=
0
;
i
<
deckManager
.
current_deck
.
extra
.
size
();
++
i
)
{
DrawThumb
(
deckManager
.
current_deck
.
extra
[
i
],
position
2di
(
314
+
i
*
dx
,
466
),
deckBuilder
.
filterList
);
DrawThumb
(
deckManager
.
current_deck
.
extra
[
i
],
irr
::
core
::
vector
2di
(
314
+
i
*
dx
,
466
),
deckBuilder
.
filterList
);
if
(
deckBuilder
.
hovered_pos
==
2
&&
deckBuilder
.
hovered_seq
==
(
int
)
i
)
driver
->
draw2DRectangleOutline
(
Resize
(
313
+
i
*
dx
,
465
,
359
+
i
*
dx
,
531
));
}
...
...
@@ -1248,7 +1249,7 @@ void Game::DrawDeckBd() {
dx
=
436.0
f
/
9
;
else
dx
=
436.0
f
/
(
deckManager
.
current_deck
.
side
.
size
()
-
1
);
for
(
size_t
i
=
0
;
i
<
deckManager
.
current_deck
.
side
.
size
();
++
i
)
{
DrawThumb
(
deckManager
.
current_deck
.
side
[
i
],
position
2di
(
314
+
i
*
dx
,
564
),
deckBuilder
.
filterList
);
DrawThumb
(
deckManager
.
current_deck
.
side
[
i
],
irr
::
core
::
vector
2di
(
314
+
i
*
dx
,
564
),
deckBuilder
.
filterList
);
if
(
deckBuilder
.
hovered_pos
==
3
&&
deckBuilder
.
hovered_seq
==
(
int
)
i
)
driver
->
draw2DRectangleOutline
(
Resize
(
313
+
i
*
dx
,
563
,
359
+
i
*
dx
,
629
));
}
...
...
@@ -1275,7 +1276,7 @@ void Game::DrawDeckBd() {
}
if
(
deckBuilder
.
hovered_pos
==
4
&&
deckBuilder
.
hovered_seq
==
(
int
)
i
)
driver
->
draw2DRectangle
(
0x80000000
,
Resize
(
806
,
164
+
i
*
66
,
1019
,
230
+
i
*
66
));
DrawThumb
(
ptr
,
position
2di
(
810
,
165
+
i
*
66
),
deckBuilder
.
filterList
);
DrawThumb
(
ptr
,
irr
::
core
::
vector
2di
(
810
,
165
+
i
*
66
),
deckBuilder
.
filterList
);
const
wchar_t
*
availBuffer
=
L""
;
if
((
ptr
->
second
.
ot
&
AVAIL_OCGTCG
)
==
AVAIL_OCG
)
availBuffer
=
L" [OCG]"
;
...
...
@@ -1325,7 +1326,7 @@ void Game::DrawDeckBd() {
}
}
if
(
deckBuilder
.
is_draging
)
{
DrawThumb
(
deckBuilder
.
draging_pointer
,
position
2di
(
deckBuilder
.
dragx
-
CARD_THUMB_WIDTH
/
2
*
mainGame
->
xScale
,
deckBuilder
.
dragy
-
CARD_THUMB_HEIGHT
/
2
*
mainGame
->
yScale
),
deckBuilder
.
filterList
,
true
);
DrawThumb
(
deckBuilder
.
draging_pointer
,
irr
::
core
::
vector
2di
(
deckBuilder
.
dragx
-
CARD_THUMB_WIDTH
/
2
*
mainGame
->
xScale
,
deckBuilder
.
dragy
-
CARD_THUMB_HEIGHT
/
2
*
mainGame
->
yScale
),
deckBuilder
.
filterList
,
true
);
}
}
}
gframe/duelclient.cpp
View file @
c7d6b2a5
...
...
@@ -500,9 +500,9 @@ void DuelClient::HandleSTOCPacketLan(unsigned char* data, int len) {
mainGame
->
dInfo
.
time_limit
=
pkt
->
info
.
time_limit
;
mainGame
->
dInfo
.
time_left
[
0
]
=
0
;
mainGame
->
dInfo
.
time_left
[
1
]
=
0
;
mainGame
->
deckBuilder
.
filterList
=
deckManager
.
GetLFList
Content
(
pkt
->
info
.
lflist
);
mainGame
->
deckBuilder
.
filterList
=
deckManager
.
GetLFList
(
pkt
->
info
.
lflist
);
if
(
mainGame
->
deckBuilder
.
filterList
==
nullptr
)
mainGame
->
deckBuilder
.
filterList
=
&
deckManager
.
_lfList
[
0
]
.
content
;
mainGame
->
deckBuilder
.
filterList
=
&
deckManager
.
_lfList
[
0
];
mainGame
->
stHostPrepOB
->
setText
(
L""
);
mainGame
->
SetStaticText
(
mainGame
->
stHostPrepRule
,
180
,
mainGame
->
guiFont
,
str
.
c_str
());
mainGame
->
RefreshCategoryDeck
(
mainGame
->
cbCategorySelect
,
mainGame
->
cbDeckSelect
);
...
...
@@ -1900,23 +1900,23 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
else
startpos
=
155
;
if
(
positions
&
0x1
)
{
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnPSAU
,
code
));
mainGame
->
btnPSAU
->
setRelativePosition
(
rect
<
s32
>
(
startpos
,
45
,
startpos
+
140
,
185
));
mainGame
->
btnPSAU
->
setRelativePosition
(
irr
::
core
::
rect
<
irr
::
s32
>
(
startpos
,
45
,
startpos
+
140
,
185
));
mainGame
->
btnPSAU
->
setVisible
(
true
);
startpos
+=
145
;
}
else
mainGame
->
btnPSAU
->
setVisible
(
false
);
if
(
positions
&
0x2
)
{
mainGame
->
btnPSAD
->
setRelativePosition
(
rect
<
s32
>
(
startpos
,
45
,
startpos
+
140
,
185
));
mainGame
->
btnPSAD
->
setRelativePosition
(
irr
::
core
::
rect
<
irr
::
s32
>
(
startpos
,
45
,
startpos
+
140
,
185
));
mainGame
->
btnPSAD
->
setVisible
(
true
);
startpos
+=
145
;
}
else
mainGame
->
btnPSAD
->
setVisible
(
false
);
if
(
positions
&
0x4
)
{
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnPSDU
,
code
));
mainGame
->
btnPSDU
->
setRelativePosition
(
rect
<
s32
>
(
startpos
,
45
,
startpos
+
140
,
185
));
mainGame
->
btnPSDU
->
setRelativePosition
(
irr
::
core
::
rect
<
irr
::
s32
>
(
startpos
,
45
,
startpos
+
140
,
185
));
mainGame
->
btnPSDU
->
setVisible
(
true
);
startpos
+=
145
;
}
else
mainGame
->
btnPSDU
->
setVisible
(
false
);
if
(
positions
&
0x8
)
{
mainGame
->
btnPSDD
->
setRelativePosition
(
rect
<
s32
>
(
startpos
,
45
,
startpos
+
140
,
185
));
mainGame
->
btnPSDD
->
setRelativePosition
(
irr
::
core
::
rect
<
irr
::
s32
>
(
startpos
,
45
,
startpos
+
140
,
185
));
mainGame
->
btnPSDD
->
setVisible
(
true
);
startpos
+=
145
;
}
else
mainGame
->
btnPSDD
->
setVisible
(
false
);
...
...
@@ -3428,11 +3428,11 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
float
xd
=
mainGame
->
dField
.
attack_target
->
curPos
.
X
;
float
yd
=
mainGame
->
dField
.
attack_target
->
curPos
.
Y
;
sy
=
(
float
)
sqrt
((
xa
-
xd
)
*
(
xa
-
xd
)
+
(
ya
-
yd
)
*
(
ya
-
yd
))
/
2
;
mainGame
->
atk_t
=
vector3df
((
xa
+
xd
)
/
2
,
(
ya
+
yd
)
/
2
,
0
);
mainGame
->
atk_t
=
irr
::
core
::
vector3df
((
xa
+
xd
)
/
2
,
(
ya
+
yd
)
/
2
,
0
);
if
(
ca
==
0
)
mainGame
->
atk_r
=
vector3df
(
0
,
0
,
-
atan
((
xd
-
xa
)
/
(
yd
-
ya
)));
mainGame
->
atk_r
=
irr
::
core
::
vector3df
(
0
,
0
,
-
atan
((
xd
-
xa
)
/
(
yd
-
ya
)));
else
mainGame
->
atk_r
=
vector3df
(
0
,
0
,
3.1415926
-
atan
((
xd
-
xa
)
/
(
yd
-
ya
)));
mainGame
->
atk_r
=
irr
::
core
::
vector3df
(
0
,
0
,
3.1415926
-
atan
((
xd
-
xa
)
/
(
yd
-
ya
)));
}
else
{
soundManager
.
PlaySoundEffect
(
SOUND_DIRECT_ATTACK
);
myswprintf
(
event_string
,
dataManager
.
GetSysString
(
1620
),
dataManager
.
GetName
(
mainGame
->
dField
.
attacker
->
code
));
...
...
@@ -3443,11 +3443,11 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
if
(
ca
==
0
)
yd
=
-
3.5
f
;
sy
=
(
float
)
sqrt
((
xa
-
xd
)
*
(
xa
-
xd
)
+
(
ya
-
yd
)
*
(
ya
-
yd
))
/
2
;
mainGame
->
atk_t
=
vector3df
((
xa
+
xd
)
/
2
,
(
ya
+
yd
)
/
2
,
0
);
mainGame
->
atk_t
=
irr
::
core
::
vector3df
((
xa
+
xd
)
/
2
,
(
ya
+
yd
)
/
2
,
0
);
if
(
ca
==
0
)
mainGame
->
atk_r
=
vector3df
(
0
,
0
,
-
atan
((
xd
-
xa
)
/
(
yd
-
ya
)));
mainGame
->
atk_r
=
irr
::
core
::
vector3df
(
0
,
0
,
-
atan
((
xd
-
xa
)
/
(
yd
-
ya
)));
else
mainGame
->
atk_r
=
vector3df
(
0
,
0
,
3.1415926
-
atan
((
xd
-
xa
)
/
(
yd
-
ya
)));
mainGame
->
atk_r
=
irr
::
core
::
vector3df
(
0
,
0
,
3.1415926
-
atan
((
xd
-
xa
)
/
(
yd
-
ya
)));
}
matManager
.
GenArrow
(
sy
);
mainGame
->
attack_sv
=
0
;
...
...
@@ -3672,9 +3672,9 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
mainGame
->
cbANNumber
->
setSelected
(
0
);
if
(
quickmode
)
{
mainGame
->
cbANNumber
->
setVisible
(
false
);
mainGame
->
btnANNumberOK
->
setRelativePosition
(
rect
<
s32
>
(
20
,
195
,
210
,
230
));
mainGame
->
btnANNumberOK
->
setRelativePosition
(
irr
::
core
::
rect
<
irr
::
s32
>
(
20
,
195
,
210
,
230
));
mainGame
->
btnANNumberOK
->
setEnabled
(
false
);
recti
pos
=
mainGame
->
wANNumber
->
getRelativePosition
();
irr
::
core
::
recti
pos
=
mainGame
->
wANNumber
->
getRelativePosition
();
pos
.
LowerRightCorner
.
Y
=
pos
.
UpperLeftCorner
.
Y
+
250
;
mainGame
->
wANNumber
->
setRelativePosition
(
pos
);
}
else
{
...
...
@@ -3682,8 +3682,8 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
mainGame
->
btnANNumber
[
i
]
->
setVisible
(
false
);
}
mainGame
->
cbANNumber
->
setVisible
(
true
);
mainGame
->
btnANNumberOK
->
setRelativePosition
(
rect
<
s32
>
(
80
,
60
,
150
,
85
));
recti
pos
=
mainGame
->
wANNumber
->
getRelativePosition
();
mainGame
->
btnANNumberOK
->
setRelativePosition
(
irr
::
core
::
rect
<
irr
::
s32
>
(
80
,
60
,
150
,
85
));
irr
::
core
::
recti
pos
=
mainGame
->
wANNumber
->
getRelativePosition
();
pos
.
LowerRightCorner
.
Y
=
pos
.
UpperLeftCorner
.
Y
+
95
;
mainGame
->
wANNumber
->
setRelativePosition
(
pos
);
}
...
...
gframe/duelclient.h
View file @
c7d6b2a5
...
...
@@ -53,7 +53,7 @@ public:
bufferevent_write
(
client_bev
,
duel_client_write
,
3
);
}
template
<
typename
ST
>
static
void
SendPacketToServer
(
unsigned
char
proto
,
ST
&
st
)
{
static
void
SendPacketToServer
(
unsigned
char
proto
,
const
ST
&
st
)
{
auto
p
=
duel_client_write
;
if
(
sizeof
(
ST
)
>
MAX_DATA_SIZE
)
return
;
...
...
gframe/event_handler.cpp
View file @
c7d6b2a5
...
...
@@ -22,7 +22,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case
irr
:
:
EET_GUI_EVENT
:
{
if
(
mainGame
->
fadingList
.
size
())
break
;
s32
id
=
event
.
GUIEvent
.
Caller
->
getID
();
irr
::
s32
id
=
event
.
GUIEvent
.
Caller
->
getID
();
switch
(
event
.
GUIEvent
.
EventType
)
{
case
irr
:
:
gui
::
EGET_BUTTON_CLICKED
:
{
switch
(
id
)
{
...
...
@@ -898,7 +898,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
mainGame
->
btnCardSelect
[
i
]
->
setImage
(
imageManager
.
GetTexture
(
selectable_cards
[
i
+
pos
]
->
chain_code
));
else
mainGame
->
btnCardSelect
[
i
]
->
setImage
(
imageManager
.
tCover
[
selectable_cards
[
i
+
pos
]
->
controler
+
2
]);
mainGame
->
btnCardSelect
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
30
+
i
*
125
,
55
,
30
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardSelect
[
i
]
->
setRelativePosition
(
irr
::
core
::
rect
<
irr
::
s32
>
(
30
+
i
*
125
,
55
,
30
+
120
+
i
*
125
,
225
));
// text
wchar_t
formatBuffer
[
2048
];
if
(
mainGame
->
dInfo
.
curMsg
==
MSG_SORT_CARD
)
{
...
...
@@ -961,7 +961,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
mainGame
->
btnCardDisplay
[
i
]
->
setImage
(
imageManager
.
GetTexture
(
display_cards
[
i
+
pos
]
->
code
));
else
mainGame
->
btnCardDisplay
[
i
]
->
setImage
(
imageManager
.
tCover
[
display_cards
[
i
+
pos
]
->
controler
+
2
]);
mainGame
->
btnCardDisplay
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
30
+
i
*
125
,
55
,
30
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardDisplay
[
i
]
->
setRelativePosition
(
irr
::
core
::
rect
<
irr
::
s32
>
(
30
+
i
*
125
,
55
,
30
+
120
+
i
*
125
,
225
));
wchar_t
formatBuffer
[
2048
];
if
(
display_cards
[
i
+
pos
]
->
location
==
LOCATION_OVERLAY
)
{
myswprintf
(
formatBuffer
,
L"%ls[%d](%d)"
,
...
...
@@ -1073,10 +1073,10 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
if
(
!
mainGame
->
dInfo
.
isStarted
)
break
;
hovered_location
=
0
;
position
2di
pos
=
mainGame
->
ResizeReverse
(
event
.
MouseInput
.
X
,
event
.
MouseInput
.
Y
);
position
2di
mousepos
(
event
.
MouseInput
.
X
,
event
.
MouseInput
.
Y
);
s32
x
=
pos
.
X
;
s32
y
=
pos
.
Y
;
irr
::
core
::
vector
2di
pos
=
mainGame
->
ResizeReverse
(
event
.
MouseInput
.
X
,
event
.
MouseInput
.
Y
);
irr
::
core
::
vector
2di
mousepos
(
event
.
MouseInput
.
X
,
event
.
MouseInput
.
Y
);
irr
::
s32
x
=
pos
.
X
;
irr
::
s32
y
=
pos
.
Y
;
if
(
x
<
300
)
break
;
if
(
mainGame
->
gameConf
.
control_mode
==
1
)
{
...
...
@@ -1496,10 +1496,10 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
if
(
!
mainGame
->
dInfo
.
isStarted
)
break
;
bool
should_show_tip
=
false
;
position
2di
pos
=
mainGame
->
ResizeReverse
(
event
.
MouseInput
.
X
,
event
.
MouseInput
.
Y
);
position2di
mousepos
=
position
2di
(
event
.
MouseInput
.
X
,
event
.
MouseInput
.
Y
);
s32
x
=
pos
.
X
;
s32
y
=
pos
.
Y
;
irr
::
core
::
vector
2di
pos
=
mainGame
->
ResizeReverse
(
event
.
MouseInput
.
X
,
event
.
MouseInput
.
Y
);
irr
::
core
::
vector2di
mousepos
=
irr
::
core
::
vector
2di
(
event
.
MouseInput
.
X
,
event
.
MouseInput
.
Y
);
irr
::
s32
x
=
pos
.
X
;
irr
::
s32
y
=
pos
.
Y
;
wchar_t
formatBuffer
[
2048
];
if
(
x
<
300
)
{
irr
::
gui
::
IGUIElement
*
root
=
mainGame
->
env
->
getRootGUIElement
();
...
...
@@ -1554,7 +1554,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
if
(
mainGame
->
stTip
->
isVisible
())
{
should_show_tip
=
true
;
irr
::
core
::
recti
tpos
=
mainGame
->
stTip
->
getRelativePosition
();
mainGame
->
stTip
->
setRelativePosition
(
irr
::
core
::
position
2di
(
mousepos
.
X
-
tpos
.
getWidth
()
-
10
,
mcard
?
mousepos
.
Y
-
tpos
.
getHeight
()
-
10
:
y
+
10
));
mainGame
->
stTip
->
setRelativePosition
(
irr
::
core
::
vector
2di
(
mousepos
.
X
-
tpos
.
getWidth
()
-
10
,
mcard
?
mousepos
.
Y
-
tpos
.
getHeight
()
-
10
:
y
+
10
));
}
}
if
(
mcard
!=
hovered_card
)
{
...
...
@@ -1638,7 +1638,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
}
should_show_tip
=
true
;
irr
::
core
::
dimension2d
<
unsigned
int
>
dtip
=
mainGame
->
guiFont
->
getDimension
(
str
.
c_str
())
+
irr
::
core
::
dimension2d
<
unsigned
int
>
(
10
,
10
);
mainGame
->
stTip
->
setRelativePosition
(
recti
(
mousepos
.
X
-
10
-
dtip
.
Width
,
mousepos
.
Y
-
10
-
dtip
.
Height
,
mousepos
.
X
-
10
,
mousepos
.
Y
-
10
));
mainGame
->
stTip
->
setRelativePosition
(
irr
::
core
::
recti
(
mousepos
.
X
-
10
-
dtip
.
Width
,
mousepos
.
Y
-
10
-
dtip
.
Height
,
mousepos
.
X
-
10
,
mousepos
.
Y
-
10
));
mainGame
->
stTip
->
setText
(
str
.
c_str
());
}
}
else
{
...
...
@@ -1677,7 +1677,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
}
should_show_tip
=
true
;
irr
::
core
::
dimension2d
<
unsigned
int
>
dtip
=
mainGame
->
guiFont
->
getDimension
(
str
.
c_str
())
+
irr
::
core
::
dimension2d
<
unsigned
int
>
(
10
,
10
);
mainGame
->
stTip
->
setRelativePosition
(
recti
(
mousepos
.
X
-
10
-
dtip
.
Width
,
mousepos
.
Y
+
10
,
mousepos
.
X
-
10
,
mousepos
.
Y
+
10
+
dtip
.
Height
));
mainGame
->
stTip
->
setRelativePosition
(
irr
::
core
::
recti
(
mousepos
.
X
-
10
-
dtip
.
Width
,
mousepos
.
Y
+
10
,
mousepos
.
X
-
10
,
mousepos
.
Y
+
10
+
dtip
.
Height
));
mainGame
->
stTip
->
setText
(
str
.
c_str
());
}
hovered_player
=
mplayer
;
...
...
@@ -1718,7 +1718,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case
irr
:
:
EET_KEY_INPUT_EVENT
:
{
switch
(
event
.
KeyInput
.
Key
)
{
case
irr
:
:
KEY_KEY_A
:
{
if
(
mainGame
->
gameConf
.
control_mode
==
0
&&
!
mainGame
->
HasFocus
(
EGUIET_EDIT_BOX
))
{
if
(
mainGame
->
gameConf
.
control_mode
==
0
&&
!
mainGame
->
HasFocus
(
irr
::
gui
::
EGUIET_EDIT_BOX
))
{
mainGame
->
always_chain
=
event
.
KeyInput
.
PressedDown
;
mainGame
->
ignore_chain
=
false
;
mainGame
->
chain_when_avail
=
false
;
...
...
@@ -1727,7 +1727,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
break
;
}
case
irr
:
:
KEY_KEY_S
:
{
if
(
mainGame
->
gameConf
.
control_mode
==
0
&&
!
mainGame
->
HasFocus
(
EGUIET_EDIT_BOX
))
{
if
(
mainGame
->
gameConf
.
control_mode
==
0
&&
!
mainGame
->
HasFocus
(
irr
::
gui
::
EGUIET_EDIT_BOX
))
{
mainGame
->
ignore_chain
=
event
.
KeyInput
.
PressedDown
;
mainGame
->
always_chain
=
false
;
mainGame
->
chain_when_avail
=
false
;
...
...
@@ -1736,7 +1736,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
break
;
}
case
irr
:
:
KEY_KEY_D
:
{
if
(
mainGame
->
gameConf
.
control_mode
==
0
&&
!
mainGame
->
HasFocus
(
EGUIET_EDIT_BOX
))
{
if
(
mainGame
->
gameConf
.
control_mode
==
0
&&
!
mainGame
->
HasFocus
(
irr
::
gui
::
EGUIET_EDIT_BOX
))
{
mainGame
->
chain_when_avail
=
event
.
KeyInput
.
PressedDown
;
mainGame
->
always_chain
=
false
;
mainGame
->
ignore_chain
=
false
;
...
...
@@ -1753,7 +1753,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case
irr
:
:
KEY_F7
:
case
irr
:
:
KEY_F8
:
{
if
(
!
event
.
KeyInput
.
PressedDown
&&
!
mainGame
->
dInfo
.
isReplay
&&
mainGame
->
dInfo
.
player_type
!=
7
&&
mainGame
->
dInfo
.
isStarted
&&
!
mainGame
->
wCardDisplay
->
isVisible
()
&&
!
mainGame
->
HasFocus
(
EGUIET_EDIT_BOX
))
{
&&
!
mainGame
->
wCardDisplay
->
isVisible
()
&&
!
mainGame
->
HasFocus
(
irr
::
gui
::
EGUIET_EDIT_BOX
))
{
int
loc_id
=
0
;
display_cards
.
clear
();
switch
(
event
.
KeyInput
.
Key
)
{
...
...
@@ -1830,22 +1830,22 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
bool
ClientField
::
OnCommonEvent
(
const
irr
::
SEvent
&
event
)
{
switch
(
event
.
EventType
)
{
case
irr
:
:
EET_GUI_EVENT
:
{
s32
id
=
event
.
GUIEvent
.
Caller
->
getID
();
irr
::
s32
id
=
event
.
GUIEvent
.
Caller
->
getID
();
switch
(
event
.
GUIEvent
.
EventType
)
{
case
irr
:
:
gui
::
EGET_ELEMENT_HOVERED
:
{
if
(
event
.
GUIEvent
.
Caller
->
getType
()
==
EGUIET_EDIT_BOX
)
{
mainGame
->
SetCursor
(
event
.
GUIEvent
.
Caller
->
isEnabled
()
?
ECI_IBEAM
:
ECI_NORMAL
);
if
(
event
.
GUIEvent
.
Caller
->
getType
()
==
irr
::
gui
::
EGUIET_EDIT_BOX
)
{
mainGame
->
SetCursor
(
event
.
GUIEvent
.
Caller
->
isEnabled
()
?
irr
::
gui
::
ECI_IBEAM
:
irr
::
gui
::
ECI_NORMAL
);
return
true
;
}
if
(
event
.
GUIEvent
.
Caller
==
mainGame
->
imgCard
&&
mainGame
->
is_building
&&
!
mainGame
->
is_siding
)
{
mainGame
->
SetCursor
(
ECI_HAND
);
mainGame
->
SetCursor
(
irr
::
gui
::
ECI_HAND
);
return
true
;
}
break
;
}
case
irr
:
:
gui
::
EGET_ELEMENT_LEFT
:
{
if
(
event
.
GUIEvent
.
Caller
->
getType
()
==
EGUIET_EDIT_BOX
||
event
.
GUIEvent
.
Caller
==
mainGame
->
imgCard
)
{
mainGame
->
SetCursor
(
ECI_NORMAL
);
if
(
event
.
GUIEvent
.
Caller
->
getType
()
==
irr
::
gui
::
EGUIET_EDIT_BOX
||
event
.
GUIEvent
.
Caller
==
mainGame
->
imgCard
)
{
mainGame
->
SetCursor
(
irr
::
gui
::
ECI_NORMAL
);
return
true
;
}
break
;
...
...
@@ -1941,7 +1941,7 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
mainGame
->
cbLFlist
->
setEnabled
(
mainGame
->
gameConf
.
use_lflist
);
mainGame
->
cbLFlist
->
setSelected
(
mainGame
->
gameConf
.
use_lflist
?
mainGame
->
gameConf
.
default_lflist
:
mainGame
->
cbLFlist
->
getItemCount
()
-
1
);
mainGame
->
cbHostLFlist
->
setSelected
(
mainGame
->
gameConf
.
use_lflist
?
mainGame
->
gameConf
.
default_lflist
:
mainGame
->
cbHostLFlist
->
getItemCount
()
-
1
);
mainGame
->
deckBuilder
.
filterList
=
&
deckManager
.
_lfList
[
mainGame
->
cbLFlist
->
getSelected
()]
.
content
;
mainGame
->
deckBuilder
.
filterList
=
&
deckManager
.
_lfList
[
mainGame
->
cbLFlist
->
getSelected
()];
return
true
;
break
;
}
...
...
@@ -1953,7 +1953,7 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
case
COMBOBOX_LFLIST
:
{
mainGame
->
gameConf
.
default_lflist
=
mainGame
->
cbLFlist
->
getSelected
();
mainGame
->
cbHostLFlist
->
setSelected
(
mainGame
->
gameConf
.
default_lflist
);
mainGame
->
deckBuilder
.
filterList
=
&
deckManager
.
_lfList
[
mainGame
->
gameConf
.
default_lflist
]
.
content
;
mainGame
->
deckBuilder
.
filterList
=
&
deckManager
.
_lfList
[
mainGame
->
gameConf
.
default_lflist
];
return
true
;
break
;
}
...
...
@@ -1993,7 +1993,7 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
return
true
;
break
;
}
u32
pos
=
mainGame
->
scrCardText
->
getPos
();
irr
::
u32
pos
=
mainGame
->
scrCardText
->
getPos
();
mainGame
->
SetStaticText
(
mainGame
->
stText
,
mainGame
->
stText
->
getRelativePosition
().
getWidth
()
-
25
,
mainGame
->
guiFont
,
mainGame
->
showingtext
,
pos
);
return
true
;
break
;
...
...
@@ -2009,14 +2009,14 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
}
#endif
case
SCROLL_TAB_HELPER
:
{
rect
<
s32
>
pos
=
mainGame
->
tabHelper
->
getRelativePosition
();
mainGame
->
tabHelper
->
setRelativePosition
(
recti
(
0
,
mainGame
->
scrTabHelper
->
getPos
()
*
-
1
,
pos
.
LowerRightCorner
.
X
,
pos
.
LowerRightCorner
.
Y
));
irr
::
core
::
rect
<
irr
::
s32
>
pos
=
mainGame
->
tabHelper
->
getRelativePosition
();
mainGame
->
tabHelper
->
setRelativePosition
(
irr
::
core
::
recti
(
0
,
mainGame
->
scrTabHelper
->
getPos
()
*
-
1
,
pos
.
LowerRightCorner
.
X
,
pos
.
LowerRightCorner
.
Y
));
return
true
;
break
;
}
case
SCROLL_TAB_SYSTEM
:
{
rect
<
s32
>
pos
=
mainGame
->
tabSystem
->
getRelativePosition
();
mainGame
->
tabSystem
->
setRelativePosition
(
recti
(
0
,
mainGame
->
scrTabSystem
->
getPos
()
*
-
1
,
pos
.
LowerRightCorner
.
X
,
pos
.
LowerRightCorner
.
Y
));
irr
::
core
::
rect
<
irr
::
s32
>
pos
=
mainGame
->
tabSystem
->
getRelativePosition
();
mainGame
->
tabSystem
->
setRelativePosition
(
irr
::
core
::
recti
(
0
,
mainGame
->
scrTabSystem
->
getPos
()
*
-
1
,
pos
.
LowerRightCorner
.
X
,
pos
.
LowerRightCorner
.
Y
));
return
true
;
break
;
}
...
...
@@ -2049,7 +2049,7 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
switch
(
event
.
KeyInput
.
Key
)
{
case
irr
:
:
KEY_KEY_R
:
{
if
(
mainGame
->
gameConf
.
control_mode
==
0
&&
!
event
.
KeyInput
.
PressedDown
&&
!
mainGame
->
HasFocus
(
EGUIET_EDIT_BOX
))
{
&&
!
event
.
KeyInput
.
PressedDown
&&
!
mainGame
->
HasFocus
(
irr
::
gui
::
EGUIET_EDIT_BOX
))
{
mainGame
->
textFont
->
setTransparency
(
true
);
mainGame
->
guiFont
->
setTransparency
(
true
);
}
...
...
@@ -2058,7 +2058,7 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
}
case
irr
:
:
KEY_F9
:
{
if
(
mainGame
->
gameConf
.
control_mode
==
1
&&
!
event
.
KeyInput
.
PressedDown
&&
!
mainGame
->
HasFocus
(
EGUIET_EDIT_BOX
))
{
&&
!
event
.
KeyInput
.
PressedDown
&&
!
mainGame
->
HasFocus
(
irr
::
gui
::
EGUIET_EDIT_BOX
))
{
mainGame
->
textFont
->
setTransparency
(
true
);
mainGame
->
guiFont
->
setTransparency
(
true
);
}
...
...
@@ -2066,7 +2066,7 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
break
;
}
case
irr
:
:
KEY_ESCAPE
:
{
if
(
!
mainGame
->
HasFocus
(
EGUIET_EDIT_BOX
))
if
(
!
mainGame
->
HasFocus
(
irr
::
gui
::
EGUIET_EDIT_BOX
))
mainGame
->
device
->
minimizeWindow
();
return
true
;
break
;
...
...
@@ -2082,7 +2082,7 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
void
ClientField
::
GetHoverField
(
int
x
,
int
y
)
{
irr
::
core
::
recti
sfRect
(
430
,
504
,
875
,
600
);
irr
::
core
::
recti
ofRect
(
531
,
135
,
800
,
191
);
irr
::
core
::
position
2di
pos
(
x
,
y
);
irr
::
core
::
vector
2di
pos
(
x
,
y
);
int
rule
=
(
mainGame
->
dInfo
.
duel_rule
>=
4
)
?
1
:
0
;
if
(
sfRect
.
isPointInside
(
pos
))
{
int
hc
=
hand
[
0
].
size
();
...
...
@@ -2319,22 +2319,22 @@ void ClientField::ShowMenu(int flag, int x, int y) {
int
offset
=
mainGame
->
gameConf
.
resize_popup_menu
?
((
mainGame
->
yScale
>=
0.666
)
?
21
*
mainGame
->
yScale
:
14
)
:
21
;
if
(
flag
&
COMMAND_ACTIVATE
)
{
mainGame
->
btnActivate
->
setVisible
(
true
);
mainGame
->
btnActivate
->
setRelativePosition
(
position
2di
(
1
,
height
));
mainGame
->
btnActivate
->
setRelativePosition
(
irr
::
core
::
vector
2di
(
1
,
height
));
height
+=
offset
;
}
else
mainGame
->
btnActivate
->
setVisible
(
false
);
if
(
flag
&
COMMAND_SUMMON
)
{
mainGame
->
btnSummon
->
setVisible
(
true
);
mainGame
->
btnSummon
->
setRelativePosition
(
position
2di
(
1
,
height
));
mainGame
->
btnSummon
->
setRelativePosition
(
irr
::
core
::
vector
2di
(
1
,
height
));
height
+=
offset
;
}
else
mainGame
->
btnSummon
->
setVisible
(
false
);
if
(
flag
&
COMMAND_SPSUMMON
)
{
mainGame
->
btnSPSummon
->
setVisible
(
true
);
mainGame
->
btnSPSummon
->
setRelativePosition
(
position
2di
(
1
,
height
));
mainGame
->
btnSPSummon
->
setRelativePosition
(
irr
::
core
::
vector
2di
(
1
,
height
));
height
+=
offset
;
}
else
mainGame
->
btnSPSummon
->
setVisible
(
false
);
if
(
flag
&
COMMAND_MSET
)
{
mainGame
->
btnMSet
->
setVisible
(
true
);
mainGame
->
btnMSet
->
setRelativePosition
(
position
2di
(
1
,
height
));
mainGame
->
btnMSet
->
setRelativePosition
(
irr
::
core
::
vector
2di
(
1
,
height
));
height
+=
offset
;
}
else
mainGame
->
btnMSet
->
setVisible
(
false
);
if
(
flag
&
COMMAND_SSET
)
{
...
...
@@ -2343,7 +2343,7 @@ void ClientField::ShowMenu(int flag, int x, int y) {
else
mainGame
->
btnSSet
->
setText
(
dataManager
.
GetSysString
(
1159
));
mainGame
->
btnSSet
->
setVisible
(
true
);
mainGame
->
btnSSet
->
setRelativePosition
(
position
2di
(
1
,
height
));
mainGame
->
btnSSet
->
setRelativePosition
(
irr
::
core
::
vector
2di
(
1
,
height
));
height
+=
offset
;
}
else
mainGame
->
btnSSet
->
setVisible
(
false
);
if
(
flag
&
COMMAND_REPOS
)
{
...
...
@@ -2354,27 +2354,27 @@ void ClientField::ShowMenu(int flag, int x, int y) {
else
mainGame
->
btnRepos
->
setText
(
dataManager
.
GetSysString
(
1156
));
mainGame
->
btnRepos
->
setVisible
(
true
);
mainGame
->
btnRepos
->
setRelativePosition
(
position
2di
(
1
,
height
));
mainGame
->
btnRepos
->
setRelativePosition
(
irr
::
core
::
vector
2di
(
1
,
height
));
height
+=
offset
;
}
else
mainGame
->
btnRepos
->
setVisible
(
false
);
if
(
flag
&
COMMAND_ATTACK
)
{
mainGame
->
btnAttack
->
setVisible
(
true
);
mainGame
->
btnAttack
->
setRelativePosition
(
position
2di
(
1
,
height
));
mainGame
->
btnAttack
->
setRelativePosition
(
irr
::
core
::
vector
2di
(
1
,
height
));
height
+=
offset
;
}
else
mainGame
->
btnAttack
->
setVisible
(
false
);
if
(
flag
&
COMMAND_LIST
)
{
mainGame
->
btnShowList
->
setVisible
(
true
);
mainGame
->
btnShowList
->
setRelativePosition
(
position
2di
(
1
,
height
));
mainGame
->
btnShowList
->
setRelativePosition
(
irr
::
core
::
vector
2di
(
1
,
height
));
height
+=
offset
;
}
else
mainGame
->
btnShowList
->
setVisible
(
false
);
if
(
flag
&
COMMAND_OPERATION
)
{
mainGame
->
btnOperation
->
setVisible
(
true
);
mainGame
->
btnOperation
->
setRelativePosition
(
position
2di
(
1
,
height
));
mainGame
->
btnOperation
->
setRelativePosition
(
irr
::
core
::
vector
2di
(
1
,
height
));
height
+=
offset
;
}
else
mainGame
->
btnOperation
->
setVisible
(
false
);
if
(
flag
&
COMMAND_RESET
)
{
mainGame
->
btnReset
->
setVisible
(
true
);
mainGame
->
btnReset
->
setRelativePosition
(
position
2di
(
1
,
height
));
mainGame
->
btnReset
->
setRelativePosition
(
irr
::
core
::
vector
2di
(
1
,
height
));
height
+=
offset
;
}
else
mainGame
->
btnReset
->
setVisible
(
false
);
panel
=
mainGame
->
wCmdMenu
;
...
...
@@ -2470,17 +2470,17 @@ void ClientField::ShowCardInfoInList(ClientCard* pcard, irr::gui::IGUIElement* e
}
if
(
str
.
length
()
>
0
)
{
parent
->
addChild
(
mainGame
->
stCardListTip
);
irr
::
core
::
rect
<
s32
>
ePos
=
element
->
getRelativePosition
();
s32
x
=
(
ePos
.
UpperLeftCorner
.
X
+
ePos
.
LowerRightCorner
.
X
)
/
2
;
s32
y
=
ePos
.
LowerRightCorner
.
Y
;
irr
::
core
::
rect
<
irr
::
s32
>
ePos
=
element
->
getRelativePosition
();
irr
::
s32
x
=
(
ePos
.
UpperLeftCorner
.
X
+
ePos
.
LowerRightCorner
.
X
)
/
2
;
irr
::
s32
y
=
ePos
.
LowerRightCorner
.
Y
;
mainGame
->
SetStaticText
(
mainGame
->
stCardListTip
,
320
,
mainGame
->
guiFont
,
str
.
c_str
());
irr
::
core
::
dimension2d
<
unsigned
int
>
dTip
=
mainGame
->
guiFont
->
getDimension
(
mainGame
->
stCardListTip
->
getText
())
+
irr
::
core
::
dimension2d
<
unsigned
int
>
(
10
,
10
);
s32
w
=
dTip
.
Width
/
2
;
irr
::
s32
w
=
dTip
.
Width
/
2
;
if
(
x
-
w
<
10
)
x
=
w
+
10
;
if
(
x
+
w
>
670
)
x
=
670
-
w
;
mainGame
->
stCardListTip
->
setRelativePosition
(
recti
(
x
-
w
,
y
-
10
,
x
+
w
,
y
-
10
+
dTip
.
Height
));
mainGame
->
stCardListTip
->
setRelativePosition
(
irr
::
core
::
recti
(
x
-
w
,
y
-
10
,
x
+
w
,
y
-
10
+
dTip
.
Height
));
mainGame
->
stCardListTip
->
setVisible
(
true
);
}
}
...
...
gframe/game.cpp
View file @
c7d6b2a5
This source diff could not be displayed because it is too large. You can
view the blob
instead.
gframe/game.h
View file @
c7d6b2a5
...
...
@@ -29,6 +29,7 @@ constexpr int TEXT_LINE_SIZE = 256;
namespace
ygo
{
bool
IsExtension
(
const
wchar_t
*
filename
,
const
wchar_t
*
extension
);
bool
IsExtension
(
const
char
*
filename
,
const
char
*
extension
);
struct
Config
{
bool
use_d3d
{
false
};
...
...
@@ -143,9 +144,9 @@ class Game {
public:
bool
Initialize
();
void
MainLoop
();
void
BuildProjectionMatrix
(
irr
::
core
::
matrix4
&
mProjection
,
f32
left
,
f32
right
,
f32
bottom
,
f32
top
,
f32
znear
,
f32
zfar
);
void
InitStaticText
(
irr
::
gui
::
IGUIStaticText
*
pControl
,
u32
cWidth
,
u32
cHeight
,
irr
::
gui
::
CGUITTFont
*
font
,
const
wchar_t
*
text
);
std
::
wstring
SetStaticText
(
irr
::
gui
::
IGUIStaticText
*
pControl
,
u32
cWidth
,
irr
::
gui
::
CGUITTFont
*
font
,
const
wchar_t
*
text
,
u32
pos
=
0
);
void
BuildProjectionMatrix
(
irr
::
core
::
matrix4
&
mProjection
,
irr
::
f32
left
,
irr
::
f32
right
,
irr
::
f32
bottom
,
irr
::
f32
top
,
irr
::
f32
znear
,
irr
::
f32
zfar
);
void
InitStaticText
(
irr
::
gui
::
IGUIStaticText
*
pControl
,
irr
::
u32
cWidth
,
irr
::
u32
cHeight
,
irr
::
gui
::
CGUITTFont
*
font
,
const
wchar_t
*
text
);
std
::
wstring
SetStaticText
(
irr
::
gui
::
IGUIStaticText
*
pControl
,
irr
::
u32
cWidth
,
irr
::
gui
::
CGUITTFont
*
font
,
const
wchar_t
*
text
,
irr
::
u32
pos
=
0
);
void
LoadExpansions
();
void
RefreshCategoryDeck
(
irr
::
gui
::
IGUIComboBox
*
cbCategory
,
irr
::
gui
::
IGUIComboBox
*
cbDeck
,
bool
selectlastused
=
true
);
void
RefreshDeck
(
irr
::
gui
::
IGUIComboBox
*
cbCategory
,
irr
::
gui
::
IGUIComboBox
*
cbDeck
);
...
...
@@ -169,7 +170,7 @@ public:
void
HideElement
(
irr
::
gui
::
IGUIElement
*
element
,
bool
set_action
=
false
);
void
PopupElement
(
irr
::
gui
::
IGUIElement
*
element
,
int
hideframe
=
0
);
void
WaitFrameSignal
(
int
frame
);
void
DrawThumb
(
code_pointer
cp
,
position2di
pos
,
const
std
::
unordered_map
<
int
,
int
>
*
lflist
,
bool
drag
=
false
);
void
DrawThumb
(
code_pointer
cp
,
irr
::
core
::
vector2di
pos
,
const
LFList
*
lflist
,
bool
drag
=
false
);
void
DrawDeckBd
();
void
LoadConfig
();
void
SaveConfig
();
...
...
@@ -190,7 +191,7 @@ public:
int
ChatLocalPlayer
(
int
player
);
const
wchar_t
*
LocalName
(
int
local_player
);
bool
HasFocus
(
EGUI_ELEMENT_TYPE
type
)
const
{
bool
HasFocus
(
irr
::
gui
::
EGUI_ELEMENT_TYPE
type
)
const
{
irr
::
gui
::
IGUIElement
*
focus
=
env
->
getFocus
();
return
focus
&&
focus
->
hasType
(
type
);
}
...
...
@@ -203,26 +204,26 @@ public:
void
OnResize
();
void
ResizeChatInputWindow
();
recti
Resize
(
s32
x
,
s32
y
,
s32
x2
,
s32
y2
);
recti
Resize
(
s32
x
,
s32
y
,
s32
x2
,
s32
y2
,
s32
dx
,
s32
dy
,
s32
dx2
,
s32
dy2
);
position2di
Resize
(
s32
x
,
s32
y
);
position2di
ResizeReverse
(
s32
x
,
s32
y
);
recti
ResizePhaseHint
(
s32
x
,
s32
y
,
s32
x2
,
s32
y2
,
s32
width
);
recti
ResizeWin
(
s32
x
,
s32
y
,
s32
x2
,
s32
y2
);
recti
ResizeCardImgWin
(
s32
x
,
s32
y
,
s32
mx
,
s32
my
);
recti
ResizeCardHint
(
s32
x
,
s32
y
,
s32
x2
,
s32
y2
);
position2di
ResizeCardHint
(
s32
x
,
s32
y
);
recti
ResizeCardMid
(
s32
x
,
s32
y
,
s32
x2
,
s32
y2
,
s32
midx
,
s32
midy
);
position2di
ResizeCardMid
(
s32
x
,
s32
y
,
s32
midx
,
s32
midy
);
recti
ResizeFit
(
s32
x
,
s32
y
,
s32
x2
,
s32
y2
);
irr
::
core
::
recti
Resize
(
irr
::
s32
x
,
irr
::
s32
y
,
irr
::
s32
x2
,
irr
::
s32
y2
);
irr
::
core
::
recti
Resize
(
irr
::
s32
x
,
irr
::
s32
y
,
irr
::
s32
x2
,
irr
::
s32
y2
,
irr
::
s32
dx
,
irr
::
s32
dy
,
irr
::
s32
dx2
,
irr
::
s32
dy2
);
irr
::
core
::
vector2di
Resize
(
irr
::
s32
x
,
irr
::
s32
y
);
irr
::
core
::
vector2di
ResizeReverse
(
irr
::
s32
x
,
irr
::
s32
y
);
irr
::
core
::
recti
ResizePhaseHint
(
irr
::
s32
x
,
irr
::
s32
y
,
irr
::
s32
x2
,
irr
::
s32
y2
,
irr
::
s32
width
);
irr
::
core
::
recti
ResizeWin
(
irr
::
s32
x
,
irr
::
s32
y
,
irr
::
s32
x2
,
irr
::
s32
y2
);
irr
::
core
::
recti
ResizeCardImgWin
(
irr
::
s32
x
,
irr
::
s32
y
,
irr
::
s32
mx
,
irr
::
s32
my
);
irr
::
core
::
recti
ResizeCardHint
(
irr
::
s32
x
,
irr
::
s32
y
,
irr
::
s32
x2
,
irr
::
s32
y2
);
irr
::
core
::
vector2di
ResizeCardHint
(
irr
::
s32
x
,
irr
::
s32
y
);
irr
::
core
::
recti
ResizeCardMid
(
irr
::
s32
x
,
irr
::
s32
y
,
irr
::
s32
x2
,
irr
::
s32
y2
,
irr
::
s32
midx
,
irr
::
s32
midy
);
irr
::
core
::
vector2di
ResizeCardMid
(
irr
::
s32
x
,
irr
::
s32
y
,
irr
::
s32
midx
,
irr
::
s32
midy
);
irr
::
core
::
recti
ResizeFit
(
irr
::
s32
x
,
irr
::
s32
y
,
irr
::
s32
x2
,
irr
::
s32
y2
);
void
SetWindowsIcon
();
void
SetWindowsScale
(
float
scale
);
void
FlashWindow
();
void
SetCursor
(
ECURSOR_ICON
icon
);
void
SetCursor
(
irr
::
gui
::
ECURSOR_ICON
icon
);
template
<
typename
T
>
static
void
DrawShadowText
(
irr
::
gui
::
CGUITTFont
*
font
,
const
T
&
text
,
const
core
::
rect
<
s32
>&
position
,
const
core
::
rect
<
s32
>&
padding
,
video
::
SColor
color
=
0xffffffff
,
video
::
SColor
shadowcolor
=
0xff000000
,
bool
hcenter
=
false
,
bool
vcenter
=
false
,
const
core
::
rect
<
s32
>*
clip
=
nullptr
);
static
void
DrawShadowText
(
irr
::
gui
::
CGUITTFont
*
font
,
const
T
&
text
,
const
irr
::
core
::
rect
<
irr
::
s32
>&
position
,
const
irr
::
core
::
rect
<
irr
::
s32
>&
padding
,
irr
::
video
::
SColor
color
=
0xffffffff
,
irr
::
video
::
SColor
shadowcolor
=
0xff000000
,
bool
hcenter
=
false
,
bool
vcenter
=
false
,
const
irr
::
core
::
rect
<
irr
::
s32
>*
clip
=
nullptr
);
std
::
mutex
gMutex
;
Signal
frameSignal
;
...
...
@@ -239,41 +240,41 @@ public:
std
::
wstring
chatMsg
[
8
];
std
::
vector
<
BotInfo
>
botInfo
;
int
hideChatTimer
;
bool
hideChat
;
int
hideChatTimer
{}
;
bool
hideChat
{}
;
int
chatTiming
[
8
]{};
int
chatType
[
8
]{};
unsigned
short
linePatternD3D
;
unsigned
short
linePatternGL
;
int
waitFrame
;
int
signalFrame
;
int
actionParam
;
int
showingcode
;
const
wchar_t
*
showingtext
;
int
showcard
;
int
showcardcode
;
int
showcarddif
;
int
showcardp
;
int
is_attacking
;
int
attack_sv
;
unsigned
short
linePatternD3D
{}
;
unsigned
short
linePatternGL
{
0x0f0f
}
;
int
waitFrame
{}
;
int
signalFrame
{}
;
int
actionParam
{}
;
int
showingcode
{}
;
const
wchar_t
*
showingtext
{}
;
int
showcard
{}
;
int
showcardcode
{}
;
int
showcarddif
{}
;
int
showcardp
{}
;
int
is_attacking
{}
;
int
attack_sv
{}
;
irr
::
core
::
vector3df
atk_r
;
irr
::
core
::
vector3df
atk_t
;
float
atkdy
;
int
lpframe
;
int
lpd
;
int
lpplayer
;
int
lpccolor
;
float
atkdy
{}
;
int
lpframe
{}
;
int
lpd
{}
;
int
lpplayer
{}
;
int
lpccolor
{}
;
std
::
wstring
lpcstring
;
bool
always_chain
;
bool
ignore_chain
;
bool
chain_when_avail
;
bool
always_chain
{}
;
bool
ignore_chain
{}
;
bool
chain_when_avail
{}
;
bool
is_building
;
bool
is_siding
;
bool
is_building
{}
;
bool
is_siding
{}
;
irr
::
core
::
dimension2d
<
irr
::
u32
>
window_size
;
float
xScale
;
float
yScale
;
float
xScale
{
1.0
f
}
;
float
yScale
{
1.0
f
}
;
ClientField
dField
;
DeckBuilder
deckBuilder
;
...
...
gframe/gframe.cpp
View file @
c7d6b2a5
...
...
@@ -2,7 +2,7 @@
#include "game.h"
#include "data_manager.h"
#include <event2/thread.h>
#include <
locale.h
>
#include <
clocale
>
#include <memory>
#ifdef __APPLE__
#import <CoreFoundation/CoreFoundation.h>
...
...
@@ -24,7 +24,7 @@ void ClickButton(irr::gui::IGUIElement* btn) {
int
main
(
int
argc
,
char
*
argv
[])
{
#ifndef _WIN32
setlocale
(
LC_CTYPE
,
"UTF-8"
);
s
td
::
s
etlocale
(
LC_CTYPE
,
"UTF-8"
);
#endif
#ifdef __APPLE__
CFURLRef
bundle_url
=
CFBundleCopyBundleURL
(
CFBundleGetMainBundle
());
...
...
@@ -36,17 +36,15 @@ int main(int argc, char* argv[]) {
CFRelease
(
path
);
#endif //__APPLE__
#ifdef _WIN32
#ifndef _DEBUG
char
*
pstrext
;
if
(
argc
==
2
&&
(
pstrext
=
std
::
strrchr
(
argv
[
1
],
'.'
))
&&
(
!
mystrncasecmp
(
pstrext
,
".ydk"
,
4
)
||
!
mystrncasecmp
(
pstrext
,
".yrp"
,
4
)))
{
if
(
argc
==
2
&&
(
ygo
::
IsExtension
(
argv
[
1
],
".ydk"
)
||
ygo
::
IsExtension
(
argv
[
1
],
".yrp"
)))
{
// open file from explorer
wchar_t
exepath
[
MAX_PATH
];
GetModuleFileNameW
(
nullptr
,
exepath
,
MAX_PATH
);
wchar_t
*
p
=
std
::
wcsrchr
(
exepath
,
'\\'
);
*
p
=
'\0'
;
wchar_t
*
p
=
std
::
wcsrchr
(
exepath
,
L'\\'
);
if
(
p
)
{
*
p
=
0
;
SetCurrentDirectoryW
(
exepath
);
}
#endif //_DEBUG
}
#endif //_WIN32
#ifdef _WIN32
WORD
wVersionRequested
;
...
...
@@ -63,7 +61,7 @@ int main(int argc, char* argv[]) {
return
0
;
#ifdef _WIN32
int
wargc
;
int
wargc
=
0
;
std
::
unique_ptr
<
wchar_t
*
[],
void
(
*
)(
wchar_t
**
)
>
wargv
(
CommandLineToArgvW
(
GetCommandLineW
(),
&
wargc
),
[](
wchar_t
**
wargv
)
{
LocalFree
(
wargv
);
});
...
...
@@ -78,6 +76,24 @@ int main(int argc, char* argv[]) {
bool
keep_on_return
=
false
;
bool
deckCategorySpecified
=
false
;
for
(
int
i
=
1
;
i
<
wargc
;
++
i
)
{
if
(
wargc
==
2
&&
std
::
wcslen
(
wargv
[
1
])
>=
4
)
{
wchar_t
*
pstrext
=
wargv
[
1
]
+
std
::
wcslen
(
wargv
[
1
])
-
4
;
if
(
!
mywcsncasecmp
(
pstrext
,
L".ydk"
,
4
))
{
open_file
=
true
;
BufferIO
::
CopyWideString
(
wargv
[
1
],
open_file_name
);
exit_on_return
=
true
;
ClickButton
(
ygo
::
mainGame
->
btnDeckEdit
);
break
;
}
if
(
!
mywcsncasecmp
(
pstrext
,
L".yrp"
,
4
))
{
open_file
=
true
;
BufferIO
::
CopyWideString
(
wargv
[
1
],
open_file_name
);
exit_on_return
=
true
;
ClickButton
(
ygo
::
mainGame
->
btnReplayMode
);
ClickButton
(
ygo
::
mainGame
->
btnLoadReplay
);
break
;
}
}
if
(
wargv
[
i
][
0
]
==
L'-'
&&
wargv
[
i
][
1
]
==
L'e'
&&
wargv
[
i
][
2
]
!=
L'\0'
)
{
ygo
::
dataManager
.
LoadDB
(
&
wargv
[
i
][
2
]);
continue
;
...
...
@@ -173,23 +189,6 @@ int main(int argc, char* argv[]) {
if
(
open_file
)
ClickButton
(
ygo
::
mainGame
->
btnLoadSinglePlay
);
break
;
}
else
if
(
wargc
==
2
&&
std
::
wcslen
(
wargv
[
1
])
>=
4
)
{
wchar_t
*
pstrext
=
wargv
[
1
]
+
std
::
wcslen
(
wargv
[
1
])
-
4
;
if
(
!
mywcsncasecmp
(
pstrext
,
L".ydk"
,
4
))
{
open_file
=
true
;
BufferIO
::
CopyWideString
(
wargv
[
i
],
open_file_name
);
exit_on_return
=
!
keep_on_return
;
ClickButton
(
ygo
::
mainGame
->
btnDeckEdit
);
break
;
}
if
(
!
mywcsncasecmp
(
pstrext
,
L".yrp"
,
4
))
{
open_file
=
true
;
BufferIO
::
CopyWideString
(
wargv
[
i
],
open_file_name
);
exit_on_return
=
!
keep_on_return
;
ClickButton
(
ygo
::
mainGame
->
btnReplayMode
);
ClickButton
(
ygo
::
mainGame
->
btnLoadReplay
);
break
;
}
}
}
ygo
::
mainGame
->
MainLoop
();
...
...
gframe/image_manager.cpp
View file @
c7d6b2a5
...
...
@@ -129,7 +129,7 @@ void ImageManager::ResizeTexture() {
// function by Warr1024, from https://github.com/minetest/minetest/issues/2419 , modified
void
imageScaleNNAA
(
irr
::
video
::
IImage
*
src
,
irr
::
video
::
IImage
*
dest
)
{
double
sx
,
sy
,
minsx
,
maxsx
,
minsy
,
maxsy
,
area
,
ra
,
ga
,
ba
,
aa
,
pw
,
ph
,
pa
;
u32
dy
,
dx
;
irr
::
u32
dy
,
dx
;
irr
::
video
::
SColor
pxl
;
// Cache rectsngle boundaries.
...
...
@@ -138,7 +138,7 @@ void imageScaleNNAA(irr::video::IImage *src, irr::video::IImage *dest) {
// Walk each destination image pixel.
// Note: loop y around x for better cache locality.
irr
::
core
::
dimension2d
<
u32
>
dim
=
dest
->
getDimension
();
irr
::
core
::
dimension2d
<
irr
::
u32
>
dim
=
dest
->
getDimension
();
for
(
dy
=
0
;
dy
<
dim
.
Height
;
dy
++
)
for
(
dx
=
0
;
dx
<
dim
.
Width
;
dx
++
)
{
...
...
@@ -176,7 +176,7 @@ void imageScaleNNAA(irr::video::IImage *src, irr::video::IImage *dest) {
// Get source pixel and add it to totals, weighted
// by covered area and alpha.
pxl
=
src
->
getPixel
((
u32
)
sx
,
(
u32
)
sy
);
pxl
=
src
->
getPixel
((
irr
::
u32
)
sx
,
(
irr
::
u32
)
sy
);
area
+=
pa
;
ra
+=
pa
*
pxl
.
getRed
();
ga
+=
pa
*
pxl
.
getGreen
();
...
...
@@ -199,16 +199,16 @@ void imageScaleNNAA(irr::video::IImage *src, irr::video::IImage *dest) {
dest
->
setPixel
(
dx
,
dy
,
pxl
);
}
}
irr
::
video
::
ITexture
*
ImageManager
::
GetTextureFromFile
(
const
char
*
file
,
s32
width
,
s32
height
)
{
irr
::
video
::
ITexture
*
ImageManager
::
GetTextureFromFile
(
const
char
*
file
,
irr
::
s32
width
,
irr
::
s32
height
)
{
if
(
mainGame
->
gameConf
.
use_image_scale
)
{
irr
::
video
::
ITexture
*
texture
;
irr
::
video
::
IImage
*
srcimg
=
driver
->
createImageFromFile
(
file
);
if
(
srcimg
==
nullptr
)
return
nullptr
;
if
(
srcimg
->
getDimension
()
==
irr
::
core
::
dimension2d
<
u32
>
(
width
,
height
))
{
if
(
srcimg
->
getDimension
()
==
irr
::
core
::
dimension2d
<
irr
::
u32
>
(
width
,
height
))
{
texture
=
driver
->
addTexture
(
file
,
srcimg
);
}
else
{
video
::
IImage
*
destimg
=
driver
->
createImage
(
srcimg
->
getColorFormat
(),
irr
::
core
::
dimension2d
<
u32
>
(
width
,
height
));
irr
::
video
::
IImage
*
destimg
=
driver
->
createImage
(
srcimg
->
getColorFormat
(),
irr
::
core
::
dimension2d
<
irr
::
u32
>
(
width
,
height
));
imageScaleNNAA
(
srcimg
,
destimg
);
texture
=
driver
->
addTexture
(
file
,
destimg
);
destimg
->
drop
();
...
...
@@ -274,7 +274,7 @@ irr::video::ITexture* ImageManager::GetBigPicture(int code, float zoom) {
texture
=
driver
->
addTexture
(
file
,
srcimg
);
}
else
{
auto
origsize
=
srcimg
->
getDimension
();
video
::
IImage
*
destimg
=
driver
->
createImage
(
srcimg
->
getColorFormat
(),
irr
::
core
::
dimension2d
<
u32
>
(
origsize
.
Width
*
zoom
,
origsize
.
Height
*
zoom
));
irr
::
video
::
IImage
*
destimg
=
driver
->
createImage
(
srcimg
->
getColorFormat
(),
irr
::
core
::
dimension2d
<
irr
::
u32
>
(
origsize
.
Width
*
zoom
,
origsize
.
Height
*
zoom
));
imageScaleNNAA
(
srcimg
,
destimg
);
texture
=
driver
->
addTexture
(
file
,
destimg
);
destimg
->
drop
();
...
...
@@ -307,14 +307,14 @@ int ImageManager::LoadThumbThread() {
if
(
img
!=
nullptr
)
{
int
width
=
CARD_THUMB_WIDTH
*
mainGame
->
xScale
;
int
height
=
CARD_THUMB_HEIGHT
*
mainGame
->
yScale
;
if
(
img
->
getDimension
()
==
irr
::
core
::
dimension2d
<
u32
>
(
width
,
height
))
{
if
(
img
->
getDimension
()
==
irr
::
core
::
dimension2d
<
irr
::
u32
>
(
width
,
height
))
{
img
->
grab
();
imageManager
.
tThumbLoadingMutex
.
lock
();
if
(
imageManager
.
tThumbLoadingThreadRunning
)
imageManager
.
tThumbLoading
[
code
]
=
img
;
imageManager
.
tThumbLoadingMutex
.
unlock
();
}
else
{
irr
::
video
::
IImage
*
destimg
=
imageManager
.
driver
->
createImage
(
img
->
getColorFormat
(),
irr
::
core
::
dimension2d
<
u32
>
(
width
,
height
));
irr
::
video
::
IImage
*
destimg
=
imageManager
.
driver
->
createImage
(
img
->
getColorFormat
(),
irr
::
core
::
dimension2d
<
irr
::
u32
>
(
width
,
height
));
imageScaleNNAA
(
img
,
destimg
);
img
->
drop
();
destimg
->
grab
();
...
...
gframe/image_manager.h
View file @
c7d6b2a5
...
...
@@ -16,7 +16,7 @@ public:
void
ClearTexture
();
void
RemoveTexture
(
int
code
);
void
ResizeTexture
();
irr
::
video
::
ITexture
*
GetTextureFromFile
(
const
char
*
file
,
s32
width
,
s32
height
);
irr
::
video
::
ITexture
*
GetTextureFromFile
(
const
char
*
file
,
irr
::
s32
width
,
irr
::
s32
height
);
irr
::
video
::
ITexture
*
GetTexture
(
int
code
,
bool
fit
=
false
);
irr
::
video
::
ITexture
*
GetBigPicture
(
int
code
,
float
zoom
);
irr
::
video
::
ITexture
*
GetTextureThumb
(
int
code
);
...
...
gframe/lzma/premake5.lua
View file @
c7d6b2a5
project
"clzma"
kind
"StaticLib"
cdialect
"C11"
files
{
"*.c"
,
"*.h"
}
gframe/materials.cpp
View file @
c7d6b2a5
...
...
@@ -4,11 +4,11 @@ namespace ygo {
Materials
matManager
;
inline
void
SetS3DVertex
(
S3DVertex
*
v
,
f32
x1
,
f32
y1
,
f32
x2
,
f32
y2
,
f32
z
,
f32
nz
,
f32
tu1
,
f32
tv1
,
f32
tu2
,
f32
tv2
)
{
v
[
0
]
=
S3DVertex
(
x1
,
y1
,
z
,
0
,
0
,
nz
,
SColor
(
255
,
255
,
255
,
255
),
tu1
,
tv1
);
v
[
1
]
=
S3DVertex
(
x2
,
y1
,
z
,
0
,
0
,
nz
,
SColor
(
255
,
255
,
255
,
255
),
tu2
,
tv1
);
v
[
2
]
=
S3DVertex
(
x1
,
y2
,
z
,
0
,
0
,
nz
,
SColor
(
255
,
255
,
255
,
255
),
tu1
,
tv2
);
v
[
3
]
=
S3DVertex
(
x2
,
y2
,
z
,
0
,
0
,
nz
,
SColor
(
255
,
255
,
255
,
255
),
tu2
,
tv2
);
inline
void
SetS3DVertex
(
irr
::
video
::
S3DVertex
*
v
,
irr
::
f32
x1
,
irr
::
f32
y1
,
irr
::
f32
x2
,
irr
::
f32
y2
,
irr
::
f32
z
,
irr
::
f32
nz
,
irr
::
f32
tu1
,
irr
::
f32
tv1
,
irr
::
f32
tu2
,
irr
::
f32
tv2
)
{
v
[
0
]
=
irr
::
video
::
S3DVertex
(
x1
,
y1
,
z
,
0
,
0
,
nz
,
irr
::
video
::
SColor
(
255
,
255
,
255
,
255
),
tu1
,
tv1
);
v
[
1
]
=
irr
::
video
::
S3DVertex
(
x2
,
y1
,
z
,
0
,
0
,
nz
,
irr
::
video
::
SColor
(
255
,
255
,
255
,
255
),
tu2
,
tv1
);
v
[
2
]
=
irr
::
video
::
S3DVertex
(
x1
,
y2
,
z
,
0
,
0
,
nz
,
irr
::
video
::
SColor
(
255
,
255
,
255
,
255
),
tu1
,
tv2
);
v
[
3
]
=
irr
::
video
::
S3DVertex
(
x2
,
y2
,
z
,
0
,
0
,
nz
,
irr
::
video
::
SColor
(
255
,
255
,
255
,
255
),
tu2
,
tv2
);
}
Materials
::
Materials
()
{
...
...
@@ -28,12 +28,12 @@ Materials::Materials() {
/*
//background grids
for (int i = 0; i < 6; ++i) {
vBackLine[i * 6 + 0] =
S3DVertex(vector3df(1.2f + i * 1.1f, 0.5f, -0.01f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[i * 6 + 1] =
S3DVertex(vector3df(1.2f + i * 1.1f, -0.5f, -0.01f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[i * 6 + 2] =
S3DVertex(vector3df(1.2f + i * 1.1f, 1.7f, -0.01f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[i * 6 + 3] =
S3DVertex(vector3df(1.2f + i * 1.1f, -1.7f, -0.01f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[i * 6 + 4] =
S3DVertex(vector3df(1.2f + i * 1.1f, 2.9f, -0.01f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[i * 6 + 5] =
S3DVertex(vector3df(1.2f + i * 1.1f, -2.9f, -0.01f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[i * 6 + 0] =
irr::video::S3DVertex(irr::core::vector3df(1.2f + i * 1.1f, 0.5f, -0.01f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[i * 6 + 1] =
irr::video::S3DVertex(irr::core::vector3df(1.2f + i * 1.1f, -0.5f, -0.01f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[i * 6 + 2] =
irr::video::S3DVertex(irr::core::vector3df(1.2f + i * 1.1f, 1.7f, -0.01f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[i * 6 + 3] =
irr::video::S3DVertex(irr::core::vector3df(1.2f + i * 1.1f, -1.7f, -0.01f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[i * 6 + 4] =
irr::video::S3DVertex(irr::core::vector3df(1.2f + i * 1.1f, 2.9f, -0.01f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[i * 6 + 5] =
irr::video::S3DVertex(irr::core::vector3df(1.2f + i * 1.1f, -2.9f, -0.01f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
}
for(int i = 0; i < 6; ++i) {
iBackLine[i * 4 + 0] = i * 6 + 0;
...
...
@@ -44,10 +44,10 @@ Materials::Materials() {
iBackLine[i * 2 + 25] = 30 + i;
}
//extra0
vBackLine[36] =
S3DVertex(vector3df(0.2f, 2.4f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[37] =
S3DVertex(vector3df(1.0f, 2.4f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[38] =
S3DVertex(vector3df(0.2f, 3.6f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[39] =
S3DVertex(vector3df(1.0f, 3.6f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[36] =
irr::video::S3DVertex(irr::core::vector3df(0.2f, 2.4f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[37] =
irr::video::S3DVertex(irr::core::vector3df(1.0f, 2.4f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[38] =
irr::video::S3DVertex(irr::core::vector3df(0.2f, 3.6f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[39] =
irr::video::S3DVertex(irr::core::vector3df(1.0f, 3.6f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
iBackLine[36] = 36;
iBackLine[37] = 37;
iBackLine[38] = 36;
...
...
@@ -57,10 +57,10 @@ Materials::Materials() {
iBackLine[42] = 38;
iBackLine[43] = 39;
//field0
vBackLine[40] =
S3DVertex(vector3df(0.2f, 1.1f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[41] =
S3DVertex(vector3df(1.0f, 1.1f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[42] =
S3DVertex(vector3df(0.2f, 2.3f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[43] =
S3DVertex(vector3df(1.0f, 2.3f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[40] =
irr::video::S3DVertex(irr::core::vector3df(0.2f, 1.1f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[41] =
irr::video::S3DVertex(irr::core::vector3df(1.0f, 1.1f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[42] =
irr::video::S3DVertex(irr::core::vector3df(0.2f, 2.3f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[43] =
irr::video::S3DVertex(irr::core::vector3df(1.0f, 2.3f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
iBackLine[44] = 40;
iBackLine[45] = 41;
iBackLine[46] = 40;
...
...
@@ -70,10 +70,10 @@ Materials::Materials() {
iBackLine[50] = 42;
iBackLine[51] = 43;
//deck0
vBackLine[44] =
S3DVertex(vector3df(6.9f, 2.4f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[45] =
S3DVertex(vector3df(7.7f, 2.4f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[46] =
S3DVertex(vector3df(6.9f, 3.6f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[47] =
S3DVertex(vector3df(7.7f, 3.6f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[44] =
irr::video::S3DVertex(irr::core::vector3df(6.9f, 2.4f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[45] =
irr::video::S3DVertex(irr::core::vector3df(7.7f, 2.4f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[46] =
irr::video::S3DVertex(irr::core::vector3df(6.9f, 3.6f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[47] =
irr::video::S3DVertex(irr::core::vector3df(7.7f, 3.6f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
iBackLine[52] = 44;
iBackLine[53] = 45;
iBackLine[54] = 44;
...
...
@@ -83,10 +83,10 @@ Materials::Materials() {
iBackLine[58] = 46;
iBackLine[59] = 47;
//grave0
vBackLine[48] =
S3DVertex(vector3df(6.9f, 1.1f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[49] =
S3DVertex(vector3df(7.7f, 1.1f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[50] =
S3DVertex(vector3df(6.9f, 2.3f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[51] =
S3DVertex(vector3df(7.7f, 2.3f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[48] =
irr::video::S3DVertex(irr::core::vector3df(6.9f, 1.1f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[49] =
irr::video::S3DVertex(irr::core::vector3df(7.7f, 1.1f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[50] =
irr::video::S3DVertex(irr::core::vector3df(6.9f, 2.3f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[51] =
irr::video::S3DVertex(irr::core::vector3df(7.7f, 2.3f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
iBackLine[60] = 48;
iBackLine[61] = 49;
iBackLine[62] = 48;
...
...
@@ -96,10 +96,10 @@ Materials::Materials() {
iBackLine[66] = 50;
iBackLine[67] = 51;
//remove0
vBackLine[52] =
S3DVertex(vector3df(6.9f, -0.2f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[53] =
S3DVertex(vector3df(7.7f, -0.2f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[54] =
S3DVertex(vector3df(6.9f, 1.0f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[55] =
S3DVertex(vector3df(7.7f, 1.0f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[52] =
irr::video::S3DVertex(irr::core::vector3df(6.9f, -0.2f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[53] =
irr::video::S3DVertex(irr::core::vector3df(7.7f, -0.2f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[54] =
irr::video::S3DVertex(irr::core::vector3df(6.9f, 1.0f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[55] =
irr::video::S3DVertex(irr::core::vector3df(7.7f, 1.0f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
iBackLine[68] = 52;
iBackLine[69] = 53;
iBackLine[70] = 52;
...
...
@@ -109,10 +109,10 @@ Materials::Materials() {
iBackLine[74] = 54;
iBackLine[75] = 55;
//extra1
vBackLine[56] =
S3DVertex(vector3df(6.9f, -2.4f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[57] =
S3DVertex(vector3df(7.7f, -2.4f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[58] =
S3DVertex(vector3df(6.9f, -3.6f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[59] =
S3DVertex(vector3df(7.7f, -3.6f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[56] =
irr::video::S3DVertex(irr::core::vector3df(6.9f, -2.4f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[57] =
irr::video::S3DVertex(irr::core::vector3df(7.7f, -2.4f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[58] =
irr::video::S3DVertex(irr::core::vector3df(6.9f, -3.6f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[59] =
irr::video::S3DVertex(irr::core::vector3df(7.7f, -3.6f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
iBackLine[76] = 56;
iBackLine[77] = 57;
iBackLine[78] = 56;
...
...
@@ -122,10 +122,10 @@ Materials::Materials() {
iBackLine[82] = 58;
iBackLine[83] = 59;
//field1
vBackLine[60] =
S3DVertex(vector3df(6.9f, -1.1f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[61] =
S3DVertex(vector3df(7.7f, -1.1f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[62] =
S3DVertex(vector3df(6.9f, -2.3f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[63] =
S3DVertex(vector3df(7.7f, -2.3f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[60] =
irr::video::S3DVertex(irr::core::vector3df(6.9f, -1.1f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[61] =
irr::video::S3DVertex(irr::core::vector3df(7.7f, -1.1f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[62] =
irr::video::S3DVertex(irr::core::vector3df(6.9f, -2.3f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[63] =
irr::video::S3DVertex(irr::core::vector3df(7.7f, -2.3f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
iBackLine[84] = 60;
iBackLine[85] = 61;
iBackLine[86] = 60;
...
...
@@ -135,10 +135,10 @@ Materials::Materials() {
iBackLine[90] = 62;
iBackLine[91] = 63;
//deck1
vBackLine[64] =
S3DVertex(vector3df(0.2f, -2.4f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[65] =
S3DVertex(vector3df(1.0f, -2.4f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[66] =
S3DVertex(vector3df(0.2f, -3.6f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[67] =
S3DVertex(vector3df(1.0f, -3.6f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[64] =
irr::video::S3DVertex(irr::core::vector3df(0.2f, -2.4f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[65] =
irr::video::S3DVertex(irr::core::vector3df(1.0f, -2.4f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[66] =
irr::video::S3DVertex(irr::core::vector3df(0.2f, -3.6f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[67] =
irr::video::S3DVertex(irr::core::vector3df(1.0f, -3.6f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
iBackLine[92] = 64;
iBackLine[93] = 65;
iBackLine[94] = 64;
...
...
@@ -148,10 +148,10 @@ Materials::Materials() {
iBackLine[98] = 66;
iBackLine[99] = 67;
//grave1
vBackLine[68] =
S3DVertex(vector3df(0.2f, -1.1f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[69] =
S3DVertex(vector3df(1.0f, -1.1f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[70] =
S3DVertex(vector3df(0.2f, -2.3f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[71] =
S3DVertex(vector3df(1.0f, -2.3f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[68] =
irr::video::S3DVertex(irr::core::vector3df(0.2f, -1.1f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[69] =
irr::video::S3DVertex(irr::core::vector3df(1.0f, -1.1f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[70] =
irr::video::S3DVertex(irr::core::vector3df(0.2f, -2.3f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[71] =
irr::video::S3DVertex(irr::core::vector3df(1.0f, -2.3f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
iBackLine[100] = 68;
iBackLine[101] = 69;
iBackLine[102] = 68;
...
...
@@ -161,10 +161,10 @@ Materials::Materials() {
iBackLine[106] = 70;
iBackLine[107] = 71;
//remove1
vBackLine[72] =
S3DVertex(vector3df(0.2f, 0.2f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[73] =
S3DVertex(vector3df(1.0f, 0.2f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[74] =
S3DVertex(vector3df(0.2f, -1.0f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[75] =
S3DVertex(vector3df(1.0f, -1.0f, 0.0f), vector3df(0, 0, 1), SColor(255, 255, 255, 255),
vector2df(0, 0));
vBackLine[72] =
irr::video::S3DVertex(irr::core::vector3df(0.2f, 0.2f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[73] =
irr::video::S3DVertex(irr::core::vector3df(1.0f, 0.2f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[74] =
irr::video::S3DVertex(irr::core::vector3df(0.2f, -1.0f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
vBackLine[75] =
irr::video::S3DVertex(irr::core::vector3df(1.0f, -1.0f, 0.0f), irr::core::vector3df(0, 0, 1), irr::video::SColor(255, 255, 255, 255), irr::core::
vector2df(0, 0));
iBackLine[108] = 72;
iBackLine[109] = 73;
iBackLine[110] = 72;
...
...
@@ -237,10 +237,10 @@ Materials::Materials() {
SetS3DVertex
(
vFieldSzone
[
1
][
7
][
1
],
0.0
f
,
-
0.1
f
,
-
0.8
f
,
-
1.3
f
,
0
,
1
,
0
,
0
,
0
,
0
);
//conti_act
vFieldContiAct
[
0
]
=
vector3df
(
3.5
f
,
-
0.6
f
,
0.0
f
);
vFieldContiAct
[
1
]
=
vector3df
(
4.4
f
,
-
0.6
f
,
0.0
f
);
vFieldContiAct
[
2
]
=
vector3df
(
3.5
f
,
0.6
f
,
0.0
f
);
vFieldContiAct
[
3
]
=
vector3df
(
4.4
f
,
0.6
f
,
0.0
f
);
vFieldContiAct
[
0
]
=
irr
::
core
::
vector3df
(
3.5
f
,
-
0.6
f
,
0.0
f
);
vFieldContiAct
[
1
]
=
irr
::
core
::
vector3df
(
4.4
f
,
-
0.6
f
,
0.0
f
);
vFieldContiAct
[
2
]
=
irr
::
core
::
vector3df
(
3.5
f
,
0.6
f
,
0.0
f
);
vFieldContiAct
[
3
]
=
irr
::
core
::
vector3df
(
4.4
f
,
0.6
f
,
0.0
f
);
for
(
int
i
=
0
;
i
<
40
;
++
i
)
...
...
@@ -250,7 +250,7 @@ Materials::Materials() {
mCard
.
DiffuseColor
=
0xff000000
;
mCard
.
ColorMaterial
=
irr
::
video
::
ECM_NONE
;
mCard
.
MaterialType
=
irr
::
video
::
EMT_ONETEXTURE_BLEND
;
mCard
.
MaterialTypeParam
=
pack_textureBlendFunc
(
EBF_SRC_ALPHA
,
EBF_ONE_MINUS_SRC_ALPHA
,
EMFN_MODULATE_1X
,
EAS_VERTEX_COLOR
);
mCard
.
MaterialTypeParam
=
pack_textureBlendFunc
(
irr
::
video
::
EBF_SRC_ALPHA
,
irr
::
video
::
EBF_ONE_MINUS_SRC_ALPHA
,
irr
::
video
::
EMFN_MODULATE_1X
,
irr
::
video
::
EAS_VERTEX_COLOR
);
mTexture
.
AmbientColor
=
0xffffffff
;
mTexture
.
DiffuseColor
=
0xff000000
;
mTexture
.
ColorMaterial
=
irr
::
video
::
ECM_NONE
;
...
...
@@ -258,15 +258,15 @@ Materials::Materials() {
mBackLine
.
ColorMaterial
=
irr
::
video
::
ECM_NONE
;
mBackLine
.
AmbientColor
=
0xffffffff
;
mBackLine
.
DiffuseColor
=
0xc0000000
;
mBackLine
.
AntiAliasing
=
EAAM_FULL_BASIC
;
mBackLine
.
AntiAliasing
=
irr
::
video
::
EAAM_FULL_BASIC
;
mBackLine
.
MaterialType
=
irr
::
video
::
EMT_ONETEXTURE_BLEND
;
mBackLine
.
MaterialTypeParam
=
pack_textureBlendFunc
(
EBF_SRC_ALPHA
,
EBF_ONE_MINUS_SRC_ALPHA
,
EMFN_MODULATE_1X
,
EAS_VERTEX_COLOR
);
mBackLine
.
MaterialTypeParam
=
pack_textureBlendFunc
(
irr
::
video
::
EBF_SRC_ALPHA
,
irr
::
video
::
EBF_ONE_MINUS_SRC_ALPHA
,
irr
::
video
::
EMFN_MODULATE_1X
,
irr
::
video
::
EAS_VERTEX_COLOR
);
mBackLine
.
Thickness
=
2
;
mSelField
.
ColorMaterial
=
irr
::
video
::
ECM_NONE
;
mSelField
.
AmbientColor
=
0xffffffff
;
mSelField
.
DiffuseColor
=
0xff000000
;
mSelField
.
MaterialType
=
irr
::
video
::
EMT_ONETEXTURE_BLEND
;
mSelField
.
MaterialTypeParam
=
pack_textureBlendFunc
(
EBF_SRC_ALPHA
,
EBF_ONE_MINUS_SRC_ALPHA
,
EMFN_MODULATE_1X
,
EAS_VERTEX_COLOR
);
mSelField
.
MaterialTypeParam
=
pack_textureBlendFunc
(
irr
::
video
::
EBF_SRC_ALPHA
,
irr
::
video
::
EBF_ONE_MINUS_SRC_ALPHA
,
irr
::
video
::
EMFN_MODULATE_1X
,
irr
::
video
::
EAS_VERTEX_COLOR
);
mOutLine
.
ColorMaterial
=
irr
::
video
::
ECM_AMBIENT
;
mOutLine
.
DiffuseColor
=
0xff000000
;
mOutLine
.
Thickness
=
2
;
...
...
@@ -274,15 +274,15 @@ Materials::Materials() {
mTRTexture
.
AmbientColor
=
0xffffff00
;
mATK
.
ColorMaterial
=
irr
::
video
::
ECM_AMBIENT
;
mATK
.
DiffuseColor
=
0x80000000
;
mATK
.
setFlag
(
EMF_BACK_FACE_CULLING
,
FALSE
);
mATK
.
setFlag
(
irr
::
video
::
EMF_BACK_FACE_CULLING
,
false
);
mATK
.
MaterialType
=
irr
::
video
::
EMT_ONETEXTURE_BLEND
;
mATK
.
MaterialTypeParam
=
pack_textureBlendFunc
(
EBF_SRC_ALPHA
,
EBF_ONE_MINUS_SRC_ALPHA
,
EMFN_MODULATE_1X
,
EAS_VERTEX_COLOR
);
mATK
.
MaterialTypeParam
=
pack_textureBlendFunc
(
irr
::
video
::
EBF_SRC_ALPHA
,
irr
::
video
::
EBF_ONE_MINUS_SRC_ALPHA
,
irr
::
video
::
EMFN_MODULATE_1X
,
irr
::
video
::
EAS_VERTEX_COLOR
);
}
void
Materials
::
GenArrow
(
float
y
)
{
float
ay
=
1.0
f
;
for
(
int
i
=
0
;
i
<
19
;
++
i
)
{
vArrow
[
i
*
2
]
=
S3DVertex
(
vector3df
(
0.1
f
,
ay
*
y
,
-
2.0
f
*
(
ay
*
ay
-
1.0
f
)),
vector3df
(
0
,
ay
*
y
,
1
),
0xc000ff00
,
vector2df
(
0
,
0
));
vArrow
[
i
*
2
+
1
]
=
S3DVertex
(
vector3df
(
-
0.1
f
,
ay
*
y
,
-
2.0
f
*
(
ay
*
ay
-
1.0
f
)),
vector3df
(
0
,
ay
*
y
,
1
),
0xc000ff00
,
vector2df
(
0
,
0
));
vArrow
[
i
*
2
]
=
irr
::
video
::
S3DVertex
(
irr
::
core
::
vector3df
(
0.1
f
,
ay
*
y
,
-
2.0
f
*
(
ay
*
ay
-
1.0
f
)),
irr
::
core
::
vector3df
(
0
,
ay
*
y
,
1
),
0xc000ff00
,
irr
::
core
::
vector2df
(
0
,
0
));
vArrow
[
i
*
2
+
1
]
=
irr
::
video
::
S3DVertex
(
irr
::
core
::
vector3df
(
-
0.1
f
,
ay
*
y
,
-
2.0
f
*
(
ay
*
ay
-
1.0
f
)),
irr
::
core
::
vector3df
(
0
,
ay
*
y
,
1
),
0xc000ff00
,
irr
::
core
::
vector2df
(
0
,
0
));
ay
-=
0.1
f
;
}
vArrow
[
36
].
Pos
.
X
=
0.2
f
;
...
...
@@ -291,7 +291,7 @@ void Materials::GenArrow(float y) {
vArrow
[
37
].
Pos
.
X
=
-
0.2
f
;
vArrow
[
37
].
Pos
.
Y
=
vArrow
[
35
].
Pos
.
Y
-
0.01
f
;
vArrow
[
37
].
Pos
.
Z
=
vArrow
[
35
].
Pos
.
Z
-
0.01
f
;
vArrow
[
38
]
=
S3DVertex
(
vector3df
(
0.0
f
,
-
1.0
f
*
y
,
0.0
f
),
vector3df
(
0.0
f
,
-
1.0
f
,
-
1.0
f
),
0xc0ffffff
,
vector2df
(
0
,
0
));
vArrow
[
38
]
=
irr
::
video
::
S3DVertex
(
irr
::
core
::
vector3df
(
0.0
f
,
-
1.0
f
*
y
,
0.0
f
),
irr
::
core
::
vector3df
(
0.0
f
,
-
1.0
f
,
-
1.0
f
),
0xc0ffffff
,
irr
::
core
::
vector2df
(
0
,
0
));
vArrow
[
39
]
=
vArrow
[
38
];
}
...
...
gframe/materials.h
View file @
c7d6b2a5
#include "config.h"
#ifndef MATERIALS_H
#define MATERIALS_H
#include <irrlicht.h>
namespace
ygo
{
...
...
@@ -7,31 +10,31 @@ public:
Materials
();
void
GenArrow
(
float
y
);
S3DVertex
vCardFront
[
4
];
S3DVertex
vCardOutline
[
4
];
S3DVertex
vCardOutliner
[
4
];
S3DVertex
vCardBack
[
4
];
S3DVertex
vSymbol
[
4
];
S3DVertex
vNegate
[
4
];
S3DVertex
vChainNum
[
4
];
S3DVertex
vActivate
[
4
];
S3DVertex
vField
[
4
];
S3DVertex
vFieldSpell
[
4
];
S3DVertex
vFieldSpell1
[
4
];
S3DVertex
vFieldSpell2
[
4
];
//S3DVertex vBackLine[76];
S3DVertex
vFieldDeck
[
2
][
4
];
S3DVertex
vFieldGrave
[
2
][
2
][
4
];
//[player][rule], rule = 0: dule_rule <= 3, 1: dule_rule >= 4
S3DVertex
vFieldExtra
[
2
][
4
];
S3DVertex
vFieldRemove
[
2
][
2
][
4
];
//[player][rule]
S3DVertex
vFieldMzone
[
2
][
7
][
4
];
//[player][sequence]
S3DVertex
vFieldSzone
[
2
][
8
][
2
][
4
];
//[player][sequence][rule]
irr
::
video
::
S3DVertex
vCardFront
[
4
];
irr
::
video
::
S3DVertex
vCardOutline
[
4
];
irr
::
video
::
S3DVertex
vCardOutliner
[
4
];
irr
::
video
::
S3DVertex
vCardBack
[
4
];
irr
::
video
::
S3DVertex
vSymbol
[
4
];
irr
::
video
::
S3DVertex
vNegate
[
4
];
irr
::
video
::
S3DVertex
vChainNum
[
4
];
irr
::
video
::
S3DVertex
vActivate
[
4
];
irr
::
video
::
S3DVertex
vField
[
4
];
irr
::
video
::
S3DVertex
vFieldSpell
[
4
];
irr
::
video
::
S3DVertex
vFieldSpell1
[
4
];
irr
::
video
::
S3DVertex
vFieldSpell2
[
4
];
//
irr::video::
S3DVertex vBackLine[76];
irr
::
video
::
S3DVertex
vFieldDeck
[
2
][
4
];
irr
::
video
::
S3DVertex
vFieldGrave
[
2
][
2
][
4
];
//[player][rule], rule = 0: dule_rule <= 3, 1: dule_rule >= 4
irr
::
video
::
S3DVertex
vFieldExtra
[
2
][
4
];
irr
::
video
::
S3DVertex
vFieldRemove
[
2
][
2
][
4
];
//[player][rule]
irr
::
video
::
S3DVertex
vFieldMzone
[
2
][
7
][
4
];
//[player][sequence]
irr
::
video
::
S3DVertex
vFieldSzone
[
2
][
8
][
2
][
4
];
//[player][sequence][rule]
irr
::
core
::
vector3df
vFieldContiAct
[
4
];
S3DVertex
vArrow
[
40
];
SColor
c2d
[
4
];
u16
iRectangle
[
6
];
//u16 iBackLine[116];
u16
iArrow
[
40
];
irr
::
video
::
S3DVertex
vArrow
[
40
];
irr
::
video
::
SColor
c2d
[
4
];
irr
::
u16
iRectangle
[
6
];
//
irr::
u16 iBackLine[116];
irr
::
u16
iArrow
[
40
];
irr
::
video
::
SMaterial
mCard
;
irr
::
video
::
SMaterial
mTexture
;
irr
::
video
::
SMaterial
mBackLine
;
...
...
@@ -44,3 +47,5 @@ public:
extern
Materials
matManager
;
}
#endif //MATERIALS_H
gframe/menu_handler.cpp
View file @
c7d6b2a5
...
...
@@ -33,7 +33,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
switch
(
event
.
EventType
)
{
case
irr
:
:
EET_GUI_EVENT
:
{
irr
::
gui
::
IGUIElement
*
caller
=
event
.
GUIEvent
.
Caller
;
s32
id
=
caller
->
getID
();
irr
::
s32
id
=
caller
->
getID
();
if
(
mainGame
->
wQuery
->
isVisible
()
&&
id
!=
BUTTON_YES
&&
id
!=
BUTTON_NO
)
{
mainGame
->
wQuery
->
getParent
()
->
bringToFront
(
mainGame
->
wQuery
);
break
;
...
...
@@ -400,7 +400,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
char
arg3
[
8
];
std
::
snprintf
(
arg3
,
sizeof
arg3
,
"%d"
,
mainGame
->
gameConf
.
serverport
);
execl
(
"./bot"
,
"bot"
,
arg1
,
arg2
,
arg3
,
nullptr
);
exit
(
0
);
std
::
exit
(
0
);
}
else
{
if
(
!
NetServer
::
StartServer
(
mainGame
->
gameConf
.
serverport
))
{
soundManager
.
PlaySoundEffect
(
SOUND_INFO
);
...
...
gframe/menu_handler.h
View file @
c7d6b2a5
#ifndef MENU_HANDLER_H
#define MENU_HANDLER_H
#include
"config.h"
#include
<irrlicht.h>
namespace
ygo
{
class
MenuHandler
:
public
irr
::
IEventReceiver
{
public:
bool
OnEvent
(
const
irr
::
SEvent
&
event
)
override
;
s32
prev_operation
;
int
prev_sel
;
irr
::
s32
prev_operation
{
0
}
;
int
prev_sel
{
-
1
}
;
};
...
...
gframe/netserver.h
View file @
c7d6b2a5
...
...
@@ -41,7 +41,7 @@ public:
bufferevent_write
(
dp
->
bev
,
net_server_write
,
3
);
}
template
<
typename
ST
>
static
void
SendPacketToPlayer
(
DuelPlayer
*
dp
,
unsigned
char
proto
,
ST
&
st
)
{
static
void
SendPacketToPlayer
(
DuelPlayer
*
dp
,
unsigned
char
proto
,
const
ST
&
st
)
{
auto
p
=
net_server_write
;
if
(
sizeof
(
ST
)
>
MAX_DATA_SIZE
)
return
;
...
...
gframe/premake5.lua
View file @
c7d6b2a5
...
...
@@ -6,6 +6,8 @@ end
project
"YGOPro"
kind
"WindowedApp"
cdialect
"C11"
cppdialect
"C++14"
files
{
"*.cpp"
,
"*.h"
}
includedirs
{
"../ocgcore"
}
...
...
@@ -50,7 +52,7 @@ project "YGOPro"
libdirs
{
"$(DXSDK_DIR)Lib/x86"
}
links
{
"opengl32"
,
"ws2_32"
,
"winmm"
,
"gdi32"
,
"kernel32"
,
"user32"
,
"imm32"
}
filter
"not action:vs*"
buildoptions
{
"-
std=c++14"
,
"-
fno-rtti"
}
buildoptions
{
"-fno-rtti"
}
filter
"not system:windows"
links
{
"event_pthreads"
,
"dl"
,
"pthread"
}
filter
"system:macosx"
...
...
gframe/replay_mode.h
View file @
c7d6b2a5
#ifndef REPLAY_MODE_H
#define REPLAY_MODE_H
#include <
stdint.h
>
#include <
cstdint
>
#include <vector>
#include "replay.h"
...
...
gframe/single_mode.h
View file @
c7d6b2a5
#ifndef SINGLE_MODE_H
#define SINGLE_MODE_H
#include <
stdint.h
>
#include <
cstdint
>
#include <vector>
#include "replay.h"
...
...
gframe/spmemvfs/premake5.lua
View file @
c7d6b2a5
project
"cspmemvfs"
kind
"StaticLib"
cdialect
"C11"
files
{
"*.c"
,
"*.h"
}
if
BUILD_SQLITE
then
...
...
premake/event/premake5.lua
View file @
c7d6b2a5
project
"event"
kind
"StaticLib"
cdialect
"C11"
includedirs
{
"include"
,
"compat"
}
...
...
premake/freetype/premake5.lua
View file @
c7d6b2a5
project
"freetype"
kind
"StaticLib"
cdialect
"C11"
includedirs
{
"include"
}
defines
{
"FT2_BUILD_LIBRARY"
}
...
...
@@ -43,6 +44,10 @@ project "freetype"
"src/type42/type42.c"
,
"src/winfonts/winfnt.c"
}
if
os
.
isfile
(
"src/svg/svg.c"
)
then
files
{
"src/svg/svg.c"
}
end
filter
"system:windows"
files
{
"builds/windows/ftsystem.c"
,
"builds/windows/ftdebug.c"
}
...
...
premake/gframe/ygopro.rc
View file @
c7d6b2a5
1 ICON "ygopro.ico"
1 VERSIONINFO
FILEVERSION 1, 0, 3
5, 3
PRODUCTVERSION 1, 0, 3
5, 3
FILEVERSION 1, 0, 3
6, 1
PRODUCTVERSION 1, 0, 3
6, 1
FILEOS 0x4
FILETYPE 0x1
...
...
@@ -13,11 +13,11 @@ BLOCK "080404b0"
BEGIN
VALUE "FileDescription", "YGOPro"
VALUE "InternalName", "YGOPro"
VALUE "LegalCopyright", "Copyright (C) 202
2
Fluorohydride"
VALUE "LegalCopyright", "Copyright (C) 202
5
Fluorohydride"
VALUE "OriginalFilename", "YGOPro.exe"
VALUE "ProductName", "YGOPro"
VALUE "FileVersion", "1.03
5.3
"
VALUE "ProductVersion", "1.03
5.3
"
VALUE "FileVersion", "1.03
6.1
"
VALUE "ProductVersion", "1.03
6.1
"
END
END
BLOCK "VarFileInfo"
...
...
premake/irrlicht/premake5.lua
View file @
c7d6b2a5
project
"irrlicht"
kind
"StaticLib"
cdialect
"C11"
cppdialect
"C++14"
includedirs
{
"include"
,
"source/Irrlicht"
,
"source/Irrlicht/jpeglib"
,
"source/Irrlicht/libpng"
,
"source/Irrlicht/zlib"
}
...
...
premake/lua/premake5.lua
View file @
c7d6b2a5
project
"lua"
kind
"StaticLib"
cdialect
"C11"
cppdialect
"C++14"
files
{
"src/*.c"
,
"src/*.h"
,
"src/*.hpp"
}
removefiles
{
"src/lua.c"
,
"src/luac.c"
}
...
...
premake/sqlite3/premake5.lua
View file @
c7d6b2a5
project
"sqlite3"
kind
"StaticLib"
cdialect
"C11"
files
{
"sqlite3.c"
,
"sqlite3.h"
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment