mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-27 14:37:16 +00:00
symmetric texture editing
This commit is contained in:
parent
5a2ae1a865
commit
dd108cde6b
1
hyper.h
1
hyper.h
@ -2400,6 +2400,7 @@ namespace texture {
|
|||||||
|
|
||||||
void undoLock();
|
void undoLock();
|
||||||
void undo();
|
void undo();
|
||||||
|
extern bool texturesym;
|
||||||
|
|
||||||
extern cpatterntype cgroup;
|
extern cpatterntype cgroup;
|
||||||
}
|
}
|
||||||
|
@ -877,12 +877,15 @@ namespace mapeditor {
|
|||||||
|
|
||||||
usershape *us = NULL;
|
usershape *us = NULL;
|
||||||
|
|
||||||
|
bool intexture = false;
|
||||||
|
|
||||||
#if CAP_TEXTURE
|
#if CAP_TEXTURE
|
||||||
if(texture::tstate == texture::tsActive) {
|
if(texture::tstate == texture::tsActive) {
|
||||||
sg = 16;
|
sg = 16;
|
||||||
line1 = "texture";
|
line1 = "texture";
|
||||||
line2 = "";
|
line2 = "";
|
||||||
texture::update();
|
texture::update();
|
||||||
|
intexture = true;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if(0);
|
if(0);
|
||||||
@ -927,11 +930,14 @@ namespace mapeditor {
|
|||||||
|
|
||||||
// displayButton(8, 8+fs*9, XLAT("l = lands"), 'l', 0);
|
// displayButton(8, 8+fs*9, XLAT("l = lands"), 'l', 0);
|
||||||
displayfr(8, 8+fs, 2, vid.fsize, line1, 0xC0C0C0, 0);
|
displayfr(8, 8+fs, 2, vid.fsize, line1, 0xC0C0C0, 0);
|
||||||
if(sg >= 3)
|
|
||||||
displayButton(8, 8+fs*2, line2 + XLAT(" (r = complex tesselations)"), 'r', 0);
|
if(!intexture) {
|
||||||
else
|
if(sg >= 3)
|
||||||
displayfr(8, 8+fs*2, 2, vid.fsize, line2, 0xC0C0C0, 0);
|
displayButton(8, 8+fs*2, line2 + XLAT(" (r = complex tesselations)"), 'r', 0);
|
||||||
displayButton(8, 8+fs*3, XLAT("l = layers: %1", its(dslayer)), 'l', 0);
|
else
|
||||||
|
displayfr(8, 8+fs*2, 2, vid.fsize, line2, 0xC0C0C0, 0);
|
||||||
|
displayButton(8, 8+fs*3, XLAT("l = layers: %1", its(dslayer)), 'l', 0);
|
||||||
|
}
|
||||||
|
|
||||||
if(us && size(us->d[dslayer].list)) {
|
if(us && size(us->d[dslayer].list)) {
|
||||||
usershapelayer& ds(us->d[dslayer]);
|
usershapelayer& ds(us->d[dslayer]);
|
||||||
@ -961,9 +967,10 @@ namespace mapeditor {
|
|||||||
}
|
}
|
||||||
#if CAP_TEXTURE
|
#if CAP_TEXTURE
|
||||||
else if(texture::tstate == texture::tsActive) {
|
else if(texture::tstate == texture::tsActive) {
|
||||||
displayButton(8, 8+fs*7, XLAT("p = color"), 'p', 0);
|
displayButton(8, 8+fs*2, XLAT(texture::texturesym ? "0 = symmetry" : "0 = asymmetry"), '0', 0);
|
||||||
displayButton(8, 8+fs*8, XLAT("w = pen size: %1", fts4(texture::penwidth)), 'w', 0);
|
displayButton(8, 8+fs*3, XLAT("p = color"), 'p', 0);
|
||||||
displayButton(8, 8+fs*9, XLAT("u = undo"), 'u', 0);
|
displayButton(8, 8+fs*4, XLAT("w = pen size: %1", fts4(texture::penwidth)), 'w', 0);
|
||||||
|
displayButton(8, 8+fs*5, XLAT("u = undo"), 'u', 0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else {
|
else {
|
||||||
@ -1367,12 +1374,15 @@ namespace mapeditor {
|
|||||||
|
|
||||||
#if CAP_TEXTURE
|
#if CAP_TEXTURE
|
||||||
if(texture::tstate == texture::tsActive) {
|
if(texture::tstate == texture::tsActive) {
|
||||||
if(uni == '-') {
|
if(uni == '-' && mousekey != 'g') {
|
||||||
if(!holdmouse) texture::undoLock();
|
if(!holdmouse) texture::undoLock();
|
||||||
texture::drawPixel(mouseover, mouseh, (texture::paint_color >> 8) | ((texture::paint_color & 0xFF) << 24));
|
texture::drawPixel(mouseover, mouseh, (texture::paint_color >> 8) | ((texture::paint_color & 0xFF) << 24));
|
||||||
holdmouse = true;
|
holdmouse = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(uni == '0')
|
||||||
|
texture::texturesym = !texture::texturesym;
|
||||||
|
|
||||||
if(uni == 'u') {
|
if(uni == 'u') {
|
||||||
texture::undo();
|
texture::undo();
|
||||||
}
|
}
|
||||||
@ -1521,8 +1531,11 @@ namespace mapeditor {
|
|||||||
if(c == lmouseover)
|
if(c == lmouseover)
|
||||||
textrans = inverse(V * applyPatterndir(mouseover, sio));
|
textrans = inverse(V * applyPatterndir(mouseover, sio));
|
||||||
transmatrix mh = textrans * rgpushxto0(mouseh);
|
transmatrix mh = textrans * rgpushxto0(mouseh);
|
||||||
|
for(int j=0; j<=texture::texturesym; j++)
|
||||||
for(int i=0; i<c->type; i += sih.symmetries) {
|
for(int i=0; i<c->type; i += sih.symmetries) {
|
||||||
transmatrix M2 = V * spin(2*M_PI*i/c->type) * mh;
|
transmatrix M2 = V * spin(2*M_PI*i/c->type);
|
||||||
|
if(j) M2 = M2 * Mirror;
|
||||||
|
M2 = M2 * mh;
|
||||||
array<hyperpoint, 6> pts;
|
array<hyperpoint, 6> pts;
|
||||||
for(int j=0; j<6; j++)
|
for(int j=0; j<6; j++)
|
||||||
pts[j] = M2 * tC0(spin(M_PI*j/3) * xpush(texture::penwidth));
|
pts[j] = M2 * tC0(spin(M_PI*j/3) * xpush(texture::penwidth));
|
||||||
|
@ -1045,6 +1045,8 @@ void fillcircle(hyperpoint h, int col) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool texturesym = false;
|
||||||
|
|
||||||
void drawPixel(cell *c, hyperpoint h, int col) {
|
void drawPixel(cell *c, hyperpoint h, int col) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -1054,6 +1056,8 @@ void drawPixel(cell *c, hyperpoint h, int col) {
|
|||||||
auto& tinf = texture_map[si.id];
|
auto& tinf = texture_map[si.id];
|
||||||
for(auto& M2: tinf.matrices) for(int i = 0; i<c->type; i += si.symmetries) {
|
for(auto& M2: tinf.matrices) for(int i = 0; i<c->type; i += si.symmetries) {
|
||||||
fillcircle(M2 * spin(2 * M_PI * i / c->type) * h, col);
|
fillcircle(M2 * spin(2 * M_PI * i / c->type) * h, col);
|
||||||
|
if(texturesym)
|
||||||
|
fillcircle(M2 * spin(2 * M_PI * i / c->type) * Mirror * h, col);
|
||||||
lastupdate = ticks;
|
lastupdate = ticks;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user