102 lines
3.3 KiB
VB.net
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 |