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

102 lines
3.3 KiB
VB.net

Public Class RotationTile
Inherits Entity
Public Enum RotationTypes
StartSpin
StopSpin
End Enum
Dim RotationType As RotationTypes
Dim RotateTo As Integer = 0
Public Overrides Sub Initialize()
MyBase.Initialize()
Select Case Me.ActionValue
Case 0
Me.RotationType = RotationTypes.StartSpin
Case 1
Me.RotationType = RotationTypes.StopSpin
End Select
Me.RotateTo = CInt(Me.AdditionalValue)
Me.NeedsUpdate = True
End Sub
Public Overrides Sub Update()
If Me.RotationType = RotationTypes.StartSpin Then
If Core.CurrentScreen.Identification = Screen.Identifications.OverworldScreen Then
If CType(Core.CurrentScreen, OverworldScreen).ActionScript.IsReady = True Then
If Me.Position.X = Screen.Camera.Position.X And CInt(Me.Position.Y) = CInt(Screen.Camera.Position.Y) And Me.Position.Z = Screen.Camera.Position.Z Then
Dim steps As Integer = GetSteps()
Dim s As String = "version=2" & Environment.NewLine &
"@player.move(0)" & Environment.NewLine &
"@player.turnto(" & Me.RotateTo.ToString() & ")" & Environment.NewLine &
"@player.move(" & steps & ")" & Environment.NewLine &
":end"
CType(Core.CurrentScreen, OverworldScreen).ActionScript.StartScript(s, 2)
End If
End If
End If
End If
End Sub
Private Function GetSteps() As Integer
Dim steps As Integer = 0
Dim direction As Vector2 = New Vector2(0)
Select Case Me.RotateTo
Case 0
direction.Y = -1
Case 1
direction.X = -1
Case 2
direction.Y = 1
Case 3
direction.X = 1
End Select
Dim stepY As Integer = CInt(direction.Y)
If stepY = 0 Then
stepY = 1
End If
For x = 0 To direction.X * 100 Step direction.X
For y = 0 To direction.Y * 100 Step stepY
Dim p As Vector3 = New Vector3(x, 0, y) + Me.Position
For Each e As Entity In Screen.Level.Entities
If e.Equals(Me) = False Then
If e.EntityID.ToLower() = "rotationtile" Then
If CInt(e.Position.X) = CInt(p.X) And CInt(e.Position.Y) = CInt(p.Y) And CInt(e.Position.Z) = CInt(p.Z) Then
GoTo theend
End If
End If
End If
Next
steps += 1
Next
Next
theend:
Return steps
End Function
Public Overrides Sub Render()
Me.Draw(Me.Model, Textures, False)
End Sub
Public Overrides Function LetPlayerMove() As Boolean
Return Me.RotationType = RotationTypes.StopSpin
End Function
Public Overrides Function WalkIntoFunction() As Boolean
If Me.RotationType = RotationTypes.StartSpin Then
CType(Screen.Camera, OverworldCamera).YawLocked = True
End If
Return False
End Function
End Class