//Metod för utritning av konversations-text public void DrawNPCText(Model.Unit a_friend, bool a_isQuestDialog) { //TextRektangel m_textRect = m_camera.VisualizeRectangle(new Rectangle(a_friend.ThisUnit.Bounds.X, a_friend.ThisUnit.Bounds.Y, 300, 50)); //Visualiserar mapobjektets rektangel m_speakerRect = m_camera.VisualizeRectangle(new Rectangle(a_friend.ThisUnit.Bounds.X, a_friend.ThisUnit.Bounds.Y, a_friend.ThisUnit.Bounds.Width, a_friend.ThisUnit.Bounds.Height)); //Hämtar meddelande string message = null; int state = 0; //Om det är en QuestDialog if (a_isQuestDialog) { message = GetQuestMessage(m_textRect); } //Annars en vanlig dialog else { //Om spelet passerat q3 befinner sig dialogstaten i state 1, annars 0 if (m_questSystem.CurrentQuest.Id > 2) { state = 1; } message = GetMessage(a_friend.UnitId, state); } //Om textrektangeln överlappar med talaren flyttas den i yled if (m_textRect.Intersects(m_speakerRect)) { int overlap = m_textRect.Bottom - m_speakerRect.Top; m_textRect.Y -= overlap; } //Ritar textruta + text if (m_drawDialog) { m_spriteBatch.Draw(m_dialogueWindow, m_textRect, null, Color.White, 0f, Vector2.Zero, SpriteEffects.None, 0f); m_spriteBatch.DrawString(m_spriteFont, message, new Vector2(m_textRect.X + 12, m_textRect.Y + 12), Color.White); if (a_isQuestDialog) { DrawQuestButtons(); } } }
/// <summary> /// Method for rendering of conversation text /// </summary> /// <param name="targetNpc">The source npc unit</param> /// <param name="isQuestDialog">Type of converation</param> public void DrawNPCText(Model.Unit targetNpc, bool isQuestDialog) { //Text rectangle _textRect = _camera.VisualizeRectangle(new Rectangle(targetNpc.ThisUnit.Bounds.X, targetNpc.ThisUnit.Bounds.Y, 300, 50)); //Vizualizing the map-objects rectangle _speakerRect = _camera.VisualizeRectangle(new Rectangle(targetNpc.ThisUnit.Bounds.X, targetNpc.ThisUnit.Bounds.Y, targetNpc.ThisUnit.Bounds.Width, targetNpc.ThisUnit.Bounds.Height)); string message = null; int state = 0; //Quest dialog if (isQuestDialog) { message = GetQuestMessage(_textRect); } //Standard dialog else { //If the game have passed the 3rd quest the dialog-state is 1, else 0 if (_questSystem.CurrentQuest.Id > 2) { state = 1; } message = GetMessage(targetNpc.UnitId, state); } //Moving the text box verticaly if it overlaps the speaker if (_textRect.Intersects(_speakerRect)) { int overlap = _textRect.Bottom - _speakerRect.Top; _textRect.Y -= overlap; } //Drawing textbox and text if (_drawDialog) { _spriteBatch.Draw(_dialogueWindow, _textRect, null, Color.White, 0f, Vector2.Zero, SpriteEffects.None, 0f); _spriteBatch.DrawString(_spriteFont, message, new Vector2(_textRect.X + 12, _textRect.Y + 12), Color.White); if (isQuestDialog) { DrawQuestButtons(); } } }
/// <summary> /// Method for drawing NPCs /// </summary> /// <param name="elapsedTime">Elapsed time in milleseconds</param> private void DrawNPC(float elapsedTime) { foreach (Model.NonPlayerCharacter friend in _nonPlayerCharacters) { //Checks wheter the NPC occurs within the camera screen if (friend.ThisUnit.Bounds.Intersects(_camera.GetScreenRectangle)) { friend.CanAddToQuest = true; //Setting the NPC as target on click if (_inputHandler.DidGetTargetedByLeftClick(_camera.VisualizeRectangle(friend.ThisUnit.Bounds)) || _inputHandler.DidGetTargetedByRightClick(_camera.VisualizeRectangle(friend.ThisUnit.Bounds))) { _player.Target = friend; } Vector2 interactPosition = _camera.VisualizeCordinates(friend.ThisUnit.Bounds.X + 10, friend.ThisUnit.Bounds.Y - 24); int bubble = -1; //Drawing dialog box if the NPC ID excists in the XML file for Dialogs if (_conversation.DialogueList.Exists(Message => Message.id == friend.UnitId)) { friend.CanInterract = true; bubble = Convert.ToInt32(Texture.INTERACT); } else if ((_questSystem.QuestList.Exists(Quest => _questSystem.ActiveNpc == friend.UnitId && Quest.Id == _questSystem.CurrentQuest.Id))) { friend.CanInterract = true; if (_questSystem.CurrentQuest.Status == Model.QuestSystem.END) { bubble = Convert.ToInt32(Texture.INTERACT_Q_COMPLETE); } else if (_questSystem.CurrentQuest.Status == Model.QuestSystem.PRE) { bubble = Convert.ToInt32(Texture.INTERACT_Q); } else { bubble = Convert.ToInt32(Texture.INTERACT); } } else { friend.CanInterract = false; } if (friend.CanInterract) { _spriteBatch.Draw(_textures[bubble], new Rectangle((int)interactPosition.X, (int)interactPosition.Y, 30, 30), Color.White); } //Drawing NPC Vector2 npcPosition = _camera.VisualizeCordinates(friend.ThisUnit.Bounds.X + 8, friend.ThisUnit.Bounds.Y + 8); AnimationSystem.Texture animation = 0; if (friend.Type == Model.NonPlayerCharacter.OLD_MAN) { animation = AnimationSystem.Texture.OLD_MAN; } else { animation = AnimationSystem.Texture.CITY_GUARD; } //Drawing target circle DrawTargetCircle(_player, friend); _animationSystem.UpdateAndDraw(elapsedTime, Color.White, npcPosition, friend.UnitState, animation); } else { friend.CanAddToQuest = false; } } }
//Metod för utritning av friendly NPCs private void DrawFriendlyNPC(float a_elapsedTime) { foreach (Model.Friend friend in m_friends) { //Kollar att npcn är med på skärmen if (friend.ThisUnit.Bounds.Intersects(m_camera.GetScreenRectangle)) { friend.CanAddToQuest = true; //Om man klickar på FNPC sätts den till spelarens target if (m_inputHandler.DidGetTargetedByLeftClick(m_camera.VisualizeRectangle(friend.ThisUnit.Bounds)) || m_inputHandler.DidGetTargetedByRightClick(m_camera.VisualizeRectangle(friend.ThisUnit.Bounds))) { m_player.Target = friend; } Vector2 interactPosition = m_camera.VisualizeCordinates(friend.ThisUnit.Bounds.X + 10, friend.ThisUnit.Bounds.Y - 24); int bubble = -1; //Ritar ut pratbubbla om NPCns ID ingår i XML filen för konversationer if (m_conversation.m_dialogueList.Exists(Message => Message.id == friend.UnitId)) { friend.CanInterract = true; bubble = INTERACT; } else if ((m_questSystem.QuestList.Exists(Quest => m_questSystem.ActiveNpc == friend.UnitId && Quest.Id == m_questSystem.CurrentQuest.Id))) { friend.CanInterract = true; if (m_questSystem.CurrentQuest.Status == Model.QuestSystem.END) { bubble = INTERACT_Q_COMPLETE; } else if (m_questSystem.CurrentQuest.Status == Model.QuestSystem.PRE) { bubble = INTERACT_Q; } else { bubble = INTERACT; } } else { friend.CanInterract = false; } if (friend.CanInterract) { m_spriteBatch.Draw(m_textures[bubble], new Rectangle((int)interactPosition.X, (int)interactPosition.Y, 30, 30), Color.White); } //Ritar NPC Vector2 npcPosition = m_camera.VisualizeCordinates(friend.ThisUnit.Bounds.X + 8, friend.ThisUnit.Bounds.Y + 8); int animation = 0; if (friend.Type == Model.Friend.OLD_MAN) { animation = AnimationSystem.NPC_OLD_MAN; } else { animation = AnimationSystem.CITY_GUARD; } //Ritar target ringen. DrawTargetCircle(m_player, friend); m_animationSystem.UpdateAndDraw(a_elapsedTime, Color.White, npcPosition, friend.UnitState, animation); } else { friend.CanAddToQuest = false; } } }