From 16c98839c7250d996611f7a233cf034f42386b9d Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Thu, 20 Jun 2019 19:33:57 +0100 Subject: Extract imagery into a module --- scripts/toy.groovy | 93 +------------------------------------------ scripts/toy/imagery.groovy | 99 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 92 deletions(-) create mode 100644 scripts/toy/imagery.groovy diff --git a/scripts/toy.groovy b/scripts/toy.groovy index e037277..529f5e0 100644 --- a/scripts/toy.groovy +++ b/scripts/toy.groovy @@ -44,37 +44,6 @@ return new Object() { // Imagery final DRESSED = "dressed", TITS = "tits", PUSSY = "pussy", LINGERIE = "lingerie", TEASE = "tease", SIT = "sit", BOOTS = "boots", KNEEL = "kneel", STOOD = "stood", MEAN = "mean", CROP = "crop", ASS = "ass", SQUAT = "squat", SSSH = "sssh"; final nDRESSED = "!$DRESSED", nTITS = "!$TITS", nTEASE = "!$TEASE"; - final IMAGEDATA = { - return new File("$DATAFOLDER/images/toy") - .listFiles() - .findAll { d -> d.isDirectory(); } - .collectEntries { d -> [ - d.getName(), [ - domme: d.getName(), - sets: d.listFiles() - .findAll { s -> s.isDirectory(); } - .collect { s -> [ sub: s, f: new File(s.getPath() + "/tags")] } - .findAll { s -> s.f.canRead() } - .collectEntries { s -> [ - s.sub.getName(), [ - set: s.sub.getName(), - images: s.f - .readLines() - .collect { l -> - def fields = l.split(":"); - return [ - image: fields[0], - tags: fields[1] - .split(",") - .findAll { t -> !t.isEmpty() } - ]; - } - ] - ]} - ] - ] - }; - }(); def loadDomme = { domme, set = null -> final readDomme = { path -> if (!path) return [:]; @@ -96,67 +65,6 @@ return new Object() { Eval.me(s.text)(toy); }); }; - def selectImage = { domme, set, spec -> - def meets = { i -> - return spec.every({ s -> - return (s[0] == "!") ? i.tags.indexOf(s.drop(1)) == -1 : i.tags.indexOf(s) != -1; - }); - }; - def matches = IMAGEDATA[domme]; - if (!matches) return null; - matches = matches.sets[set]; - if (!matches) return null; - matches = matches - .images.findAll({ i -> meets(i) }); - if (matches.isEmpty()) return null; - return matches[getRandom(matches.size())]; - }; - def showImage = { spec -> - def outfit = loadString("toy.owner.outfit"); - def image = selectImage(OWNER, outfit, spec); - if (image) { - setImage("toy/$OWNER/$outfit/${image.image}.jpg"); - return image.tags; - } - else { - setImage(null); - return null; - } - }; - def showLounge = { - setImage("toy/$OWNER/lounge.jpg"); - }; - def selectImageSet = { domme, specs -> - def matches = IMAGEDATA[domme]; - if (!matches) return null; - matches = matches.sets.values().findAll({ s -> specs.every({ spec -> selectImage(domme, s.set, spec)})}); - return matches[getRandom(matches.size())]; - }; - def dress = { specs -> - def outfit = loadString("toy.owner.outfit"); - def outfitTime = loadInteger("toy.owner.outfitTime"); - if (outfitTime > getTime() - 7200) { // Recent, check - def prev = IMAGEDATA[OWNER]; - if (prev) { - prev = prev.sets[outfit]; - if (prev && specs.every({ spec -> selectImage(OWNER, prev.set, spec)})) { - DOMME = loadDomme(OWNER, outfit); - return outfit; - } - } - } - outfit = selectImageSet(OWNER, specs); - if (!outfit) { - showPopup("No outfit for $OWNER : $specs"); - save("toy.owner.outfit", null); - save("toy.owner.outfitTime", null); - DOMME = loadDomme(OWNER, outfit); - return; - } - save("toy.owner.outfit", outfit.set); - save("toy.owner.outfitTime", getTime()); - DOMME = loadDomme(OWNER, outfit.set); - }; // Utils int localTimeOffset() { @@ -1885,6 +1793,7 @@ return new Object() { /* * Resources * scripts/toy.groovy + * scripts/toy/imagery.groovy * scripts/toy/intro.groovy * scripts/toy/sleep.groovy * scripts/toy/social.groovy diff --git a/scripts/toy/imagery.groovy b/scripts/toy/imagery.groovy new file mode 100644 index 0000000..a0f1ddf --- /dev/null +++ b/scripts/toy/imagery.groovy @@ -0,0 +1,99 @@ +{ toy -> + final IMAGEDATA = { + return new File("${toy.DATAFOLDER}/images/toy") + .listFiles() + .findAll { d -> d.isDirectory(); } + .collectEntries { d -> [ + d.getName(), [ + domme: d.getName(), + sets: d.listFiles() + .findAll { s -> s.isDirectory(); } + .collect { s -> [ sub: s, f: new File(s.getPath() + "/tags")] } + .findAll { s -> s.f.canRead() } + .collectEntries { s -> [ + s.sub.getName(), [ + set: s.sub.getName(), + images: s.f + .readLines() + .collect { l -> + def fields = l.split(":"); + return [ + image: fields[0], + tags: fields[1] + .split(",") + .findAll { t -> !t.isEmpty() } + ]; + } + ] + ]} + ] + ] + }; + }(); + + toy.metaClass.selectImage { domme, set, spec -> + final meets = { i -> + return spec.every({ s -> + return (s[0] == "!") ? i.tags.indexOf(s.drop(1)) == -1 : i.tags.indexOf(s) != -1; + }); + }; + def matches = IMAGEDATA[domme]; + if (!matches) return null; + matches = matches.sets[set]; + if (!matches) return null; + matches = matches + .images.findAll({ i -> meets(i) }); + if (matches.isEmpty()) return null; + return matches[getRandom(matches.size())]; + }; + + toy.metaClass.showImage { spec -> + def outfit = loadString("toy.owner.outfit"); + def image = selectImage(OWNER, outfit, spec); + if (image) { + setImage("toy/$OWNER/$outfit/${image.image}.jpg"); + return image.tags; + } + else { + setImage(null); + return null; + } + }; + + toy.metaClass.showLounge { + setImage("toy/$OWNER/lounge.jpg"); + }; + + toy.metaClass.selectImageSet { domme, specs -> + def matches = IMAGEDATA[domme]; + if (!matches) return null; + matches = matches.sets.values().findAll({ s -> specs.every({ spec -> selectImage(domme, s.set, spec)})}); + return matches[getRandom(matches.size())]; + }; + + toy.metaClass.dress { specs -> + def outfit = loadString("toy.owner.outfit"); + def outfitTime = loadInteger("toy.owner.outfitTime"); + if (outfitTime > getTime() - 7200) { // Recent, check + def prev = IMAGEDATA[OWNER]; + if (prev) { + prev = prev.sets[outfit]; + if (prev && specs.every({ spec -> selectImage(OWNER, prev.set, spec)})) { + DOMME = loadDomme(OWNER, outfit); + return outfit; + } + } + } + outfit = selectImageSet(OWNER, specs); + if (!outfit) { + showPopup("No outfit for $OWNER : $specs"); + save("toy.owner.outfit", null); + save("toy.owner.outfitTime", null); + DOMME = loadDomme(OWNER, outfit); + return; + } + save("toy.owner.outfit", outfit.set); + save("toy.owner.outfitTime", getTime()); + DOMME = loadDomme(OWNER, outfit.set); + }; +} -- cgit v1.2.3