<commit_before>package logbook.internal;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;

import javafx.scene.SnapshotParameters;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.effect.ColorAdjust;
import javafx.scene.image.Image;
import javafx.scene.paint.Color;
import logbook.bean.AppConfig;
import logbook.bean.Chara;
import logbook.bean.DeckPortCollection;
import logbook.bean.NdockCollection;
import logbook.bean.Ship;
import logbook.bean.ShipMst;
import logbook.bean.SlotItem;
import logbook.bean.SlotitemMst;
import logbook.bean.SlotitemMstCollection;

class ShipImage {

    /** 画像キャッシュ(艦) */
    private static final ReferenceCache<String, Image> BASE_CACHE = new ReferenceCache<>(120);

    /** 画像キャッシュ(アイコン類) */
    private static final ReferenceCache<String, Image> COMMON_CACHE = new ReferenceCache<>(32);

    /** 画像キャッシュ(HPゲージ) */
    private static final ReferenceCache<Double, Image> HPGAUGE_CACHE = new ReferenceCache<>(50);

    /** 画像キャッシュ(経験値ゲージ) */
    private static final ReferenceCache<Double, Image> EXPGAUGE_CACHE = new ReferenceCache<>(50);

    /** 艦娘画像ファイル名(健在・小破) */
    private static final String[] NORMAL = { "1.png", "1.jpg" };

    /** 艦娘画像ファイル名(中破・大破) */
    private static final String[] DAMAGED = { "3.png", "3.jpg", "1.png", "1.jpg" };

    /** 艦娘画像ファイル名(健在・小破) */
    private static final String[] STANDING_NORMAL = { "17.png", "17.jpg" };

    /** 艦娘画像ファイル名(中破・大破) */
    private static final String[] STANDING_DAMAGED = { "19.png", "19.jpg" };

    /** 小破バナーアイコン */
    private static final String MC_BANNER_ICON0 = "common_misc/common_misc_105.png";

    /** 中破バナーアイコン */
    private static final String MC_BANNER_ICON1 = "common_misc/common_misc_99.png";

    /** 大破バナーアイコン */
    private static final String MC_BANNER_ICON2 = "common_misc/common_misc_109.png";

    /** 撃沈バナーアイコン */
    private static final String MC_BANNER_ICON3 = "common_misc/common_misc_102.png";

    /** 修復バナーアイコン */
    private static final String MC_BANNER_ICON4 = "common_misc/common_misc_108.png";

    /** 遠征バナーアイコン */
    private static final String MC_BANNER_ICON5 = "common_misc/common_misc_100.png";

    /** 退避バナーアイコン */
    private static final String MC_BANNER_ICON10 = "common_misc/common_misc_110.png";

    /** 小破汚れ */
    private static final String MC_BANNER_SMOKE_IMG0 = "common_misc/common_misc_96.png";

    /** 中破汚れ */
    private static final String MC_BANNER_SMOKE_IMG1 = "common_misc/common_misc_97.png";

    /** 大破汚れ */
    private static final String MC_BANNER_SMOKE_IMG2 = "common_misc/common_misc_98.png";

    /** 疲労オレンジ背景 */
    private static final String COMMON_MISC_35 = "common_misc/common_misc_35.png";

    /** 疲労オレンジ顔 */
    private static final String COMMON_MISC_112 = "common_misc/common_misc_112.png";

    /** 疲労赤背景 */
    private static final String COMMON_MISC_36 = "common_misc/common_misc_36.png";

    /** 疲労赤顔 */
    private static final String COMMON_MISC_113 = "common_misc/common_misc_113.png";

    /** 小破バッチ */
    private static final Layer SLIGHT_DAMAGE_BADGE = new Layer(0, 0, Paths.get("common", MC_BANNER_ICON0));

    /** 中破バッチ */
    private static final Layer HALF_DAMAGE_BADGE = new Layer(0, 0, Paths.get("common", MC_BANNER_ICON1));

    /** 大破バッチ */
    private static final Layer BADLY_DAMAGE_BADGE = new Layer(0, 0, Paths.get("common", MC_BANNER_ICON2));

    /** 撃沈バッチ */
    private static final Layer LOST_BADGE = new Layer(0, 0, Paths.get("common", MC_BANNER_ICON3));

    /** 修復バッチ */
    private static final Layer NDOCK_BADGE = new Layer(0, 0, Paths.get("common", MC_BANNER_ICON4));

