using System; using System.Collections.Generic; using System.Text; using System.Drawing; using Rmake.Model.Engine; using Rmake.Model.Casts; using Rmake.API.Interfaces.Model; using Rmake.Model.Enums; using Rmake.API.Interfaces.UI; using Rmake.Framework.Logging; namespace Rmake.GameRendering { public class CharacterListView : GameRenderingView, ICharacterListWindow { private PlayingGame game = null; private int index = 0; private GameRenderingFactory factory = null; private List faces = null; private List texts = null; private WindowViewWrapper window = null; private WindowViewWrapper selectRect = null; public int Index { get { return index; } set { index = value; selectRect.Rect = new Rectangle(176, 64 + index * 80, 464, 96); } } public CharacterListView(PlayingGame game, GameRenderingFactory factory) { this.game = game; this.factory = factory; faces = new List(); texts = new List(); // WindowViewWrapper の初期化 WindowViewWrapper window = factory.CreateWindowViewWrapper( game.EditingGame.Materials.GetSystemImage(), false); window.Rect = new Rectangle(176, 64, 464, 416); this.window = window; selectRect = factory.CreateWindowViewWrapper( game.EditingGame.Materials.GetSystemImageYellow(), false); selectRect.Rect = new Rectangle(176, 64, 464, 96); Logger.Info("Init Window Visible: " + selectRect.Visible + ", " + selectRect.LayerVisible); selectRect.Visible = false; for (int i = 0; i < game.CurrentParty.Members.Count; i++) { // TextWindowView の初期化 TextViewWrapper textView = factory.CreateTextViewWrapper(); texts.Add(textView); if (i < game.CurrentParty.Members.Count) { ICharacter chara = game.CurrentParty.Members[i]; // TextWindowView の初期化 String name = chara.Name + "(LV: " + chara.LV + ") " + Environment.NewLine + "HP: " + chara.HP + "/" + chara.CurrentStatus.MaxHP + " | " + "MP: " + chara.MP + "/" + chara.CurrentStatus.MaxMP; textView.DrawText(272, 80 + i * 80, 384, 96, name, Int32.Parse("FFFFFFFF", System.Globalization.NumberStyles.HexNumber)); // ImageViewWrapper の初期化 String filename = Folders.GetMaterialFolder(MaterialTypes.FaceImage) + chara.FaceImage; ImageViewWrapper faceImage = factory.CreateImageViewWrapper(filename, false); faceImage.SourceRectangle = new Rectangle(0, 0, 64, 64); faceImage.DestinationPoint = new Point(192, i * 80 + 80); faceImage.IsDependCamera = false; faces.Add(faceImage); } } } public void Show() { Visible = true; EndSelectMode(); } public void Close() { Visible = false; EndSelectMode(); } public void StartSelectMode() { Index = 0; selectRect.Visible = true; } public void SelectNext() { if (index < texts.Count - 1) { Index = Index + 1; } } public void SelectPrevious() { if (0 < index) { Index = Index - 1; } } public void EndSelectMode() { Index = 0; selectRect.Visible = false; } internal override void Finalize(GameRenderingManager manager) { manager.DeleteRenderingView(window); manager.DeleteRenderingView(selectRect); foreach (TextViewWrapper text in texts) { manager.DeleteRenderingView(text); } foreach (ImageViewWrapper image in faces) { manager.DeleteRenderingView(image); } } internal override void SetVisible(bool visible) { window.Visible = visible; if (visible == false) { EndSelectMode(); } foreach (TextViewWrapper text in texts) { text.Visible = visible; } foreach (ImageViewWrapper image in faces) { image.Visible = visible; } } internal override void AddLayer(LayerView layer) { base.AddLayer(layer); //layer.AddGameRenderingView(window); /* foreach (TextViewWrapper text in texts) { layer.AddGameRenderingView(text); } foreach (ImageViewWrapper image in faces) { layer.AddGameRenderingView(image); } layer.AddGameRenderingView(selectRect); */ //selectRect.Visible = false; } internal override void RemoveLayer(LayerView layer) { base.RemoveLayer(layer); //selectRect.RemoveLayer(layer); } /* internal override void Render(GameRenderingManager manager) { //this.LayerIndex = this.LayerIndex; base.Render(manager); } */ internal override int LayerIndex { get { return window.LayerIndex; } set { window.LayerIndex = value; foreach (TextViewWrapper text in texts) { text.LayerIndex = value + 1; } foreach (ImageViewWrapper image in faces) { image.LayerIndex = value + 2; } if (selectRect != null) { selectRect.LayerIndex = value + 3; } } } } }