P3D-Legacy/P3D/Entites/Enviroment/ScriptBlock.vb

128 lines
3.9 KiB
VB.net

Public Class ScriptBlock
Inherits Entity
Public Shared TriggeredScriptBlock As Boolean = False
Dim TriggerID As Integer = 0
Dim _scriptID As String = "0"
Dim AcceptedRotations As New List(Of Integer)
Dim ActivateScript As Boolean = False
Dim clickedToActivate As Boolean = False
Public Overrides Sub Initialize()
MyBase.Initialize()
Me.TriggerID = Me.ActionValue
If Me.AdditionalValue.Contains(",") Then
Dim Data() As String = Me.AdditionalValue.Split(CChar(","))
For i = 0 To Data.Count - 2
AcceptedRotations.Add(CInt(Data(i)))
Next
Me._scriptID = Data(Data.Count - 1)
Else
Me._scriptID = Me.AdditionalValue
End If
Me.NeedsUpdate = True
If Me.TriggerID = 0 Then
Me.Visible = False
End If
End Sub
Public Overrides Function WalkIntoFunction() As Boolean
If Me.TriggerID = 0 Or Me.TriggerID = 4 Then
ActivateScript = True
TriggeredScriptBlock = True
If ActionScript.TempInputDirection = -1 Then
ActionScript.TempInputDirection = Screen.Camera.GetPlayerFacingDirection()
End If
If Screen.Camera.Name = "Overworld" Then
If CType(Screen.Camera, OverworldCamera).FreeCameraMode = False Then
CType(Screen.Camera, OverworldCamera).YawLocked = True
End If
End If
Screen.Level.WalkedSteps = 0
Screen.Level.PokemonEncounterData.EncounteredPokemon = False
End If
Return False
End Function
Public Overrides Sub ClickFunction()
If Me.TriggerID = 1 Then
ActionScript.TempInputDirection = -1
Me.clickedToActivate = True
TriggerScript(False)
End If
End Sub
Public Overrides Sub Update()
If Me.ActivateScript = True And Screen.Camera.Position.X = Me.Position.X And Screen.Camera.Position.Z = Me.Position.Z And CInt(Screen.Camera.Position.Y) = CInt(Me.Position.Y) Then
Screen.Camera.StopMovement()
ActivateScript = False
TriggerScript(False)
End If
MyBase.Update()
End Sub
Public Sub TriggerScript(ByVal canAttach As Boolean)
If Core.CurrentScreen.Identification = Screen.Identifications.OverworldScreen Then
Dim oS As OverworldScreen = CType(Core.CurrentScreen, OverworldScreen)
If oS.ActionScript.IsReady = True Or canAttach = True Then
If Me.CorrectRotation() = True Then
If Me.clickedToActivate = True Then
Me.clickedToActivate = False
SoundManager.PlaySound("select")
End If
oS.ActionScript.StartScript(Me._scriptID, GetActivationID())
ActionScript.TempSpin = True
End If
End If
End If
TriggeredScriptBlock = False
End Sub
Public Function GetActivationID() As Integer
Dim activationID As Integer = 0
Select Case Me.TriggerID
Case 0, 1, 4
activationID = 0
Case 2
activationID = 1
Case 3
activationID = 2
End Select
Return activationID
End Function
Public Function CorrectRotation() As Boolean
Dim activate As Boolean = False
If AcceptedRotations.Count > 0 Then
If AcceptedRotations.Contains(Screen.Camera.GetPlayerFacingDirection()) Then
activate = True
End If
Else
activate = True
End If
Return activate
End Function
Public Overrides Sub Render()
Me.Draw(Me.Model, Textures, True)
End Sub
Public ReadOnly Property ScriptID() As String
Get
Return Me._scriptID
End Get
End Property
End Class