Skip to content

Commit

Permalink
Optimize random display (#3)
Browse files Browse the repository at this point in the history
* Optimize random display
  • Loading branch information
neolao authored Mar 14, 2020
1 parent b25fde8 commit 4d33442
Show file tree
Hide file tree
Showing 17 changed files with 284 additions and 194 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.26.1] - 2020-03-14
### Changed
- Optimize random display

## [0.26.0] - 2020-03-14
### Changed
- Random character includes styles
- Random character select the first color automatically

[Unreleased]: https://github.com/mugen-launcher/quick-versus/compare/0.26.0...HEAD
[0.26.1]: https://github.com/mugen-launcher/quick-versus/compare/0.26.0...0.26.1
[0.26.0]: https://github.com/mugen-launcher/quick-versus/compare/0.25.3...0.26.0
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "mugen-quick-versus-launcher",
"author": "neolao",
"license": "MIT",
"version": "0.26.0",
"version": "0.26.1",
"description": "Mugen launcher for Quick Versus",
"keywords": [
"mugen",
Expand Down
10 changes: 4 additions & 6 deletions src/character/__tests__/useCharacterDefinition.hook.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ import useEnvironment from "../../configuration/useEnvironment.hook";
jest.mock("../../configuration/useEnvironment.hook");

describe("useCharacterDefinition()", () => {
useEnvironment.mockReturnValue({
currentDirectory: ""
});

it("should return null if the provided character is null", () => {
expect(useCharacterDefinition(null)).toBeNull();
});
Expand All @@ -22,9 +26,6 @@ describe("useCharacterDefinition()", () => {
});

it("should return null if the definition file does not exists", () => {
useEnvironment.mockReturnValue({
currentDirectory: ""
});
remote.require.mockReturnValue({
resolve: jest.fn(),
existsSync: jest.fn().mockReturnValue(false)
Expand All @@ -37,9 +38,6 @@ describe("useCharacterDefinition()", () => {
});

it("should return the definition", () => {
useEnvironment.mockReturnValue({
currentDirectory: ""
});
remote.require.mockReturnValue({
resolve: jest.fn(),
existsSync: jest.fn().mockReturnValue(true),
Expand Down
72 changes: 0 additions & 72 deletions src/character/__tests__/useRandomCharacter.hook.test.js

This file was deleted.

33 changes: 2 additions & 31 deletions src/character/useCharacterDefinition.hook.js
Original file line number Diff line number Diff line change
@@ -1,36 +1,7 @@
import ini from "ini";
import { remote } from "electron";
import useEnvironment from "../configuration/useEnvironment.hook";

const cache = new WeakMap();
import getCharacterDefinition from "./util/getCharacterDefinition";

export default function useCharacterDefinition(character) {
const fs = remote.require("fs");
const path = remote.require("path");
const environment = useEnvironment();

if (cache.has(character)) {
return cache.get(character);
}

if (!character) {
return null;
}

if (character.random) {
return null;
}

if (!character.definition) {
return null;
}

const definitionPath = path.resolve(environment.currentDirectory, "chars", character.definition);
if (!fs.existsSync(definitionPath)) {
return null;
}

const definition = ini.parse(fs.readFileSync(definitionPath, "utf-8"));
cache.set(character, definition);
return definition;
return getCharacterDefinition(character, environment.currentDirectory);
}
39 changes: 4 additions & 35 deletions src/character/useCharacterName.hook.js
Original file line number Diff line number Diff line change
@@ -1,38 +1,7 @@
import ini from "ini";
import useCharacterDefinition from "./useCharacterDefinition.hook";
import getObjectPropertyValueCaseInsensitive from "./util/getObjectPropertyValueCaseInsensitive";

const infoKeys = ["Info", "info"];
const nameKeys = ["displayname", "Displayname", "DisplayName", "name", "Name"];
import useEnvironment from "../configuration/useEnvironment.hook";
import getCharacterName from "./util/getCharacterName";

export default function useCharacterName(character) {
const definition = useCharacterDefinition(character);

if (!character) {
return "Unknown";
}

if (character.random) {
return "Random";
}

if (!definition) {
return "Unknown";
}

const info = getObjectPropertyValueCaseInsensitive(definition, "info");
if (!info) {
return "Unknown";
}

const displayName = getObjectPropertyValueCaseInsensitive(info, "displayname");
if (displayName) {
return ini.unsafe(displayName);
}
const name = getObjectPropertyValueCaseInsensitive(info, "name");
if (name) {
return ini.unsafe(name);
}

return "Unknown";
const environment = useEnvironment();
return getCharacterName(character, environment.currentDirectory);
}
28 changes: 0 additions & 28 deletions src/character/useRandomCharacter.hook.js

This file was deleted.

18 changes: 18 additions & 0 deletions src/character/useSelectableCharacterNames.hook.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import getSelectableCharactersFromCategories from "./util/getSelectableCharactersFromCategories";
import useCategories from "../configuration/useCategories.hook";
import getCharacterName from "./util/getCharacterName";
import useEnvironment from "../configuration/useEnvironment.hook";

export default function useSelectableCharacterNames() {
const environment = useEnvironment();
const categories = useCategories();

const names = [];
const selectableCharacters = getSelectableCharactersFromCategories(categories);
for (const character of selectableCharacters) {
const name = getCharacterName(character, environment.currentDirectory);
names.push(name);
}

return names;
}
23 changes: 23 additions & 0 deletions src/character/useSelectableCharacterNamesFromCategory.hook.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import getSelectableCharactersFromCategory from "./util/getSelectableCharactersFromCategory";
import getCharacterName from "./util/getCharacterName";
import useEnvironment from "../configuration/useEnvironment.hook";

const cache = new WeakMap();

export default function useSelectableCharacterNamesFromCategory(category) {
const environment = useEnvironment();

if (cache.has(category)) {
return cache.get(category);
}

const names = [];
const selectableCharacters = getSelectableCharactersFromCategory(category);
for (const character of selectableCharacters) {
const name = getCharacterName(character, environment.currentDirectory);
names.push(name);
}

cache.set(category, names);
return names;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import getSelectableCharactersFromCategory from "../getSelectableCharactersFromCategory";

describe("getSelectableCharactersFromCategory()", () => {
const characterA = { definition: "A" };
const characterB = { definition: "B" };
const characterC = { definition: "C" };
const characterD = { definition: "D" };
const characterE = {
definition: "E",
styles: [characterD]
};

it("should return all characters", () => {
const category = {
characters: [characterA, characterB, characterC]
};
const characters = getSelectableCharactersFromCategory(category);
expect(characters).toEqual([characterA, characterB, characterC]);
});

it("should return all characters including sub characters", () => {
const category = {
characters: [characterA, characterB, characterE]
};
const characters = getSelectableCharactersFromCategory(category);
expect(characters).toEqual([characterA, characterB, characterE, characterD]);
});
});
34 changes: 34 additions & 0 deletions src/character/util/getCharacterDefinition.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import ini from "ini";
import { remote } from "electron";

const cache = new WeakMap();

export default function useCharacterDefinition(character, currentDirectory) {
const fs = remote.require("fs");
const path = remote.require("path");

if (cache.has(character)) {
return cache.get(character);
}

if (!character) {
return null;
}

if (character.random) {
return null;
}

if (!character.definition) {
return null;
}

const definitionPath = path.resolve(currentDirectory, "chars", character.definition);
if (!fs.existsSync(definitionPath)) {
return null;
}

const definition = ini.parse(fs.readFileSync(definitionPath, "utf-8"));
cache.set(character, definition);
return definition;
}
34 changes: 34 additions & 0 deletions src/character/util/getCharacterName.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import ini from "ini";
import getCharacterDefinition from "./getCharacterDefinition";
import getObjectPropertyValueCaseInsensitive from "./getObjectPropertyValueCaseInsensitive";

export default function getCharacterName(character, currentDirectory) {
if (!character) {
return "Unknown";
}

if (character.random) {
return "Random";
}

const definition = getCharacterDefinition(character, currentDirectory);
if (!definition) {
return "Unknown";
}

const info = getObjectPropertyValueCaseInsensitive(definition, "info");
if (!info) {
return "Unknown";
}

const displayName = getObjectPropertyValueCaseInsensitive(info, "displayname");
if (displayName) {
return ini.unsafe(displayName);
}
const name = getObjectPropertyValueCaseInsensitive(info, "name");
if (name) {
return ini.unsafe(name);
}

return "Unknown";
}
Loading

0 comments on commit 4d33442

Please sign in to comment.