Commit 080e39db authored by mercury233's avatar mercury233

add DrawSelField

parent 4bcf5d73
......@@ -240,6 +240,15 @@ 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)) {
#ifdef _IRR_ANDROID_PLATFORM_
if (dField.hovered_location == LOCATION_MZONE) {
ClientCard* pcard = mainGame->dField.mzone[dField.hovered_controler][dField.hovered_sequence];
if(pcard && pcard->type & TYPE_LINK) {
DrawLinkedZones(pcard);
}
}
DrawSelField(dField.hovered_controler, dField.hovered_location, dField.hovered_sequence, imageManager.tSelField, false, true);
#else
S3DVertex *vertex = 0;
if (dField.hovered_location == LOCATION_DECK)
vertex = matManager.vFieldDeck[dField.hovered_controler];
......@@ -272,70 +281,77 @@ void Game::DrawBackGround() {
matManager.mSelField.DiffuseColor = selFieldAlpha << 24;
driver->setMaterial(matManager.mSelField);
driver->drawVertexPrimitiveList(v2, 4, matManager.iRectangle, 2);
#endif
}
}
void Game::DrawSelField(int player, int loc, size_t seq, irr::video::ITexture* texture, bool reverse, bool spin) {
static irr::core::vector3df act_rot(0, 0, 0);
irr::core::vector3df t;
irr::core::matrix4 im;
dField.GetChainLocation(player, loc, seq, &t);
t.Z = spin ? 0.002f : 0.001f;
im.setTranslation(t);
if (spin) {
act_rot.Z += 0.02f;
im.setRotationRadians(act_rot);
}
if (reverse) {
im.setRotationRadians(vector3df(0, 0, 3.1415926f));
}
driver->setTransform(irr::video::ETS_WORLD, im);
matManager.mTexture.setTexture(0, texture);
driver->setMaterial(matManager.mTexture);
driver->drawVertexPrimitiveList(matManager.vSelField, 4, matManager.iRectangle, 2);
}
void Game::DrawLinkedZones(ClientCard* pcard) {
int mark = pcard->link_marker;
S3DVertex *vertex = 0;
S3DVertex vSelField[4];
matManager.mSelField.AmbientColor = 0xff0261a2;
driver->setMaterial(matManager.mSelField);
if (dField.hovered_sequence<5) {
if (mark & LINK_MARKER_LEFT && dField.hovered_sequence>0) {
vertex = matManager.vFieldMzone[dField.hovered_controler][dField.hovered_sequence - 1];
SetS3DVertex(vSelField, vertex[0].Pos.X, vertex[1].Pos.Y, vertex[3].Pos.X, vertex[2].Pos.Y, 0.01f, 1, 0, 0, 0, 0);
driver->drawVertexPrimitiveList(vSelField, 4, matManager.iRectangle, 2);
}
if (mark & LINK_MARKER_RIGHT && dField.hovered_sequence<4) {
vertex = matManager.vFieldMzone[dField.hovered_controler][dField.hovered_sequence + 1];
SetS3DVertex(vSelField, vertex[0].Pos.X, vertex[1].Pos.Y, vertex[3].Pos.X, vertex[2].Pos.Y, 0.01f, 1, 0, 0, 0, 0);
driver->drawVertexPrimitiveList(vSelField, 4, matManager.iRectangle, 2);
//ClientCard* pcard2;
int player = dField.hovered_controler;
//int loc = dField.hovered_location;
size_t seq = dField.hovered_sequence;
bool reverse = player == 1;
if (seq < 5) {
if (mark & LINK_MARKER_LEFT && seq > 0) {
DrawSelField(player, LOCATION_MZONE, seq - 1, imageManager.tSelFieldLinkArrows[4], reverse);
//pcard2 = dField.mzone[player][seq - 1];
//if (pcard2 && pcard2->link_marker & LINK_MARKER_RIGHT)
// DrawSelField(player, LOCATION_MZONE, seq, imageManager.tSelFieldLinkArrows[6], reverse);
}
if (mark & LINK_MARKER_RIGHT && seq < 4) {
DrawSelField(player, LOCATION_MZONE, seq + 1, imageManager.tSelFieldLinkArrows[6], reverse);
//pcard2 = dField.mzone[player][seq + 1];
//if (pcard2 && pcard2->link_marker & LINK_MARKER_LEFT)
// DrawSelField(player, LOCATION_MZONE, seq, imageManager.tSelFieldLinkArrows[4], reverse);
}
if (dInfo.duel_rule >= 4) {
if ((mark & LINK_MARKER_TOP_LEFT && dField.hovered_sequence == 2) || (mark & LINK_MARKER_TOP && dField.hovered_sequence == 1) || (mark & LINK_MARKER_TOP_RIGHT && dField.hovered_sequence == 0)) {
vertex = matManager.vFieldMzone[dField.hovered_controler][5];
SetS3DVertex(vSelField, vertex[0].Pos.X, vertex[1].Pos.Y, vertex[3].Pos.X, vertex[2].Pos.Y, 0.01f, 1, 0, 0, 0, 0);
driver->drawVertexPrimitiveList(vSelField, 4, matManager.iRectangle, 2);
}
if ((mark & LINK_MARKER_TOP_LEFT && dField.hovered_sequence == 4) || (mark & LINK_MARKER_TOP && dField.hovered_sequence == 3) || (mark & LINK_MARKER_TOP_RIGHT && dField.hovered_sequence == 2)) {
vertex = matManager.vFieldMzone[dField.hovered_controler][6];
SetS3DVertex(vSelField, vertex[0].Pos.X, vertex[1].Pos.Y, vertex[3].Pos.X, vertex[2].Pos.Y, 0.01f, 1, 0, 0, 0, 0);
driver->drawVertexPrimitiveList(vSelField, 4, matManager.iRectangle, 2);
}
if (mark & LINK_MARKER_TOP_RIGHT && seq == 0)
DrawSelField(player, LOCATION_MZONE, 5, imageManager.tSelFieldLinkArrows[9], reverse);
if (mark & LINK_MARKER_TOP && seq == 1)
DrawSelField(player, LOCATION_MZONE, 5, imageManager.tSelFieldLinkArrows[8], reverse);
if (mark & LINK_MARKER_TOP_LEFT && seq == 2)
DrawSelField(player, LOCATION_MZONE, 5, imageManager.tSelFieldLinkArrows[7], reverse);
if (mark & LINK_MARKER_TOP_RIGHT && seq == 2)
DrawSelField(player, LOCATION_MZONE, 6, imageManager.tSelFieldLinkArrows[9], reverse);
if (mark & LINK_MARKER_TOP && seq == 3)
DrawSelField(player, LOCATION_MZONE, 6, imageManager.tSelFieldLinkArrows[8], reverse);
if (mark & LINK_MARKER_TOP_LEFT && seq == 4)
DrawSelField(player, LOCATION_MZONE, 6, imageManager.tSelFieldLinkArrows[7], reverse);
}
} else {
int swap = (dField.hovered_sequence == 5) ? 0 : 2;
if (mark & LINK_MARKER_BOTTOM_LEFT) {
vertex = matManager.vFieldMzone[dField.hovered_controler][0 + swap];
SetS3DVertex(vSelField, vertex[0].Pos.X, vertex[1].Pos.Y, vertex[3].Pos.X, vertex[2].Pos.Y, 0.01f, 1, 0, 0, 0, 0);
driver->drawVertexPrimitiveList(vSelField, 4, matManager.iRectangle, 2);
}
if (mark & LINK_MARKER_BOTTOM) {
vertex = matManager.vFieldMzone[dField.hovered_controler][1 + swap];
SetS3DVertex(vSelField, vertex[0].Pos.X, vertex[1].Pos.Y, vertex[3].Pos.X, vertex[2].Pos.Y, 0.01f, 1, 0, 0, 0, 0);
driver->drawVertexPrimitiveList(vSelField, 4, matManager.iRectangle, 2);
}
if (mark & LINK_MARKER_BOTTOM_RIGHT) {
vertex = matManager.vFieldMzone[dField.hovered_controler][2 + swap];
SetS3DVertex(vSelField, vertex[0].Pos.X, vertex[1].Pos.Y, vertex[3].Pos.X, vertex[2].Pos.Y, 0.01f, 1, 0, 0, 0, 0);
driver->drawVertexPrimitiveList(vSelField, 4, matManager.iRectangle, 2);
}
if (mark & LINK_MARKER_TOP_LEFT) {
vertex = matManager.vFieldMzone[1 - dField.hovered_controler][4 - swap];
SetS3DVertex(vSelField, vertex[0].Pos.X, vertex[1].Pos.Y, vertex[3].Pos.X, vertex[2].Pos.Y, 0.01f, 1, 0, 0, 0, 0);
driver->drawVertexPrimitiveList(vSelField, 4, matManager.iRectangle, 2);
}
if (mark & LINK_MARKER_TOP) {
vertex = matManager.vFieldMzone[1 - dField.hovered_controler][3 - swap];
SetS3DVertex(vSelField, vertex[0].Pos.X, vertex[1].Pos.Y, vertex[3].Pos.X, vertex[2].Pos.Y, 0.01f, 1, 0, 0, 0, 0);
driver->drawVertexPrimitiveList(vSelField, 4, matManager.iRectangle, 2);
}
if (mark & LINK_MARKER_TOP_RIGHT) {
vertex = matManager.vFieldMzone[1 - dField.hovered_controler][2 - swap];
SetS3DVertex(vSelField, vertex[0].Pos.X, vertex[1].Pos.Y, vertex[3].Pos.X, vertex[2].Pos.Y, 0.01f, 1, 0, 0, 0, 0);
driver->drawVertexPrimitiveList(vSelField, 4, matManager.iRectangle, 2);
}
if (mark & LINK_MARKER_BOTTOM_LEFT)
DrawSelField(player, LOCATION_MZONE, 0 + swap, imageManager.tSelFieldLinkArrows[1], reverse);
if (mark & LINK_MARKER_BOTTOM)
DrawSelField(player, LOCATION_MZONE, 1 + swap, imageManager.tSelFieldLinkArrows[2], reverse);
if (mark & LINK_MARKER_BOTTOM_RIGHT)
DrawSelField(player, LOCATION_MZONE, 2 + swap, imageManager.tSelFieldLinkArrows[3], reverse);
if (mark & LINK_MARKER_TOP_LEFT)
DrawSelField(1 - player, LOCATION_MZONE, 4 - swap, imageManager.tSelFieldLinkArrows[7], reverse);
if (mark & LINK_MARKER_TOP)
DrawSelField(1 - player, LOCATION_MZONE, 3 - swap, imageManager.tSelFieldLinkArrows[8], reverse);
if (mark & LINK_MARKER_TOP_RIGHT)
DrawSelField(1 - player, LOCATION_MZONE, 2 - swap, imageManager.tSelFieldLinkArrows[9], reverse);
}
}
......
......@@ -140,6 +140,7 @@ public:
void DrawSelectionLine(irr::video::S3DVertex* vec, bool strip, int width, float* cv);
void DrawSelectionLine(irr::gui::IGUIElement* element, int width, irr::video::SColor color);
void DrawBackGround();
void DrawSelField(int player, int loc, size_t seq, irr::video::ITexture* texture, bool reverse = false, bool spin = false);
void DrawLinkedZones(ClientCard* pcard);
void CheckMutual(ClientCard* pcard, int mark);
void DrawCards();
......
......@@ -17,6 +17,15 @@ bool ImageManager::Initial(const path dir) {
tTotalAtk = driver->getTexture((dir + path("/textures/totalAtk.png")).c_str());
tChain = driver->getTexture((dir + path("/textures/chain.png")).c_str());
tNegated = driver->getTexture((dir + path("/textures/negated.png")).c_str());
tSelField = driver->getTexture((dir + path("/textures/selfield.png")).c_str());
tSelFieldLinkArrows[1] = driver->getTexture((dir + path("/textures/link_marker_on_1.png")).c_str());
tSelFieldLinkArrows[2] = driver->getTexture((dir + path("/textures/link_marker_on_2.png")).c_str());
tSelFieldLinkArrows[3] = driver->getTexture((dir + path("/textures/link_marker_on_3.png")).c_str());
tSelFieldLinkArrows[4] = driver->getTexture((dir + path("/textures/link_marker_on_4.png")).c_str());
tSelFieldLinkArrows[6] = driver->getTexture((dir + path("/textures/link_marker_on_6.png")).c_str());
tSelFieldLinkArrows[7] = driver->getTexture((dir + path("/textures/link_marker_on_7.png")).c_str());
tSelFieldLinkArrows[8] = driver->getTexture((dir + path("/textures/link_marker_on_8.png")).c_str());
tSelFieldLinkArrows[9] = driver->getTexture((dir + path("/textures/link_marker_on_9.png")).c_str());
tNumber = driver->getTexture((dir + path("/textures/number.png")).c_str());
tLPBar = driver->getTexture((dir + path("/textures/lp2.png")).c_str());
tLPFrame = driver->getTexture((dir + path("/textures/lpf.png")).c_str());
......
......@@ -36,6 +36,8 @@ public:
irr::video::ITexture* tTotalAtk;
irr::video::ITexture* tNegated;
irr::video::ITexture* tChain;
irr::video::ITexture* tSelField;
irr::video::ITexture* tSelFieldLinkArrows[10];
irr::video::ITexture* tNumber;
irr::video::ITexture* tLPFrame;
irr::video::ITexture* tLPBar;
......
......@@ -29,6 +29,7 @@ Materials::Materials() {
SetS3DVertex(vTotalAtkop, 6.4f, -0.1f, 7.4f, 0.65f, 1, 1, 0, 0, 1, 1);
SetS3DVertex(vTotalAtkmeT, 2.5f, 0.95f, 3.5f, 1.65f, 1, 1, 0, 0, 1, 1);
SetS3DVertex(vTotalAtkopT, 4.45f, 0.4f, 5.45f, 1.1f, 1, 1, 0, 0, 1, 1);
SetS3DVertex(vSelField, -0.5f, -0.5f, 0.5f, 0.5f, 0, 1, 0, 0, 1, 1);
/*
//background grids
......
......@@ -24,6 +24,7 @@ public:
S3DVertex vFieldSpell[4];
S3DVertex vFieldSpell1[4];
S3DVertex vFieldSpell2[4];
S3DVertex vSelField[4];
//S3DVertex vBackLine[76];
S3DVertex vFieldDeck[2][4];
S3DVertex vFieldGrave[2][2][4];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment