Implemented Notification system
This commit is contained in:
parent
88fc909529
commit
464e1d8c31
|
@ -90,6 +90,15 @@ Special_Attack,Special Attack
|
|||
Special_Defense,Special Defense
|
||||
Speed,Speed
|
||||
---
|
||||
GameInteractions:
|
||||
game_interaction_interact,Interact
|
||||
game_interaction_gamemenu,Game Menu
|
||||
game_interaction_pokegear,Pokégear
|
||||
game_interaction_pausemenu,Pause Menu
|
||||
game_interaction_notification,Notification
|
||||
game_notification_respond,Press <button.special> to respond to the notification.
|
||||
game_notification_dismiss,Press <button.special> to dismiss the notification.
|
||||
---
|
||||
MainMenuScreen:
|
||||
main_menu_continue,Continue
|
||||
main_menu_load_game,Load Game
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
Binary file not shown.
After Width: | Height: | Size: 640 B |
|
@ -0,0 +1,176 @@
|
|||
''' <summary>
|
||||
''' The notification popup.
|
||||
''' </summary>
|
||||
Public Class NotificationPopup
|
||||
|
||||
Private _background As Texture2D
|
||||
Private _box As Texture2D
|
||||
Private _icon As Texture2D
|
||||
Private FrameSizeBack As Integer
|
||||
Private FramesizeBox As Integer
|
||||
Private FramesizeIcon As Integer
|
||||
Private _positionY As Single = -12
|
||||
Private _delay As Date
|
||||
Private _soundEffect As String = ""
|
||||
Private _text As String = ""
|
||||
Private _size As Size = New Size(10, 3)
|
||||
Private _backgroundIndex As Vector2 = New Vector2(0, 0)
|
||||
Private _iconIndex As Vector2 = New Vector2(0, 0)
|
||||
|
||||
Public _waitForInput As Boolean = False
|
||||
Public _scriptFile As String = ""
|
||||
|
||||
Public _show As Boolean = False
|
||||
|
||||
''' <summary>
|
||||
''' Sets the values of the NotificationPopup and displays it on the screen.
|
||||
''' </summary>
|
||||
Public Sub Setup(Text As String, Optional Delay As Integer = 500, Optional BackgroundIndex As Integer = 0, Optional IconIndex As Integer = 0, Optional SoundEffect As String = "", Optional ScriptFile As String = "")
|
||||
_text = Text
|
||||
|
||||
If Delay <= 0 Then
|
||||
_waitForInput = True
|
||||
_delay = Date.Now
|
||||
Else
|
||||
_delay = Date.Now.AddMilliseconds(CDbl(Delay * 10))
|
||||
End If
|
||||
|
||||
_backgroundIndex = New Vector2(BackgroundIndex, 0)
|
||||
While _backgroundIndex.X >= 3
|
||||
_backgroundIndex.X -= 3
|
||||
_backgroundIndex.Y += 1
|
||||
End While
|
||||
If _backgroundIndex.X < 0 Then
|
||||
_backgroundIndex.X = 0
|
||||
End If
|
||||
FrameSizeBack = CInt(TextureManager.GetTexture(GameModeManager.ActiveGameMode.ContentPath & "Textures\Notifications\Backgrounds").Width / 3)
|
||||
_background = TextureManager.GetTexture(GameModeManager.ActiveGameMode.ContentPath & "Textures\Notifications\Backgrounds", New Rectangle(CInt(_backgroundIndex.X * FrameSizeBack), CInt(_backgroundIndex.Y * FrameSizeBack), FrameSizeBack, FrameSizeBack))
|
||||
|
||||
_positionY = CInt(0 - _size.Height * (FrameSizeBack / 3) - 12)
|
||||
|
||||
FramesizeBox = CInt(TextureManager.GetTexture(GameModeManager.ActiveGameMode.ContentPath & "Textures\Notifications\Boxes").Width / 3)
|
||||
_box = TextureManager.GetTexture(GameModeManager.ActiveGameMode.ContentPath & "Textures\Notifications\Backgrounds", New Rectangle(CInt(_backgroundIndex.X * FramesizeBox), CInt(_backgroundIndex.Y * FramesizeBox), FramesizeBox, FramesizeBox))
|
||||
|
||||
FramesizeIcon = CInt(TextureManager.GetTexture(GameModeManager.ActiveGameMode.ContentPath & "Textures\Notifications\Icons").Width / 3)
|
||||
_iconIndex = New Vector2(IconIndex, 0)
|
||||
While _iconIndex.X >= 3
|
||||
_iconIndex.X -= 3
|
||||
_iconIndex.Y += 1
|
||||
End While
|
||||
If _iconIndex.X < 0 Then
|
||||
_iconIndex.X = 0
|
||||
End If
|
||||
_icon = TextureManager.GetTexture(GameModeManager.ActiveGameMode.ContentPath & "Textures\Notifications\Icons", New Rectangle(CInt(_iconIndex.X * FramesizeIcon), CInt(_iconIndex.Y * FramesizeIcon), FramesizeIcon, FramesizeIcon))
|
||||
|
||||
_scriptFile = ScriptFile
|
||||
|
||||
If Me._scriptFile <> "" Then
|
||||
Me._text &= "~[" & Localization.GetString("game_notification_respond") & "]"
|
||||
Else
|
||||
Me._text &= "~[" & Localization.GetString("game_notification_dismiss") & "]"
|
||||
End If
|
||||
|
||||
_soundEffect = SoundEffect
|
||||
_show = True
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' Execute the specified script
|
||||
''' </summary>
|
||||
Public Sub Accept()
|
||||
CType(Core.CurrentScreen, OverworldScreen).ActionScript.StartScript(_scriptFile, 0, False)
|
||||
Me._waitForInput = False
|
||||
Me._delay = Date.Now
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' Dismiss the Popup
|
||||
''' </summary>
|
||||
Public Sub Dismiss()
|
||||
Me._waitForInput = False
|
||||
Me._delay = Date.Now
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' Update the NotificationPopup.
|
||||
''' </summary>
|
||||
Public Sub Update()
|
||||
If Date.Now < Me._delay Then
|
||||
If Me._positionY < 5.0F Then
|
||||
Me._positionY += CInt(0.7 * (FrameSizeBack / _size.Height))
|
||||
Else
|
||||
If _soundEffect IsNot "" Then
|
||||
SoundManager.PlaySound("Notifications\" & _soundEffect)
|
||||
_soundEffect = ""
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
If _waitForInput = False Then
|
||||
Dim BackY As Integer = CInt(0 - _size.Height * FrameSizeBack - 12)
|
||||
If Me._positionY > BackY Then
|
||||
Me._positionY -= CInt(0.7 * (FrameSizeBack / _size.Height))
|
||||
If Me._positionY <= BackY Then
|
||||
Me._positionY = BackY
|
||||
Me._show = False
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
If Me._scriptFile <> "" Then
|
||||
CType(Core.CurrentScreen, OverworldScreen).ActionScript.StartScript(Me._scriptFile, 0, False)
|
||||
Me._waitForInput = False
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' Renders the NotificationPopup.
|
||||
''' </summary>
|
||||
Public Sub Draw()
|
||||
If Me._show = True Then
|
||||
Dim TextBody As String = ""
|
||||
Dim TextHeader As String
|
||||
Dim Scale As Double = SpriteBatch.InterfaceScale() * 2
|
||||
|
||||
If _text.Contains("*") Then
|
||||
TextHeader = _text.GetSplit(0, "*").Replace(CChar("~"), Environment.NewLine)
|
||||
TextBody = _text.GetSplit(1, "*").Replace(CChar("~"), Environment.NewLine)
|
||||
Else
|
||||
TextHeader = _text.Replace(CChar("~"), Environment.NewLine)
|
||||
End If
|
||||
|
||||
While FontManager.InGameFont.MeasureString(_text.Replace(CChar("~"), Environment.NewLine)).Y > CInt(_size.Height * FrameSizeBack - 2 * FrameSizeBack)
|
||||
_size.Height += 1
|
||||
End While
|
||||
|
||||
Dim BackGroundOffsetX As Integer = CInt(Core.windowSize.Width - _size.Width * FrameSizeBack - 5)
|
||||
Dim TextOffset As Integer
|
||||
|
||||
'Draw the frame.
|
||||
Canvas.DrawImageBorder(_background, CInt(Scale), New Rectangle(BackGroundOffsetX, CInt(Me._positionY), CInt(_size.Width * FrameSizeBack), CInt(_size.Height * FrameSizeBack)), True)
|
||||
|
||||
'Draw the (icon) box.
|
||||
Core.SpriteBatch.DrawInterface(_box, New Rectangle(CInt(FramesizeBox * Scale + 5), CInt(FramesizeBox * Scale + Me._positionY), CInt(_box.Width * Scale), CInt(_box.Height * Scale)), Color.White)
|
||||
|
||||
'Draw the icon.
|
||||
Core.SpriteBatch.DrawInterface(_icon, New Rectangle(CInt(FramesizeIcon * Scale + 5), CInt(FramesizeIcon * Scale + Me._positionY), CInt(_icon.Width * Scale), CInt(_icon.Height * Scale)), Color.White)
|
||||
|
||||
TextOffset = CInt(FrameSizeBack * Scale + BackGroundOffsetX * Scale)
|
||||
|
||||
If TextBody <> "" Then
|
||||
If TextHeader <> "" Then
|
||||
'Draw the header, then the body
|
||||
Core.SpriteBatch.DrawInterfaceString(FontManager.InGameFont, TextBody.CropStringToWidth(FontManager.InGameFont, CInt(Scale), CInt(_size.Width * FrameSizeBack - FrameSizeBack * 4)), New Vector2(TextOffset, CInt(Me._positionY + FrameSizeBack)), Color.Black)
|
||||
Core.SpriteBatch.DrawInterfaceString(FontManager.InGameFont, TextHeader.CropStringToWidth(FontManager.InGameFont, CInt(Scale / 2), CInt(_size.Width * FrameSizeBack - FrameSizeBack * 4)), New Vector2(TextOffset, CInt(Me._positionY + FrameSizeBack + FontManager.InGameFont.MeasureString(TextHeader).Y)), Color.Black)
|
||||
Else
|
||||
'Just draw the body
|
||||
Core.SpriteBatch.DrawInterfaceString(FontManager.InGameFont, TextBody.CropStringToWidth(FontManager.InGameFont, CInt(Scale / 2), CInt(_size.Width * FrameSizeBack - FrameSizeBack * 4)), New Vector2(TextOffset, CInt(Me._positionY + FrameSizeBack)), Color.Black)
|
||||
End If
|
||||
Else
|
||||
'Just draw the header
|
||||
Core.SpriteBatch.DrawInterfaceString(FontManager.InGameFont, TextHeader.CropStringToWidth(FontManager.InGameFont, CInt(Scale), CInt(_size.Width * FrameSizeBack) - FrameSizeBack * 4), New Vector2(TextOffset, CInt(Me._positionY + FrameSizeBack)), Color.Black)
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
End Class
|
|
@ -12,6 +12,7 @@ Public Class OverworldScreen
|
|||
Private Shared _fadeColor As Color = Color.Black 'Fade screen color.
|
||||
Private Shared _fadeValue As Integer = 0 'Fade progress value for the screen fade.
|
||||
Private Shared _drawRodID As Integer = -1 'The rod ID to display on the screen during the fishing animation.
|
||||
Public NotificationPopupList As List(Of NotificationPopup) = Nothing
|
||||
|
||||
Private _actionScript As ActionScript 'Private ActionScript instance.
|
||||
Private _particlesTexture As Texture2D 'A texture field to contain the particles texture, currently only used for the crosshair.
|
||||
|
@ -188,6 +189,16 @@ Public Class OverworldScreen
|
|||
PokemonImageView.Update()
|
||||
End If
|
||||
|
||||
If Level.NotificationPopup IsNot Nothing Then
|
||||
Level.NotificationPopup.Update()
|
||||
If Level.NotificationPopup._show = False Then
|
||||
Level.NotificationPopup = Nothing
|
||||
End If
|
||||
ElseIf NotificationPopupList.Count > 0 Then
|
||||
Level.NotificationPopup = NotificationPopupList(0)
|
||||
NotificationPopupList.RemoveAt(0)
|
||||
End If
|
||||
|
||||
'Middle click/Thumbstick press: Show first Pokémon in party.
|
||||
If ActionScript.IsReady = True Then
|
||||
If MouseHandler.ButtonPressed(MouseHandler.MouseButtons.MiddleButton) = True Or ControllerHandler.ButtonPressed(Buttons.LeftStick) = True Then
|
||||
|
@ -217,7 +228,6 @@ Public Class OverworldScreen
|
|||
If KeyBoardHandler.KeyPressed(KeyBindings.OpenInventoryKey) = True Or ControllerHandler.ButtonPressed(Buttons.X) = True Then
|
||||
If Screen.Camera.IsMoving() = False And ActionScript.IsReady = True Then
|
||||
Level.RouteSign.Hide()
|
||||
|
||||
SoundManager.PlaySound("menu_open")
|
||||
Core.SetScreen(New NewMenuScreen(Me))
|
||||
End If
|
||||
|
@ -225,13 +235,20 @@ Public Class OverworldScreen
|
|||
|
||||
'Open the PokégearScreen:
|
||||
If KeyBoardHandler.KeyPressed(KeyBindings.SpecialKey) = True Or ControllerHandler.ButtonPressed(Buttons.Y) = True Then
|
||||
If Level.NotificationPopup Is Nothing Then
|
||||
If Core.Player.HasPokegear = True Or GameController.IS_DEBUG_ACTIVE = True Or Core.Player.SandBoxMode = True Then
|
||||
If Screen.Camera.IsMoving() = False And ActionScript.IsReady = True Then
|
||||
Core.SetScreen(New GameJolt.PokegearScreen(Me, GameJolt.PokegearScreen.EntryModes.MainMenu, {}))
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
If Level.NotificationPopup._scriptFile <> "" Then
|
||||
Level.NotificationPopup.Accept()
|
||||
Else
|
||||
Level.NotificationPopup.Dismiss()
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
|
||||
ActionScript.Update() 'Update the action script.
|
||||
Else 'Dialogues are showing:
|
||||
'Update some parts of the camera:
|
||||
|
@ -342,17 +359,28 @@ Public Class OverworldScreen
|
|||
|
||||
Level.RouteSign.Draw()
|
||||
|
||||
If Level.NotificationPopup IsNot Nothing Then
|
||||
Level.NotificationPopup.Draw()
|
||||
End If
|
||||
|
||||
'If the XBOX render control delay is 0, render the controls.
|
||||
If ShowControlsDelay = 0.0F Then
|
||||
Dim d As New Dictionary(Of Buttons, String)
|
||||
d.Add(Buttons.A, "Interact")
|
||||
d.Add(Buttons.X, "Menu")
|
||||
|
||||
If Core.Player.HasPokegear = True Then
|
||||
d.Add(Buttons.Y, "Pokégear")
|
||||
If Level.NotificationPopup IsNot Nothing Then
|
||||
If Level.NotificationPopup._scriptFile <> "" Then
|
||||
d.Add(Buttons.A, Localization.GetString("game_interaction_notification", "Notification"))
|
||||
Else
|
||||
End If
|
||||
Else
|
||||
d.Add(Buttons.A, Localization.GetString("game_interaction_interact", "Interact"))
|
||||
End If
|
||||
|
||||
d.Add(Buttons.Start, "Game Menu")
|
||||
d.Add(Buttons.X, Localization.GetString("game_interaction_gamemenu", "Game Menu"))
|
||||
If Core.Player.HasPokegear = True Then
|
||||
d.Add(Buttons.Y, Localization.GetString("game_interaction_pokegear", "Pokégear"))
|
||||
End If
|
||||
d.Add(Buttons.Start, Localization.GetString("game_interaction_pausemenu", "Game Menu"))
|
||||
|
||||
DrawGamePadControls(d)
|
||||
End If
|
||||
|
|
|
@ -15325,6 +15325,9 @@
|
|||
<Content Include="Content\Sounds\Heal_Party.wav">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Content\Sounds\Notifications\Phone.wav">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Content\Sounds\PC\LogOn.wav">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
|
@ -15577,6 +15580,12 @@
|
|||
<Content Include="Content\Textures\Emblem\victorious.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Content\Textures\Notifications\Backgrounds.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Content\Textures\Notifications\Boxes.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Content\Textures\NPC\0_bow.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
|
@ -27523,6 +27532,8 @@
|
|||
<Compile Include="Battle\BattleAnimations\BABillSize.vb" />
|
||||
<Compile Include="Battle\BattleAnimations\BASound.vb" />
|
||||
<Compile Include="Battle\BattleSystemV2\QueryObjects\AnimationQueryObject.vb" />
|
||||
<Compile Include="Overworld\NotificationPopup.vb" />
|
||||
<Compile Include="Overworld\RouteSign.vb" />
|
||||
<Compile Include="Pokemon\Abilities\Aerilate.vb" />
|
||||
<Compile Include="Pokemon\Abilities\PsychicSurge.vb" />
|
||||
<Compile Include="Pokemon\Abilities\MistySurge.vb" />
|
||||
|
@ -29322,7 +29333,6 @@
|
|||
<Compile Include="Overworld\OverworldCamera.vb" />
|
||||
<Compile Include="Overworld\OverworldScreen.vb" />
|
||||
<Compile Include="Overworld\OverworldStorage.vb" />
|
||||
<Compile Include="Overworld\RouteSign.vb" />
|
||||
<Compile Include="Overworld\SecretBase\SecretBase.vb" />
|
||||
<Compile Include="Overworld\SecretBase\SecretBaseCamera.vb" />
|
||||
<Compile Include="Overworld\SecretBase\SecretBaseScreen.vb" />
|
||||
|
|
|
@ -11,6 +11,32 @@
|
|||
Dim argument As String = ScriptComparer.GetSubClassArgumentPair(subClass).Argument
|
||||
|
||||
Select Case command.ToLower()
|
||||
Case "notification"
|
||||
Dim _NotificationPopup As New NotificationPopup
|
||||
Dim args As String() = argument.Split(CChar(","))
|
||||
Select Case args.Length
|
||||
Case 1
|
||||
_NotificationPopup.Setup(args(0))
|
||||
Case 2
|
||||
_NotificationPopup.Setup(args(0), CInt(args(1)))
|
||||
Case 3
|
||||
_NotificationPopup.Setup(args(0), CInt(args(1)), CInt(args(2)))
|
||||
Case 4
|
||||
_NotificationPopup.Setup(args(0), CInt(args(1)), CInt(args(2)), CInt(args(3)))
|
||||
Case 5
|
||||
_NotificationPopup.Setup(args(0), CInt(args(1)), CInt(args(2)), CInt(args(3)), args(4))
|
||||
Case 6, 7
|
||||
_NotificationPopup.Setup(args(0), CInt(args(1)), CInt(args(2)), CInt(args(3)), args(4), args(5))
|
||||
End Select
|
||||
If args.Length = 7 AndAlso CBool(args(6)) = True Then
|
||||
CType(CurrentScreen, OverworldScreen).NotificationPopupList.Insert(0, _NotificationPopup)
|
||||
If Screen.Level.NotificationPopup IsNot Nothing Then
|
||||
CType(CurrentScreen, OverworldScreen).NotificationPopupList.Insert(1, Screen.Level.NotificationPopup)
|
||||
Screen.Level.NotificationPopup = Nothing
|
||||
Else
|
||||
CType(CurrentScreen, OverworldScreen).NotificationPopupList.Add(_NotificationPopup)
|
||||
End If
|
||||
End If
|
||||
Case "show"
|
||||
Screen.TextBox.reDelay = 0.0F
|
||||
Screen.TextBox.Show(argument, {}, False, False)
|
||||
|
|
|
@ -7,6 +7,7 @@ Public Class Level
|
|||
#Region "Fields"
|
||||
|
||||
Private _routeSign As RouteSign = Nothing
|
||||
Private _notificationPopup As NotificationPopup = Nothing
|
||||
Private _world As World = Nothing
|
||||
Private _pokemonEncounter As PokemonEncounter = Nothing
|
||||
|
||||
|
@ -98,6 +99,14 @@ Public Class Level
|
|||
Return Me._routeSign
|
||||
End Get
|
||||
End Property
|
||||
Public Property NotificationPopup() As NotificationPopup
|
||||
Set(value As NotificationPopup)
|
||||
Me._notificationPopup = value
|
||||
End Set
|
||||
Get
|
||||
Return Me._notificationPopup
|
||||
End Get
|
||||
End Property
|
||||
|
||||
''' <summary>
|
||||
''' Indicates whether the player is Surfing.
|
||||
|
|
Loading…
Reference in New Issue