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

107 lines
3.4 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()
If Me.Model Is Nothing Then
Me.Draw(Me.BaseModel, Textures, False)
Else
UpdateModel()
Draw(Me.BaseModel, Me.Textures, True, Me.Model)
End If
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