/// <summary> /// Changement de valeur des les cellules. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void grdDialog_CellValueChanged(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0 && e.RowIndex < grdDialog.Rows.Count) { Guid id = (Guid)grdDialog.Rows[e.RowIndex].Cells[0].Value; VO_Message message = CurrentDialog.Messages.Find(p => p.Id == id); if (message != null) { switch (e.ColumnIndex) { case 1: message.Text = (string)grdDialog.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; break; case 2: message.Character = (Guid)grdDialog.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; break; case 3: message.Duration = (int)grdDialog.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; break; case 4: message.FontSize = (int)grdDialog.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; break; } } } }
/// <summary> /// Fermeture Ressource Manager /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ResourcesManager_FormClosed(object sender, FormClosedEventArgs e) { FormsManager.Instance.ResourcesManager.FormClosed -= new FormClosedEventHandler(ResourcesManager_FormClosed); _MessageInCacheForVoices.Voice = FormsManager.Instance.ResourcesManager.SelectedFilePath; CurrentDialog.Messages.Find(p => p.Id == _MessageInCacheForVoices.Id).Voice = _MessageInCacheForVoices.Voice; FormsManager.Instance.ResourcesManager.SelectedFilePath = null; _MessageInCacheForVoices = null; }
/// <summary> /// Gestion des erreurs /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void grdDialog_DataError(object sender, DataGridViewDataErrorEventArgs e) { if (e.RowIndex >= 0 && e.RowIndex < grdDialog.Rows.Count && e.ColumnIndex == 2) { Guid id = (Guid)grdDialog.Rows[e.RowIndex].Cells[0].Value; VO_Message message = CurrentDialog.Messages.Find(p => p.Id == id); grdDialog.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = new Guid(); } }
/// <summary> /// Click sur Down /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDown_Click(object sender, EventArgs e) { //Ligne courante if (grdDialog.SelectedRows.Count == 1) { //Ligne à descendre Guid currentLineId = (Guid)grdDialog.SelectedRows[0].Cells[0].Value; VO_Message messageCached = null; //Réorder List <VO_Message> newList = new List <VO_Message>(); foreach (VO_Message message in CurrentDialog.Messages) { if (message.Id == currentLineId) { messageCached = message; } else { newList.Add(message); if (messageCached != null) { newList.Add(messageCached); messageCached = null; } } } if (messageCached != null) { newList.Add(messageCached); messageCached = null; } //Enregistrement CurrentDialog.Messages = newList; //Rechargement de la liste LoadDialog(CurrentDialog, _ScriptType); //Selection de l'ancienne ligne foreach (DataGridViewRow row in grdDialog.Rows) { Guid foreachRowGuid = (Guid)row.Cells[0].Value; if (foreachRowGuid == currentLineId) { row.Selected = true; } else { row.Selected = false; } } } }
/// <summary> /// Format Text /// </summary> /// <param name="message">VO_message du message</param> /// <returns>Sprite de texte</returns> public List <VO_String2D> FormatText(VO_Message message, VO_Size container, Point camera) { List <VO_String2D> sprite = null; RunServiceTask(delegate { sprite = _Business.FormatText(message, container, camera); }, ViewerErrors.STAGE_LOAD_MENU, false, message.ToString(), container.ToString(), camera.ToString()); return(sprite); }
/// <summary> /// Créateur de messages /// </summary> /// <returns></returns> public VO_Message CreateMessage() { VO_Message message = null; RunServiceTask(delegate { message = _Business.CreateMessage(); }, Errors.ERROR_MESSAGE_STR_CREATE); return(message); }
/// <summary> /// Créateur de messages /// </summary> /// <returns></returns> public static VO_Message CreateMessage() { //Création de l'objet VO_Message message = new VO_Message() { Id = Guid.NewGuid(), Duration = EditorSettings.Instance.MessageDuration, FontSize = EditorSettings.Instance.MessageFontSize, }; return(message); }
/// <summary> /// Click sur cellule /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void grdDialog_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0 && e.RowIndex < grdDialog.Rows.Count && e.ColumnIndex == 5) { Guid id = (Guid)grdDialog.Rows[e.RowIndex].Cells[0].Value; _MessageInCacheForVoices = CurrentDialog.Messages.Find(p => p.Id == id).Clone(); FormsManager.Instance.ResourcesManager.FormClosed += new FormClosedEventHandler(ResourcesManager_FormClosed); FormsManager.Instance.ResourcesManager.Filter = GlobalConstants.PROJECT_DIR_VOICES; FormsManager.Instance.ResourcesManager.SelectedFilePath = _MessageInCacheForVoices.Voice; FormsManager.Instance.ResourcesManager.ShowDialog(this); } }
/// <summary> /// Insére un message dans la gridview /// </summary> /// <param name="message">VO_Message</param> private void InsertMessage(VO_Message message) { DataGridViewRow row = new DataGridViewRow(); //Id DataGridViewTextBoxCell cellId = new DataGridViewTextBoxCell(); cellId.Value = message.Id; //Text DataGridViewTextBoxCell cellText = new DataGridViewTextBoxCell(); cellText.Value = message.Text; //Character DataGridViewComboBoxCell cellCharacter = new DataGridViewComboBoxCell(); cellCharacter.DisplayMember = "Title"; cellCharacter.ValueMember = "Id"; cellCharacter.DataSource = _Characters; cellCharacter.Value = message.Character; //Duration DataGridViewComboBoxCell cellDuration = new DataGridViewComboBoxCell(); cellDuration.DisplayMember = "Title"; cellDuration.ValueMember = "Id"; cellDuration.DataSource = FormsTools.GetMessageDurationList(); cellDuration.Value = message.Duration; //FontSize DataGridViewComboBoxCell cellFontSize = new DataGridViewComboBoxCell(); cellFontSize.DisplayMember = "Title"; cellFontSize.ValueMember = "Id"; cellFontSize.DataSource = FormsTools.GetMessageFontSizeList(); cellFontSize.Value = message.FontSize; //Sound DataGridViewButtonCell cellSound = new DataGridViewButtonCell(); cellSound.Value = GlobalConstants.BUTTON_SOUND; row.Cells.Add(cellId); row.Cells.Add(cellText); row.Cells.Add(cellCharacter); row.Cells.Add(cellDuration); row.Cells.Add(cellFontSize); row.Cells.Add(cellSound); grdDialog.Rows.Add(row); }
/// <summary> /// Insérer une ligne au dessus de ligne courante /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnInsertAbove_Click(object sender, EventArgs e) { //Ligne courante Guid currentLineId = new Guid(); if (grdDialog.SelectedRows.Count == 1) { currentLineId = (Guid)grdDialog.SelectedRows[0].Cells[0].Value; } //Création du nouveau message VO_Message newMessage = _Service.CreateMessage(); //Réorder List <VO_Message> newList = new List <VO_Message>(); foreach (VO_Message message in CurrentDialog.Messages) { if (message.Id == currentLineId) { newList.Add(newMessage); } newList.Add(message); } if (currentLineId == new Guid()) { newList.Add(newMessage); } //Enregistrement CurrentDialog.Messages = newList; //Rechargement de la liste LoadDialog(CurrentDialog, _ScriptType); //Selection de la nouvelle ligne foreach (DataGridViewRow row in grdDialog.Rows) { Guid foreachRowGuid = (Guid)row.Cells[0].Value; if (foreachRowGuid == newMessage.Id) { row.Selected = true; } else { row.Selected = false; } } }
/// <summary> /// Rafraichi les messages /// </summary> private void RefreshMessage(VO_RunningScript script) { if (script != null && script.CurrentLine != null && script.CurrentLine is VO_Script_Message) { VO_Dialog dialog = ((VO_Script_Message)script.CurrentLine).Dialog; VO_Message message = dialog.Messages[script.ObjectState - 1]; Draw(_Service.FormatText(message, new VO_Size(_ProjectData.Resolution.Width, _ProjectData.Resolution.Height), new Point((int)Camera2D.Pos.X, (int)Camera2D.Pos.Y))); //Dessiner les faces if (dialog.UseFaces) { Draw(_Service.GetAnimatedFaces(dialog)); } } }
/// <summary> /// Format Text /// </summary> /// <param name="message">VO_message du message</param> /// <returns>Sprite de texte</returns> public List <VO_String2D> FormatText(VO_Message message, VO_Size container, Point camera) { int cameraLeft = (int)camera.X; int cameraTop = (int)camera.Y; VO_CharacterSprite character = null; List <VO_String2D> textes = new List <VO_String2D>(); if (message.Character == new Guid(GlobalConstants.CURRENT_PLAYER_ID)) { character = PlayableCharactersManager.CurrentPlayerCharacter.CharacterSprite; } else { character = GetCharacterSprite(message.Character); } if (character != null && character.IsTalking) { //Calcul du Width idéal // Valeur idéale = ViewerConstants.MESS_MAXIMUM_WIDTH / en 640 int idealValue = ViewerConstants.MESS_MAXIMUM_WIDTH * container.Width / 640; int miniValue = ViewerConstants.MESS_MINIMUM_WIDTH * container.Width / 640; int xLeft = character.Location.X - cameraLeft - idealValue / 2; int xRight = character.Location.X - cameraLeft + idealValue / 2; //Cas où le texte mord sur la gauche if (xLeft < ViewerConstants.MESS_PADDING_BORDER) { xLeft = ViewerConstants.MESS_PADDING_BORDER; if (xRight - xLeft < miniValue) { xRight = miniValue; } } //Cas où le texte mord sur la droite else if (xRight > container.Width - ViewerConstants.MESS_PADDING_BORDER) { xRight = container.Width - 1 - ViewerConstants.MESS_PADDING_BORDER; if (xRight - xLeft < miniValue) { xLeft = container.Width - miniValue - ViewerConstants.MESS_PADDING_BORDER; } } //1 - On détermine la hauteur que devra prendre le texte int lineWidth = xRight - xLeft; string[] words = message.Text.Split(" ".ToCharArray()); string finalMess = string.Empty; string tempMess = string.Empty; int height = ViewerConstants.MESS_PADDING_CHARACTER; VO_String2D text = AddText(message.FontSize, character.DialogColor); foreach (string word in words) { //On test si le texte ne dépasse pas le width if (string.IsNullOrEmpty(tempMess)) { tempMess = word; } else { tempMess = finalMess + " " + word; } text.Text = tempMess; if ((int)text.Destination.Width > lineWidth) { text.Text = finalMess; height += (int)text.Destination.Height + ViewerConstants.MESS_PADDING_LINES; textes.Add(text); //New message text = AddText(message.FontSize, character.DialogColor); finalMess = word; } else { finalMess = tempMess; } } text.Text = finalMess; height += (int)text.Destination.Height; textes.Add(text); int finalY = character.GetAnimPosition().Y - cameraTop - height; if (finalY < ViewerConstants.MESS_PADDING_BORDER) { finalY = ViewerConstants.MESS_PADDING_BORDER; } Point pos = new Point(character.Location.X - cameraLeft, finalY); for (int i = 0; i < textes.Count; i++) { int newX = character.Location.X - cameraLeft - ((int)textes[i].Destination.Width / 2); int newX2 = newX + (int)textes[i].Destination.Width; if (newX < ViewerConstants.MESS_PADDING_BORDER) { newX = ViewerConstants.MESS_PADDING_BORDER; } else if (newX2 > container.Width - ViewerConstants.MESS_PADDING_BORDER) { newX -= newX2 - container.Width + ViewerConstants.MESS_PADDING_BORDER; } textes[i].Position = new Vector2(newX, finalY + i * ((int)text.Destination.Height + ViewerConstants.MESS_PADDING_LINES)); } } return(textes); }