• R/O
  • HTTP
  • SSH
  • HTTPS

Jindolf: Commit

Jindolfプロジェクトは、CGIゲーム「人狼BBS」を快適にプレイするための専用クライアントを製作するために発足したオープンソースプロジェクトです。


Commit MetaInfo

Revisão30cc764665d0e6d6a89611691e35f3836426c816 (tree)
Hora2020-04-02 00:09:21
AutorOlyutorskii <olyutorskii@user...>
CommiterOlyutorskii

Mensagem de Log

Merge branch 'topic/avatarcache' into develop

Mudança Sumário

Diff

--- a/src/main/java/jp/sfjp/jindolf/Controller.java
+++ b/src/main/java/jp/sfjp/jindolf/Controller.java
@@ -78,6 +78,7 @@ import jp.sfjp.jindolf.util.GUIUtils;
7878 import jp.sfjp.jindolf.util.StringUtils;
7979 import jp.sfjp.jindolf.view.AccountPanel;
8080 import jp.sfjp.jindolf.view.ActionManager;
81+import jp.sfjp.jindolf.view.AvatarPics;
8182 import jp.sfjp.jindolf.view.FilterPanel;
8283 import jp.sfjp.jindolf.view.FindPanel;
8384 import jp.sfjp.jindolf.view.HelpFrame;
@@ -1224,8 +1225,11 @@ public class Controller
12241225 System.out.println(e);
12251226 return;
12261227 }
1228+ village.setLocalArchive(true);
1229+ AvatarPics avatarPics = village.getAvatarPics();
1230+ this.appSetting.applyLocalImage(avatarPics);
1231+ avatarPics.preload();
12271232 EventQueue.invokeLater(() -> {
1228- village.setLocalArchive(true);
12291233 selectedVillage(village);
12301234 });
12311235 }, "XML読み込み中", "XML読み込み完了");
--- a/src/main/java/jp/sfjp/jindolf/config/AppSetting.java
+++ b/src/main/java/jp/sfjp/jindolf/config/AppSetting.java
@@ -19,10 +19,12 @@ import java.util.List;
1919 import java.util.Map;
2020 import java.util.logging.Logger;
2121 import javax.imageio.ImageIO;
22+import jp.sfjp.jindolf.data.Avatar;
2223 import jp.sfjp.jindolf.data.DialogPref;
2324 import jp.sfjp.jindolf.glyph.Font2Json;
2425 import jp.sfjp.jindolf.glyph.FontInfo;
2526 import jp.sfjp.jindolf.net.ProxyInfo;
27+import jp.sfjp.jindolf.view.AvatarPics;
2628 import jp.sourceforge.jovsonz.JsBoolean;
2729 import jp.sourceforge.jovsonz.JsObject;
2830 import jp.sourceforge.jovsonz.JsPair;
@@ -416,6 +418,31 @@ public class AppSetting{
416418 }
417419
418420 /**
421+ * ローカル代替イメージを画像キャッシュに反映させる。
422+ *
423+ * @param avatarPics 画像キャッシュ
424+ */
425+ public void applyLocalImage(AvatarPics avatarPics){
426+ BufferedImage graveImage = this.avatarFaceMap.get("tomb");
427+ BufferedImage graveBodyImage = this.avatarBodyMap.get("tomb");
428+
429+ avatarPics.setGraveImage(graveImage);
430+ avatarPics.setGraveBodyImage(graveBodyImage);
431+
432+ for(Avatar avatar : Avatar.getPredefinedAvatarList()){
433+ String avatarId = avatar.getIdentifier();
434+
435+ BufferedImage faceImage = this.avatarFaceMap.get(avatarId);
436+ BufferedImage bodyImage = this.avatarBodyMap.get(avatarId);
437+
438+ avatarPics.setAvatarFaceImage(avatar, faceImage);
439+ avatarPics.setAvatarBodyImage(avatar, bodyImage);
440+ }
441+
442+ return;
443+ }
444+
445+ /**
419446 * ネットワーク設定をセーブする。
420447 */
421448 private void saveNetConfig(){
--- a/src/main/java/jp/sfjp/jindolf/view/AvatarPics.java
+++ b/src/main/java/jp/sfjp/jindolf/view/AvatarPics.java
@@ -11,6 +11,7 @@ import java.awt.image.BufferedImage;
1111 import java.text.MessageFormat;
1212 import java.util.HashMap;
1313 import java.util.Map;
14+import java.util.Objects;
1415 import jp.sfjp.jindolf.data.Avatar;
1516 import jp.sfjp.jindolf.data.Land;
1617 import jp.sfjp.jindolf.util.GUIUtils;
@@ -23,24 +24,34 @@ public class AvatarPics {
2324
2425 private final Land land;
2526
26- private final Map<Avatar, BufferedImage> faceImageMap =
27- new HashMap<>();
28- private final Map<Avatar, BufferedImage> bodyImageMap =
29- new HashMap<>();
30- private final Map<Avatar, BufferedImage> faceMonoImageMap =
31- new HashMap<>();
32- private final Map<Avatar, BufferedImage> bodyMonoImageMap =
33- new HashMap<>();
27+ private final Map<Avatar, BufferedImage> faceImageMap;
28+ private final Map<Avatar, BufferedImage> bodyImageMap;
29+ private final Map<Avatar, BufferedImage> faceMonoImageMap;
30+ private final Map<Avatar, BufferedImage> bodyMonoImageMap;
31+
32+ private BufferedImage graveImage;
33+ private BufferedImage graveBodyImage;
3434
3535
3636 /**
37- * COnstructor.
37+ * Constructor.
3838 *
3939 * @param land 国
4040 */
4141 public AvatarPics(Land land){
4242 super();
43+
44+ Objects.nonNull(land);
4345 this.land = land;
46+
47+ this.faceImageMap = new HashMap<>();
48+ this.bodyImageMap = new HashMap<>();
49+ this.faceMonoImageMap = new HashMap<>();
50+ this.bodyMonoImageMap = new HashMap<>();
51+
52+ this.graveImage = null;
53+ this.graveBodyImage = null;
54+
4455 return;
4556 }
4657
@@ -68,6 +79,19 @@ public class AvatarPics {
6879 }
6980
7081 /**
82+ * Avatarの顔イメージを設定する。
83+ *
84+ * @param avatar Avatar
85+ * @param image イメージ
86+ */
87+ public void setAvatarFaceImage(Avatar avatar, BufferedImage image){
88+ this.faceImageMap.remove(avatar);
89+ this.faceMonoImageMap.remove(avatar);
90+ this.faceImageMap.put(avatar, image);
91+ return;
92+ }
93+
94+ /**
7195 * Avatarの全身像イメージを返す。
7296 *
7397 * @param avatar Avatar
@@ -90,6 +114,19 @@ public class AvatarPics {
90114 }
91115
92116 /**
117+ * Avatarの全身像イメージを設定する。
118+ *
119+ * @param avatar Avatar
120+ * @param image イメージ
121+ */
122+ public void setAvatarBodyImage(Avatar avatar, BufferedImage image){
123+ this.bodyImageMap.remove(avatar);
124+ this.bodyMonoImageMap.remove(avatar);
125+ this.bodyImageMap.put(avatar, image);
126+ return;
127+ }
128+
129+ /**
93130 * 各国URLテンプレートと通し番号から
94131 * イメージをダウンロードする。
95132 *
@@ -142,23 +179,65 @@ public class AvatarPics {
142179 }
143180
144181 /**
145- * 国に登録された墓イメージを返す。
182+ * 国別の墓イメージを返す。
146183 *
147184 * @return 墓イメージ
148185 */
149186 public BufferedImage getGraveImage(){
187+ if(this.graveImage != null) return this.graveImage;
188+
150189 BufferedImage result = this.land.getGraveIconImage();
190+ this.graveImage = result;
191+
151192 return result;
152193 }
153194
154195 /**
155- * 国に登録された墓イメージ(大)を返す。
196+ * 墓イメージを設定する。
197+ *
198+ * @param image イメージ
199+ */
200+ public void setGraveImage(BufferedImage image){
201+ this.graveImage = image;
202+ return;
203+ }
204+
205+ /**
206+ * 国別の墓イメージ(大)を返す。
156207 *
157208 * @return 墓イメージ(大)
158209 */
159210 public BufferedImage getGraveBodyImage(){
211+ if(this.graveBodyImage != null) return this.graveBodyImage;
212+
160213 BufferedImage result = this.land.getGraveBodyImage();
214+ this.graveBodyImage = result;
215+
161216 return result;
162217 }
163218
219+ /**
220+ * 墓イメージ(大)を設定する。
221+ *
222+ * @param image イメージ
223+ */
224+ public void setGraveBodyImage(BufferedImage image){
225+ this.graveBodyImage = image;
226+ return;
227+ }
228+
229+ /**
230+ * 全画像のキャッシュへの格納を試みる。
231+ */
232+ public void preload(){
233+ for(Avatar avatar : Avatar.getPredefinedAvatarList()){
234+ getAvatarFaceImage(avatar);
235+ getAvatarBodyImage(avatar);
236+ getAvatarFaceMonoImage(avatar);
237+ getAvatarBodyMonoImage(avatar);
238+ getGraveImage();
239+ getGraveBodyImage();
240+ }
241+ }
242+
164243 }
Show on old repository browser