diff --git a/src/server/__snapshots__/getValidPetPoses.test.js.snap b/src/server/__snapshots__/getValidPetPoses.test.js.snap index 351b19a..60229d1 100644 Binary files a/src/server/__snapshots__/getValidPetPoses.test.js.snap and b/src/server/__snapshots__/getValidPetPoses.test.js.snap differ diff --git a/src/server/getValidPetPoses.js b/src/server/getValidPetPoses.js index cda8586..c1b97b7 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 928c7e2..b613f31 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 49b7f15..7220935 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 };