From c172855abc4d1864afc6b7a87ba2f51d3cd3422f Mon Sep 17 00:00:00 2001 From: Olyutorskii Date: Wed, 1 Apr 2020 23:21:30 +0900 Subject: [PATCH] draw local image if exists. --- src/main/java/jp/sfjp/jindolf/Controller.java | 6 +- .../java/jp/sfjp/jindolf/config/AppSetting.java | 27 ++++++ src/main/java/jp/sfjp/jindolf/view/AvatarPics.java | 101 ++++++++++++++++++--- 3 files changed, 122 insertions(+), 12 deletions(-) diff --git a/src/main/java/jp/sfjp/jindolf/Controller.java b/src/main/java/jp/sfjp/jindolf/Controller.java index da98bef..c75e091 100644 --- 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; import jp.sfjp.jindolf.util.StringUtils; import jp.sfjp.jindolf.view.AccountPanel; import jp.sfjp.jindolf.view.ActionManager; +import jp.sfjp.jindolf.view.AvatarPics; import jp.sfjp.jindolf.view.FilterPanel; import jp.sfjp.jindolf.view.FindPanel; import jp.sfjp.jindolf.view.HelpFrame; @@ -1224,8 +1225,11 @@ public class Controller System.out.println(e); return; } + village.setLocalArchive(true); + AvatarPics avatarPics = village.getAvatarPics(); + this.appSetting.applyLocalImage(avatarPics); + avatarPics.preload(); EventQueue.invokeLater(() -> { - village.setLocalArchive(true); selectedVillage(village); }); }, "XML読み込み中", "XML読み込み完了"); diff --git a/src/main/java/jp/sfjp/jindolf/config/AppSetting.java b/src/main/java/jp/sfjp/jindolf/config/AppSetting.java index 61eb9d1..181a56c 100644 --- 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; import java.util.Map; import java.util.logging.Logger; import javax.imageio.ImageIO; +import jp.sfjp.jindolf.data.Avatar; import jp.sfjp.jindolf.data.DialogPref; import jp.sfjp.jindolf.glyph.Font2Json; import jp.sfjp.jindolf.glyph.FontInfo; import jp.sfjp.jindolf.net.ProxyInfo; +import jp.sfjp.jindolf.view.AvatarPics; import jp.sourceforge.jovsonz.JsBoolean; import jp.sourceforge.jovsonz.JsObject; import jp.sourceforge.jovsonz.JsPair; @@ -416,6 +418,31 @@ public class AppSetting{ } /** + * ローカル代替イメージを画像キャッシュに反映させる。 + * + * @param avatarPics 画像キャッシュ + */ + public void applyLocalImage(AvatarPics avatarPics){ + BufferedImage graveImage = this.avatarFaceMap.get("tomb"); + BufferedImage graveBodyImage = this.avatarBodyMap.get("tomb"); + + avatarPics.setGraveImage(graveImage); + avatarPics.setGraveBodyImage(graveBodyImage); + + for(Avatar avatar : Avatar.getPredefinedAvatarList()){ + String avatarId = avatar.getIdentifier(); + + BufferedImage faceImage = this.avatarFaceMap.get(avatarId); + BufferedImage bodyImage = this.avatarBodyMap.get(avatarId); + + avatarPics.setAvatarFaceImage(avatar, faceImage); + avatarPics.setAvatarBodyImage(avatar, bodyImage); + } + + return; + } + + /** * ネットワーク設定をセーブする。 */ private void saveNetConfig(){ diff --git a/src/main/java/jp/sfjp/jindolf/view/AvatarPics.java b/src/main/java/jp/sfjp/jindolf/view/AvatarPics.java index 12f0565..00c97d9 100644 --- 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; import java.text.MessageFormat; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import jp.sfjp.jindolf.data.Avatar; import jp.sfjp.jindolf.data.Land; import jp.sfjp.jindolf.util.GUIUtils; @@ -23,24 +24,34 @@ public class AvatarPics { private final Land land; - private final Map faceImageMap = - new HashMap<>(); - private final Map bodyImageMap = - new HashMap<>(); - private final Map faceMonoImageMap = - new HashMap<>(); - private final Map bodyMonoImageMap = - new HashMap<>(); + private final Map faceImageMap; + private final Map bodyImageMap; + private final Map faceMonoImageMap; + private final Map bodyMonoImageMap; + + private BufferedImage graveImage; + private BufferedImage graveBodyImage; /** - * COnstructor. + * Constructor. * * @param land 国 */ public AvatarPics(Land land){ super(); + + Objects.nonNull(land); this.land = land; + + this.faceImageMap = new HashMap<>(); + this.bodyImageMap = new HashMap<>(); + this.faceMonoImageMap = new HashMap<>(); + this.bodyMonoImageMap = new HashMap<>(); + + this.graveImage = null; + this.graveBodyImage = null; + return; } @@ -68,6 +79,19 @@ public class AvatarPics { } /** + * Avatarの顔イメージを設定する。 + * + * @param avatar Avatar + * @param image イメージ + */ + public void setAvatarFaceImage(Avatar avatar, BufferedImage image){ + this.faceImageMap.remove(avatar); + this.faceMonoImageMap.remove(avatar); + this.faceImageMap.put(avatar, image); + return; + } + + /** * Avatarの全身像イメージを返す。 * * @param avatar Avatar @@ -90,6 +114,19 @@ public class AvatarPics { } /** + * Avatarの全身像イメージを設定する。 + * + * @param avatar Avatar + * @param image イメージ + */ + public void setAvatarBodyImage(Avatar avatar, BufferedImage image){ + this.bodyImageMap.remove(avatar); + this.bodyMonoImageMap.remove(avatar); + this.bodyImageMap.put(avatar, image); + return; + } + + /** * 各国URLテンプレートと通し番号から * イメージをダウンロードする。 * @@ -142,23 +179,65 @@ public class AvatarPics { } /** - * 国に登録された墓イメージを返す。 + * 国別の墓イメージを返す。 * * @return 墓イメージ */ public BufferedImage getGraveImage(){ + if(this.graveImage != null) return this.graveImage; + BufferedImage result = this.land.getGraveIconImage(); + this.graveImage = result; + return result; } /** - * 国に登録された墓イメージ(大)を返す。 + * 墓イメージを設定する。 + * + * @param image イメージ + */ + public void setGraveImage(BufferedImage image){ + this.graveImage = image; + return; + } + + /** + * 国別の墓イメージ(大)を返す。 * * @return 墓イメージ(大) */ public BufferedImage getGraveBodyImage(){ + if(this.graveBodyImage != null) return this.graveBodyImage; + BufferedImage result = this.land.getGraveBodyImage(); + this.graveBodyImage = result; + return result; } + /** + * 墓イメージ(大)を設定する。 + * + * @param image イメージ + */ + public void setGraveBodyImage(BufferedImage image){ + this.graveBodyImage = image; + return; + } + + /** + * 全画像のキャッシュへの格納を試みる。 + */ + public void preload(){ + for(Avatar avatar : Avatar.getPredefinedAvatarList()){ + getAvatarFaceImage(avatar); + getAvatarBodyImage(avatar); + getAvatarFaceMonoImage(avatar); + getAvatarBodyMonoImage(avatar); + getGraveImage(); + getGraveBodyImage(); + } + } + } -- 2.11.0