From 772917fde6964562382ad5e411fc206a400824c7 Mon Sep 17 00:00:00 2001 From: Matt Dunn-Rankin Date: Sat, 23 May 2020 11:48:53 -0700 Subject: [PATCH] add unknown and UC to valid pet poses --- .../getValidPetPoses.test.js.snap | Bin 6284 -> 9942 bytes src/server/getValidPetPoses.js | 34 ++++++++++-------- .../SpeciesColorPair.test.js.snap | 24 +++++++++++++ src/server/util.js | 29 ++++++++++++++- 4 files changed, 71 insertions(+), 16 deletions(-) diff --git a/src/server/__snapshots__/getValidPetPoses.test.js.snap b/src/server/__snapshots__/getValidPetPoses.test.js.snap index 351b19a755383be6f9191ab7c40027d489d08b64..60229d16e57d17da24855ea52d9fde1592e257cc 100644 GIT binary patch literal 9942 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 Kp6p+A`~L$W8Q)w0 diff --git a/src/server/getValidPetPoses.js b/src/server/getValidPetPoses.js index cda8586f..c1b97b73 100644 --- a/src/server/getValidPetPoses.js +++ b/src/server/getValidPetPoses.js @@ -1,6 +1,6 @@ import connectToDb from "./db"; -import { getEmotion, getGenderPresentation } from "./util"; +import { getPose } from "./util"; export default async function getValidPetPoses() { const db = await connectToDb(); @@ -17,15 +17,14 @@ export default async function getValidPetPoses() { const poseStrs = new Set(); for (const poseTuple of poseTuples) { - const { species_id, color_id, mood_id, female } = poseTuple; - const emotion = getEmotion(mood_id); - const genderPresentation = getGenderPresentation(female); - const poseStr = `${species_id}-${color_id}-${emotion}-${genderPresentation}`; + const { species_id, color_id, mood_id, female, unconverted } = poseTuple; + const pose = getPose(mood_id, female, unconverted); + const poseStr = `${species_id}-${color_id}-${pose}`; poseStrs.add(poseStr); } - function hasPose(speciesId, colorId, emotion, genderPresentation) { - const poseStr = `${speciesId}-${colorId}-${emotion}-${genderPresentation}`; + function hasPose(speciesId, colorId, pose) { + const poseStr = `${speciesId}-${colorId}-${pose}`; return poseStrs.has(poseStr); } @@ -43,17 +42,21 @@ export default async function getValidPetPoses() { // them first, so that they fill in the currently-empty high bits and // everything else stays in the same position as before! let byte = 0; - byte += hasPose(speciesId, colorId, "SICK", "FEMININE") ? 1 : 0; + byte += hasPose(speciesId, colorId, "UNKNOWN") ? 1 : 0; byte <<= 1; - byte += hasPose(speciesId, colorId, "SAD", "FEMININE") ? 1 : 0; + byte += hasPose(speciesId, colorId, "UNCONVERTED") ? 1 : 0; byte <<= 1; - byte += hasPose(speciesId, colorId, "HAPPY", "FEMININE") ? 1 : 0; + byte += hasPose(speciesId, colorId, "SICK_FEM") ? 1 : 0; byte <<= 1; - byte += hasPose(speciesId, colorId, "SICK", "MASCULINE") ? 1 : 0; + byte += hasPose(speciesId, colorId, "SAD_FEM") ? 1 : 0; byte <<= 1; - byte += hasPose(speciesId, colorId, "SAD", "MASCULINE") ? 1 : 0; + byte += hasPose(speciesId, colorId, "HAPPY_FEM") ? 1 : 0; byte <<= 1; - byte += hasPose(speciesId, colorId, "HAPPY", "MASCULINE") ? 1 : 0; + byte += hasPose(speciesId, colorId, "SICK_MASC") ? 1 : 0; + byte <<= 1; + byte += hasPose(speciesId, colorId, "SAD_MASC") ? 1 : 0; + byte <<= 1; + byte += hasPose(speciesId, colorId, "HAPPY_MASC") ? 1 : 0; buffer.writeUInt8(byte, speciesIndex * numColors + colorIndex + 2); } @@ -76,8 +79,9 @@ async function getNumColors(db) { async function getPoseTuples(db) { const [rows, _] = await db.query(` - SELECT DISTINCT species_id, color_id, mood_id, female FROM pet_states + SELECT DISTINCT species_id, color_id, mood_id, female, unconverted + FROM pet_states INNER JOIN pet_types ON pet_types.id = pet_states.pet_type_id - WHERE mood_id IS NOT NULL AND female IS NOT NULL AND color_id >= 1`); + WHERE glitched IS false AND color_id >= 1`); return rows; } diff --git a/src/server/query-tests/__snapshots__/SpeciesColorPair.test.js.snap b/src/server/query-tests/__snapshots__/SpeciesColorPair.test.js.snap index 928c7e20..b613f31b 100644 --- a/src/server/query-tests/__snapshots__/SpeciesColorPair.test.js.snap +++ b/src/server/query-tests/__snapshots__/SpeciesColorPair.test.js.snap @@ -9675,6 +9675,14 @@ Object { "id": "18", }, }, + Object { + "color": Object { + "id": "108", + }, + "species": Object { + "id": "18", + }, + }, Object { "color": Object { "id": "6", @@ -16531,6 +16539,14 @@ Object { "id": "31", }, }, + Object { + "color": Object { + "id": "106", + }, + "species": Object { + "id": "31", + }, + }, Object { "color": Object { "id": "6", @@ -17979,6 +17995,14 @@ Object { "id": "34", }, }, + Object { + "color": Object { + "id": "109", + }, + "species": Object { + "id": "34", + }, + }, Object { "color": Object { "id": "-1", diff --git a/src/server/util.js b/src/server/util.js index 49b7f157..72209352 100644 --- a/src/server/util.js +++ b/src/server/util.js @@ -26,4 +26,31 @@ function getGenderPresentation(modelPetWasFemale) { } } -module.exports = { capitalize, getEmotion, getGenderPresentation }; +function getPose(moodId, modelPetWasFemale, isUnconverted) { + if (isUnconverted) { + return "UNCONVERTED"; + } else if (moodId == null || modelPetWasFemale == null) { + return "UNKNOWN"; + } else if (String(moodId) === "1" && String(modelPetWasFemale) === "0") { + return "HAPPY_MASC"; + } else if (String(moodId) === "1" && String(modelPetWasFemale) === "1") { + return "HAPPY_FEM"; + } else if (String(moodId) === "2" && String(modelPetWasFemale) === "0") { + return "SAD_MASC"; + } else if (String(moodId) === "2" && String(modelPetWasFemale) === "1") { + return "SAD_FEM"; + } else if (String(moodId) === "4" && String(modelPetWasFemale) === "0") { + return "SICK_MASC"; + } else if (String(moodId) === "4" && String(modelPetWasFemale) === "1") { + return "SICK_FEM"; + } else { + throw new Error( + `could not identify pose: ` + + `moodId=${moodId}, ` + + `modelPetWasFemale=${modelPetWasFemale}, ` + + `isUnconverted=${isUnconverted}` + ); + } +} + +module.exports = { capitalize, getEmotion, getGenderPresentation, getPose };