OSDN Git Service

Merge branch 'release/v4.101.2'
[jindolf/Jindolf.git] / src / main / java / jp / sfjp / jindolf / view / LocalAvatarImg.java
1 /*
2  * local avatar images
3  *
4  * License : The MIT License
5  * Copyright(c) 2020 olyutorskii
6  */
7
8 package jp.sfjp.jindolf.view;
9
10 import java.awt.image.BufferedImage;
11 import java.text.MessageFormat;
12 import java.util.Collections;
13 import java.util.HashMap;
14 import java.util.Map;
15 import jp.sfjp.jindolf.ResourceManager;
16 import jp.sfjp.jindolf.data.Avatar;
17
18 /**
19  * 人狼BBSサーバにアクセスできなくなる将来に備えた代替イメージの諸々。
20  *
21  * <p>リソースに格納した代替Avatarイメージへのアクセスを提供する。
22  *
23  * <p>2020-04現在、凪庵氏作の新旧Avatarイメージは
24  * 人狼BBSサーバ群より公衆送信中。
25  *
26  * @see <a href="http://ninjinix.com/">NINJINIX.COM</a>
27  * @see <a href="http://yoroz.jp/">路地裏萬亭</a>
28  */
29 public final class LocalAvatarImg {
30
31     private static final String IMGDIR = "resources/image/avatar";
32     private static final String TEMPLATE_FACE =
33             IMGDIR + "/face{0,number,#00}.png";
34     private static final String TEMPLATE_BODY =
35             IMGDIR + "/body{0,number,#00}.png";
36     private static final String RES_GRAVE     = IMGDIR + "/face99.png";
37     private static final String RES_GRAVEBODY = IMGDIR + "/body99.png";
38
39     private static final Map<String, BufferedImage> FACE_MAP;
40     private static final Map<String, BufferedImage> BODY_MAP;
41
42     private static final BufferedImage GRAVE_IMAGE;
43     private static final BufferedImage GRAVEBODY_IMAGE;
44
45     static{
46         FACE_MAP = loadTemplateResImg(TEMPLATE_FACE);
47         BODY_MAP = loadTemplateResImg(TEMPLATE_BODY);
48
49         GRAVE_IMAGE     = ResourceManager.getBufferedImage(RES_GRAVE);
50         GRAVEBODY_IMAGE = ResourceManager.getBufferedImage(RES_GRAVEBODY);
51     }
52
53
54     /**
55      * Hidden constructor.
56      */
57     private LocalAvatarImg(){
58         assert false;
59     }
60
61
62     /**
63      * リソース名テンプレートにAvatarIdNumを適用して得られたリソースから
64      * イメージを読み込む。
65      *
66      * @param resForm リソース名テンプレート
67      * @return AvatarIdとリソースイメージからなるマップ
68      */
69     private static Map<String, BufferedImage> loadTemplateResImg(String resForm){
70         Map<String, BufferedImage> result = new HashMap<>();
71
72         Avatar.getPredefinedAvatarList().forEach(avatar -> {
73             String avatarId = avatar.getIdentifier();
74             int idNum = avatar.getIdNum();
75             String res = MessageFormat.format(resForm, idNum);
76
77             BufferedImage img = ResourceManager.getBufferedImage(res);
78             assert img != null;
79             result.put(avatarId, img);
80         });
81
82         return Collections.unmodifiableMap(result);
83     }
84
85
86     /**
87      * Avatarの代替顔イメージを返す。
88      *
89      * @param avatarId AvatarId
90      * @return 代替顔イメージ
91      */
92     public static BufferedImage getAvatarFaceImage(String avatarId){
93         BufferedImage result = FACE_MAP.get(avatarId);
94         return result;
95     }
96
97     /**
98      * Avatarの代替全身像イメージを返す。
99      *
100      * @param avatarId AvatarId
101      * @return 代替全身像イメージ
102      */
103     public static BufferedImage getAvatarBodyImage(String avatarId){
104         BufferedImage result = BODY_MAP.get(avatarId);
105         return result;
106     }
107
108     /**
109      * 代替墓イメージを返す。
110      *
111      * @return 代替墓イメージ
112      */
113     public static BufferedImage getGraveImage(){
114         return GRAVE_IMAGE;
115     }
116
117     /**
118      * 代替墓イメージ(大)を返す。
119      *
120      * @return 代替墓イメージ(大)
121      */
122     public static BufferedImage getGraveBodyImage(){
123         return GRAVEBODY_IMAGE;
124     }
125
126 }