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);