    /** 遠征バッチ */
    private static final Layer MISSION_BADGE = new Layer(0, 0, Paths.get("common", MC_BANNER_ICON5));

    /** 退避バッチ */
    private static final Layer ESCAPE_BADGE = new Layer(0, 0, Paths.get("common", MC_BANNER_ICON10));

    /** 小破汚れ */
    private static final Layer SLIGHT_DAMAGE_BACKGROUND = new Layer(0, 0, Paths.get("common", MC_BANNER_SMOKE_IMG0));

    /** 中破汚れ */
    private static final Layer HALF_DAMAGE_BACKGROUND = new Layer(0, 0, Paths.get("common", MC_BANNER_SMOKE_IMG1));

    /** 大破汚れ */
    private static final Layer BADLY_DAMAGE_BACKGROUND = new Layer(0, 0, Paths.get("common", MC_BANNER_SMOKE_IMG2));

    /** 疲労オレンジ背景 */
    private static final Layer ORANGE_BACKGROUND = new Layer(150, 0, Paths.get("common", COMMON_MISC_35));

    /** 疲労オレンジ顔 */
    private static final Layer ORANGE_FACE = new Layer(214, 18, Paths.get("common", COMMON_MISC_112));

    /** 疲労赤背景 */
    private static final Layer RED_BACKGROUND = new Layer(150, 0, Paths.get("common", COMMON_MISC_36));

    /** 疲労赤顔 */
    private static final Layer RED_FACE = new Layer(214, 18, Paths.get("common", COMMON_MISC_113));

    /** 出撃札 */
    private static final String JOIN_BANNER = "common_event/common_event_{0}.png";

    /** 装備アイコンのサイズ */
    private static final int ITEM_ICON_SIZE = 32;

