Commit 0804da5a authored by fallenstardust's avatar fallenstardust Committed by GitHub

Merge pull request #49 from mercury233/patch-DrawSelField

add DrawSelField
parents 78123f32 be450b26
...@@ -240,6 +240,15 @@ void Game::DrawBackGround() { ...@@ -240,6 +240,15 @@ void Game::DrawBackGround() {
if (dField.hovered_location != 0 && dField.hovered_location != 2 && dField.hovered_location != POSITION_HINT 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_MZONE && dField.hovered_sequence > 4)
&& !(dInfo.duel_rule >= 4 && dField.hovered_location == LOCATION_SZONE && dField.hovered_sequence > 5)) { && !(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; S3DVertex *vertex = 0;
if (dField.hovered_location == LOCATION_DECK) if (dField.hovered_location == LOCATION_DECK)
vertex = matManager.vFieldDeck[dField.hovered_controler]; vertex = matManager.vFieldDeck[dField.hovered_controler];
...@@ -272,70 +281,76 @@ void Game::DrawBackGround() { ...@@ -272,70 +281,76 @@ void Game::DrawBackGround() {
matManager.mSelField.DiffuseColor = selFieldAlpha << 24; matManager.mSelField.DiffuseColor = selFieldAlpha << 24;
driver->setMaterial(matManager.mSelField); driver->setMaterial(matManager.mSelField);
driver->drawVertexPrimitiveList(v2, 4, matManager.iRectangle, 2); 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) { void Game::DrawLinkedZones(ClientCard* pcard, ClientCard* fcard) {
int mark = pcard->link_marker; int mark = pcard->link_marker;
S3DVertex *vertex = 0; int player = pcard->controler;
S3DVertex vSelField[4]; int seq = pcard->sequence;
matManager.mSelField.AmbientColor = 0xff0261a2; bool reverse = player == 1;
driver->setMaterial(matManager.mSelField); ClientCard* pcard2;
if (dField.hovered_sequence<5) { if (seq < 5) {
if (mark & LINK_MARKER_LEFT && dField.hovered_sequence>0) { if (mark & LINK_MARKER_LEFT && seq > 0) {
vertex = matManager.vFieldMzone[dField.hovered_controler][dField.hovered_sequence - 1]; DrawSelField(player, LOCATION_MZONE, seq - 1, imageManager.tSelFieldLinkArrows[4], reverse);
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); //pcard2 = dField.mzone[player][seq - 1];
driver->drawVertexPrimitiveList(vSelField, 4, matManager.iRectangle, 2); //if (pcard2 && pcard2 != fcard && pcard2->link_marker & LINK_MARKER_RIGHT)
} // DrawLinkedZones(pcard2, pcard);
if (mark & LINK_MARKER_RIGHT && dField.hovered_sequence<4) { }
vertex = matManager.vFieldMzone[dField.hovered_controler][dField.hovered_sequence + 1]; if (mark & LINK_MARKER_RIGHT && seq < 4) {
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); DrawSelField(player, LOCATION_MZONE, seq + 1, imageManager.tSelFieldLinkArrows[6], reverse);
driver->drawVertexPrimitiveList(vSelField, 4, matManager.iRectangle, 2); //pcard2 = dField.mzone[player][seq + 1];
//if (pcard2 && pcard2 != fcard && pcard2->link_marker & LINK_MARKER_LEFT)
// DrawLinkedZones(pcard2, pcard);
} }
if (dInfo.duel_rule >= 4) { 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)) { if (mark & LINK_MARKER_TOP_RIGHT && seq == 0)
vertex = matManager.vFieldMzone[dField.hovered_controler][5]; DrawSelField(player, LOCATION_MZONE, 5, imageManager.tSelFieldLinkArrows[9], reverse);
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); if (mark & LINK_MARKER_TOP && seq == 1)
driver->drawVertexPrimitiveList(vSelField, 4, matManager.iRectangle, 2); DrawSelField(player, LOCATION_MZONE, 5, imageManager.tSelFieldLinkArrows[8], reverse);
} if (mark & LINK_MARKER_TOP_LEFT && seq == 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)) { DrawSelField(player, LOCATION_MZONE, 5, imageManager.tSelFieldLinkArrows[7], reverse);
vertex = matManager.vFieldMzone[dField.hovered_controler][6]; if (mark & LINK_MARKER_TOP_RIGHT && seq == 2)
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); DrawSelField(player, LOCATION_MZONE, 6, imageManager.tSelFieldLinkArrows[9], reverse);
driver->drawVertexPrimitiveList(vSelField, 4, matManager.iRectangle, 2); 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 { } else {
int swap = (dField.hovered_sequence == 5) ? 0 : 2; int swap = (dField.hovered_sequence == 5) ? 0 : 2;
if (mark & LINK_MARKER_BOTTOM_LEFT) { if (mark & LINK_MARKER_BOTTOM_LEFT)
vertex = matManager.vFieldMzone[dField.hovered_controler][0 + swap]; DrawSelField(player, LOCATION_MZONE, 0 + swap, imageManager.tSelFieldLinkArrows[1], reverse);
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); if (mark & LINK_MARKER_BOTTOM)
driver->drawVertexPrimitiveList(vSelField, 4, matManager.iRectangle, 2); DrawSelField(player, LOCATION_MZONE, 1 + swap, imageManager.tSelFieldLinkArrows[2], reverse);
} if (mark & LINK_MARKER_BOTTOM_RIGHT)
if (mark & LINK_MARKER_BOTTOM) { DrawSelField(player, LOCATION_MZONE, 2 + swap, imageManager.tSelFieldLinkArrows[3], reverse);
vertex = matManager.vFieldMzone[dField.hovered_controler][1 + swap]; if (mark & LINK_MARKER_TOP_LEFT)
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); DrawSelField(1 - player, LOCATION_MZONE, 4 - swap, imageManager.tSelFieldLinkArrows[7], reverse);
driver->drawVertexPrimitiveList(vSelField, 4, matManager.iRectangle, 2); if (mark & LINK_MARKER_TOP)
} DrawSelField(1 - player, LOCATION_MZONE, 3 - swap, imageManager.tSelFieldLinkArrows[8], reverse);
if (mark & LINK_MARKER_BOTTOM_RIGHT) { if (mark & LINK_MARKER_TOP_RIGHT)
vertex = matManager.vFieldMzone[dField.hovered_controler][2 + swap]; DrawSelField(1 - player, LOCATION_MZONE, 2 - swap, imageManager.tSelFieldLinkArrows[9], reverse);
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);
}
} }
} }
......
...@@ -140,7 +140,8 @@ public: ...@@ -140,7 +140,8 @@ public:
void DrawSelectionLine(irr::video::S3DVertex* vec, bool strip, int width, float* cv); 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 DrawSelectionLine(irr::gui::IGUIElement* element, int width, irr::video::SColor color);
void DrawBackGround(); void DrawBackGround();
void DrawLinkedZones(ClientCard* pcard); void DrawSelField(int player, int loc, size_t seq, irr::video::ITexture* texture, bool reverse = false, bool spin = false);
void DrawLinkedZones(ClientCard* pcard, ClientCard* fcard = 0);
void CheckMutual(ClientCard* pcard, int mark); void CheckMutual(ClientCard* pcard, int mark);
void DrawCards(); void DrawCards();
void DrawCard(ClientCard* pcard); void DrawCard(ClientCard* pcard);
......
...@@ -17,6 +17,15 @@ bool ImageManager::Initial(const path dir) { ...@@ -17,6 +17,15 @@ bool ImageManager::Initial(const path dir) {
tTotalAtk = driver->getTexture((dir + path("/textures/totalAtk.png")).c_str()); tTotalAtk = driver->getTexture((dir + path("/textures/totalAtk.png")).c_str());
tChain = driver->getTexture((dir + path("/textures/chain.png")).c_str()); tChain = driver->getTexture((dir + path("/textures/chain.png")).c_str());
tNegated = driver->getTexture((dir + path("/textures/negated.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()); tNumber = driver->getTexture((dir + path("/textures/number.png")).c_str());
tLPBar = driver->getTexture((dir + path("/textures/lp2.png")).c_str()); tLPBar = driver->getTexture((dir + path("/textures/lp2.png")).c_str());
tLPFrame = driver->getTexture((dir + path("/textures/lpf.png")).c_str()); tLPFrame = driver->getTexture((dir + path("/textures/lpf.png")).c_str());
......
...@@ -36,6 +36,8 @@ public: ...@@ -36,6 +36,8 @@ public:
irr::video::ITexture* tTotalAtk; irr::video::ITexture* tTotalAtk;
irr::video::ITexture* tNegated; irr::video::ITexture* tNegated;
irr::video::ITexture* tChain; irr::video::ITexture* tChain;
irr::video::ITexture* tSelField;
irr::video::ITexture* tSelFieldLinkArrows[10];
irr::video::ITexture* tNumber; irr::video::ITexture* tNumber;
irr::video::ITexture* tLPFrame; irr::video::ITexture* tLPFrame;
irr::video::ITexture* tLPBar; irr::video::ITexture* tLPBar;
......
...@@ -29,6 +29,7 @@ Materials::Materials() { ...@@ -29,6 +29,7 @@ Materials::Materials() {
SetS3DVertex(vTotalAtkop, 6.4f, -0.1f, 7.4f, 0.65f, 1, 1, 0, 0, 1, 1); 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(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(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 //background grids
......
...@@ -24,6 +24,7 @@ public: ...@@ -24,6 +24,7 @@ public:
S3DVertex vFieldSpell[4]; S3DVertex vFieldSpell[4];
S3DVertex vFieldSpell1[4]; S3DVertex vFieldSpell1[4];
S3DVertex vFieldSpell2[4]; S3DVertex vFieldSpell2[4];
S3DVertex vSelField[4];
//S3DVertex vBackLine[76]; //S3DVertex vBackLine[76];
S3DVertex vFieldDeck[2][4]; S3DVertex vFieldDeck[2][4];
S3DVertex vFieldGrave[2][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