107 lines
3.1 KiB
Plaintext
107 lines
3.1 KiB
Plaintext
|
import "scaling.asy" as scaling;
|
||
|
import "puppets.asy" as puppets_suit;
|
||
|
import "bread.asy" as bread_suit;
|
||
|
import "chairs.asy" as chairs_suit;
|
||
|
import "blades.asy" as blades_suit;
|
||
|
import "wheels.asy" as wheels_suit;
|
||
|
import "numerals.asy" as numerals_paths;
|
||
|
|
||
|
real corner_radius = width/10;
|
||
|
|
||
|
path corner = arc(((width/2 - corner_radius), (height/2 - corner_radius)), corner_radius, 0, 90);
|
||
|
|
||
|
path card = corner--reverse(reflect((0,0), (0,1))*corner)--rotate(180)*corner--reverse(reflect((0,0), (1,0))*corner)--cycle;
|
||
|
|
||
|
real scpx = 0.2;
|
||
|
real scpy = 0.35;
|
||
|
|
||
|
pair placements[][] = {
|
||
|
// 0
|
||
|
{},
|
||
|
|
||
|
// 1
|
||
|
{ (0,0) },
|
||
|
|
||
|
// 2
|
||
|
{ (0,height*scpy), (0,-height*scpy) },
|
||
|
|
||
|
// 3
|
||
|
{ (0,0), (0,height*scpy), (0,-height*scpy) },
|
||
|
|
||
|
// 4
|
||
|
{ (width*scpx,height*scpy), (width*scpx,-height*scpy), (-width*scpx,height*scpy), (-width*scpx,-height*scpy) },
|
||
|
|
||
|
// 5
|
||
|
{ (0,0), (width*scpx,height*scpy), (width*scpx,-height*scpy), (-width*scpx,height*scpy), (-width*scpx,-height*scpy) },
|
||
|
|
||
|
// 6
|
||
|
{ (width*scpx,0), (-width*scpx,0), (width*scpx,height*scpy), (width*scpx,-height*scpy), (-width*scpx,height*scpy), (-width*scpx,-height*scpy) },
|
||
|
|
||
|
// The four face cards
|
||
|
{}, {}, {}, {},
|
||
|
|
||
|
/* Forgot the deck doesn't have numbers past 6 lol
|
||
|
// 7
|
||
|
{ (0,-height*scpy/2), (width*scpx,0), (-width*scpx,0), (width*scpx,height*scpy), (width*scpx,-height*scpy), (-width*scpx,height*scpy), (-width*scpx,-height*scpy) },
|
||
|
|
||
|
// 8
|
||
|
{ (0, height*scpy/2), (0,-height*scpy/2), (width*scpx,0), (-width*scpx,0), (width*scpx,height*scpy), (width*scpx,-height*scpy), (-width*scpx,height*scpy), (-width*scpx,-height*scpy) },
|
||
|
|
||
|
// 9
|
||
|
{ (0,0), (width*scpx,height*scpy), (width*scpx,-height*scpy), (-width*scpx,height*scpy), (-width*scpx,-height*scpy), (width*scpx,height*scpy/3), (width*scpx,-height*scpy/3), (-width*scpx,height*scpy/3), (-width*scpx, -height*scpy/3) },
|
||
|
*/
|
||
|
};
|
||
|
|
||
|
real scale_factor = 0.15;
|
||
|
real one_scale_factor = 0.3;
|
||
|
|
||
|
real numeral_scale_factor = 0.15;
|
||
|
pair numeral_pos = (-width*0.39, height*0.37);
|
||
|
real indicator_scale_factor = 0.1;
|
||
|
pair indicator_pos = (-width*0.39, height*0.22);
|
||
|
|
||
|
int PUPPETS = 0;
|
||
|
int BREAD = 1;
|
||
|
int CHAIRS = 2;
|
||
|
int BLADES = 3;
|
||
|
int WHEELS = 4;
|
||
|
int CARDS = 5;
|
||
|
|
||
|
path icons[][] = {
|
||
|
null,
|
||
|
bread,
|
||
|
null,
|
||
|
null,
|
||
|
wheel,
|
||
|
};
|
||
|
|
||
|
path[] recursive_card(int value, int suit, int depth=3, bool outermost=true) {
|
||
|
path result[];
|
||
|
if (!outermost) {
|
||
|
result.push(card);
|
||
|
}
|
||
|
path[] suit_icon;
|
||
|
if (suit == CARDS) {
|
||
|
if (depth == 0) { return result; }
|
||
|
suit_icon = recursive_card(value, suit, depth - 1, false);
|
||
|
} else {
|
||
|
suit_icon = icons[suit];
|
||
|
}
|
||
|
path[] indicator = shift(indicator_pos)*scale(indicator_scale_factor)*suit_icon;
|
||
|
path[] numeral = shift(numeral_pos)*scale(numeral_scale_factor)*numerals[value];
|
||
|
result = result^^indicator^^(rotate(180)*indicator)^^numeral^^(rotate(180)*numeral);
|
||
|
|
||
|
real current_scale_factor = scale_factor;
|
||
|
if (value == 1) {
|
||
|
current_scale_factor = one_scale_factor;
|
||
|
}
|
||
|
for(int i = 0; i < placements[value].length; ++i) {
|
||
|
result = result^^(shift(placements[value][i])*scale(current_scale_factor)*suit_icon);
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
filldraw(card, white, black);
|
||
|
fill(recursive_card(2, BREAD), evenodd+red);
|
||
|
|