    /**
     * キャラクターの画像を作成します
     *
     * @param chara キャラクター
     * @return 艦娘の画像
     */
    static Image get(Chara chara) {
        if (chara != null) {
            Path base = getPath(chara);
            if (base != null) {
                return BASE_CACHE.get(base.toUri().toString(), (url, status) -> {<commit_msg>画像の番号変更に対応<commit_after>package logbook.internal;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;

import javafx.scene.SnapshotParameters;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.effect.ColorAdjust;
import javafx.scene.image.Image;
import javafx.scene.paint.Color;
import logbook.bean.AppConfig;
import logbook.bean.Chara;
import logbook.bean.DeckPortCollection;
import logbook.bean.NdockCollection;
import logbook.bean.Ship;
import logbook.bean.ShipMst;
import logbook.bean.SlotItem;
import logbook.bean.SlotitemMst;
import logbook.bean.SlotitemMstCollection;

class ShipImage {

    /** 画像キャッシュ(艦) */
    private static final ReferenceCache<String, Image> BASE_CACHE = new ReferenceCache<>(120);

    /** 画像キャッシュ(アイコン類) */
    private static final ReferenceCache<String, Image> COMMON_CACHE = new ReferenceCache<>(32);

    /** 画像キャッシュ(HPゲージ) */
    private static final ReferenceCache<Double, Image> HPGAUGE_CACHE = new ReferenceCache<>(50);

    /** 画像キャッシュ(経験値ゲージ) */
    private static final ReferenceCache<Double, Image> EXPGAUGE_CACHE = new ReferenceCache<>(50);

    /** 艦娘画像ファイル名(健在・小破) */
    private static final String[] NORMAL = { "1.png", "1.jpg" };

    /** 艦娘画像ファイル名(中破・大破) */
    private static final String[] DAMAGED = { "3.png", "3.jpg", "1.png", "1.jpg" };

    /** 艦娘画像ファイル名(健在・小破) */
    private static final String[] STANDING_NORMAL = { "17.png", "17.jpg" };

    /** 艦娘画像ファイル名(中破・大破) */
    private static final String[] STANDING_DAMAGED = { "19.png", "19.jpg" };

    /** 小破バナーアイコン */
    private static final String MC_BANNER_ICON0 = "common_misc/common_misc_110.png";

    /** 中破バナーアイコン */
    private static final String MC_BANNER_ICON1 = "common_misc/common_misc_104.png";

    /** 大破バナーアイコン */
    private static final String MC_BANNER_ICON2 = "common_misc/common_misc_114.png";

    /** 撃沈バナーアイコン */
    private static final String MC_BANNER_ICON3 = "common_misc/common_misc_107.png";

    /** 修復バナーアイコン */
    private static final String MC_BANNER_ICON4 = "common_misc/common_misc_113.png";

    /** 遠征バナーアイコン */
    private static final String MC_BANNER_ICON5 = "common_misc/common_misc_105.png";

    /** 退避バナーアイコン */
    private static final String MC_BANNER_ICON10 = "common_misc/common_misc_115.png";

    /** 小破汚れ */
    private static final String MC_BANNER_SMOKE_IMG0 = "common_misc/common_misc_101.png";

    /** 中破汚れ */
    private static final String MC_BANNER_SMOKE_IMG1 = "common_misc/common_misc_102.png";

    /** 大破汚れ */
    private static final String MC_BANNER_SMOKE_IMG2 = "common_misc/common_misc_103.png";

    /** 疲労オレンジ背景 */
    private static final String COMMON_MISC_39 = "common_misc/common_misc_39.png";

    /** 疲労オレンジ顔 */
    private static final String COMMON_MISC_117 = "common_misc/common_misc_117.png";

    /** 疲労赤背景 */
    private static final String COMMON_MISC_40 = "common_misc/common_misc_40.png";

    /** 疲労赤顔 */
    private static final String COMMON_MISC_118 = "common_misc/common_misc_118.png";

    /** 小破バッチ */
    private static final Layer SLIGHT_DAMAGE_BADGE = new Layer(0, 0, Paths.get("common", MC_BANNER_ICON0));

    /** 中破バッチ */
    private static final Layer HALF_DAMAGE_BADGE = new Layer(0, 0, Paths.get("common", MC_BANNER_ICON1));

    /** 大破バッチ */
    private static final Layer BADLY_DAMAGE_BADGE = new Layer(0, 0, Paths.get("common", MC_BANNER_ICON2));

    /** 撃沈バッチ */
    private static final Layer LOST_BADGE = new Layer(0, 0, Paths.get("common", MC_BANNER_ICON3));

    /** 修復バッチ */
    private static final Layer NDOCK_BADGE = new Layer(0, 0, Paths.get("common", MC_BANNER_ICON4));

    /** 遠征バッチ */
    private static final Layer MISSION_BADGE = new Layer(0, 0, Paths.get("common", MC_BANNER_ICON5));

    /** 退避バッチ */
    private static final Layer ESCAPE_BADGE = new Layer(0, 0, Paths.get("common", MC_BANNER_ICON10));

    /** 小破汚れ */
    private static final Layer SLIGHT_DAMAGE_BACKGROUND = new Layer(0, 0, Paths.get("common", MC_BANNER_SMOKE_IMG0));

    /** 中破汚れ */
    private static final Layer HALF_DAMAGE_BACKGROUND = new Layer(0, 0, Paths.get("common", MC_BANNER_SMOKE_IMG1));

    /** 大破汚れ */
    private static final Layer BADLY_DAMAGE_BACKGROUND = new Layer(0, 0, Paths.get("common", MC_BANNER_SMOKE_IMG2));

    /** 疲労オレンジ背景 */
    private static final Layer ORANGE_BACKGROUND = new Layer(150, 0, Paths.get("common", COMMON_MISC_39));

    /** 疲労オレンジ顔 */
    private static final Layer ORANGE_FACE = new Layer(214, 18, Paths.get("common", COMMON_MISC_117));

    /** 疲労赤背景 */
    private static final Layer RED_BACKGROUND = new Layer(150, 0, Paths.get("common", COMMON_MISC_40));

    /** 疲労赤顔 */
    private static final Layer RED_FACE = new Layer(214, 18, Paths.get("common", COMMON_MISC_118));

    /** 出撃札 */
    private static final String JOIN_BANNER = "common_event/common_event_{0}.png";

    /** 装備アイコンのサイズ */
    private static final int ITEM_ICON_SIZE = 32;

    /**
     * キャラクターの画像を作成します
     *
     * @param chara キャラクター
     * @return 艦娘の画像
     */
    static Image get(Chara chara) {
        if (chara != null) {
            Path base = getPath(chara);
            if (base != null) {
                return BASE_CACHE.get(base.toUri().toString(), (url, status) -> {
{'fraction_non_alphanumeric': 0.12803815463633864, 'fraction_numerical': 0.02641474823443089, 'mean_word_length': 3.665810868635002, 'pattern_counts': {'":': 0, '<': 19, '<?xml version=': 0, '>': 21, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '405293', 'n_tokens_mistral': 4682, 'n_tokens_neox': 4343, 'n_words': 822}