Una vez creada la clase Enemigo, vamos con el radar. Lo primero es descargarse desde aquí los diseños. En la clase Motor vamos a declarar, al igual que para el HudBar una serie de texturas para emplear:
'HUD RADAR
Dim TexturaRadar As Texture
Dim Texturap1 As Texture
Dim Texturap2 As Texture
Dim Texturap3 As Texture
Dim TexturaRadar As Texture
Dim Texturap1 As Texture
Dim Texturap2 As Texture
Dim Texturap3 As Texture
También vamos a declarar un array de enemigos, 3 en nuestro caso, en la clase Motor.
'Control enemigos
Dim Enemigos(2) As Enemigo
Dim cont As Integer
Dim Enemigos(2) As Enemigo
Dim cont As Integer
A continuación vamos a inicializar todo en POSConfigurarDX, añadiendo estas líneas a continuación de lo que teníamos.
'HUD
HUD = New Sprite(DP3)
TexturaBarraVida = TextureLoader.FromFile(DP3, Application.StartupPath & "\3d\HUD\hudbar1.png")
TexturaRellenoBarraVida = TextureLoader.FromFile(DP3, Application.StartupPath & "\3d\HUD\hudfiller.png")
TexturaRellenoBarraMana = TextureLoader.FromFile(DP3, Application.StartupPath & "\3d\HUD\hudfiller2.png")
TexturaRadar = TextureLoader.FromFile(DP3, Application.StartupPath & "\3d\HUD\HudRadar1.png")
Texturap1 = TextureLoader.FromFile(DP3, Application.StartupPath & "\3d\HUD\p1.png")
Texturap2 = TextureLoader.FromFile(DP3, Application.StartupPath & "\3d\HUD\p2.png")
Texturap3 = TextureLoader.FromFile(DP3, Application.StartupPath & "\3d\HUD\p3.png")
'ENEMIGOS
For i As Byte = 0 To 2
Enemigos(i) = New Enemigo
Enemigos(i).ESTADO = i + 1
Enemigos(i).Muevete(New Vector3(i, i + 2, +i))
Next
HUD = New Sprite(DP3)
TexturaBarraVida = TextureLoader.FromFile(DP3, Application.StartupPath & "\3d\HUD\hudbar1.png")
TexturaRellenoBarraVida = TextureLoader.FromFile(DP3, Application.StartupPath & "\3d\HUD\hudfiller.png")
TexturaRellenoBarraMana = TextureLoader.FromFile(DP3, Application.StartupPath & "\3d\HUD\hudfiller2.png")
TexturaRadar = TextureLoader.FromFile(DP3, Application.StartupPath & "\3d\HUD\HudRadar1.png")
Texturap1 = TextureLoader.FromFile(DP3, Application.StartupPath & "\3d\HUD\p1.png")
Texturap2 = TextureLoader.FromFile(DP3, Application.StartupPath & "\3d\HUD\p2.png")
Texturap3 = TextureLoader.FromFile(DP3, Application.StartupPath & "\3d\HUD\p3.png")
'ENEMIGOS
For i As Byte = 0 To 2
Enemigos(i) = New Enemigo
Enemigos(i).ESTADO = i + 1
Enemigos(i).Muevete(New Vector3(i, i + 2, +i))
Next
Simplemente iniciamos las texturas del radar, prestar atención a la ruta por si no os coincide. También tenemos un bucle for que permite iniciar cada enemigo a un estado (1,2,3) y le damos un punto de inicio mediante el método "muevete".Con esto tenemos todo iniciado.
Ahora vamos al Sub PintaHud y añadir esto:
HUD.Draw2D(TexturaRadar, New Point(0, 0), 0, New Point(1450, 10), Color.White)
For i = 0 To 2
If Enemigos(i).ESTADO = 1 Then HUD.Draw2D(Texturap1, New Point(0, 0), 0, New Point(1460 + cont / 35, 45), Color.White)
If Enemigos(i).ESTADO = 2 Then HUD.Draw2D(Texturap2, New Point(0, 0), 0, New Point(1480 + cont / 5, 75), Color.White)
If Enemigos(i).ESTADO = 3 Then HUD.Draw2D(Texturap3, New Point(0, 0), 0, New Point(1495 + cont / 20, 85), Color.White)
Next
For i = 0 To 2
If Enemigos(i).ESTADO = 1 Then HUD.Draw2D(Texturap1, New Point(0, 0), 0, New Point(1460 + cont / 35, 45), Color.White)
If Enemigos(i).ESTADO = 2 Then HUD.Draw2D(Texturap2, New Point(0, 0), 0, New Point(1480 + cont / 5, 75), Color.White)
If Enemigos(i).ESTADO = 3 Then HUD.Draw2D(Texturap3, New Point(0, 0), 0, New Point(1495 + cont / 20, 85), Color.White)
Next
Básicamente dibujamos la textura base del Radar, y, mediante un bucle recorremos todos los enemigos y, según su estado, vamos dibujando un punto de color diferente con Texturap1, Texturap2, Texturap3.
Ahora vamos a crear un Sub en la clase Motor de esta forma:
Public Sub IA(ByRef VC As Vector3)
Try
Dim v_mov As New Vector3
If cont >= 200 Then
v_mov = Enemigos(2).POS + (VC - Enemigos(2).POS)
v_mov = Vector3.Normalize(v_mov) * 0.5
Enemigos(2).Muevete(v_mov)
cont = 0
Else
cont += 1
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Y la implementamos en Form1 en el Bucle de esta forma,
Private Sub Bucle()
Try
Do While Start = True
Engine.Control_Matrices(PosicionCamara, Dispo3D)
Engine.Render(Dispo3D, PosicionCamara)
Engine.IA(PosicionCamara)
Application.DoEvents()
Loop
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Bien, vamos a explicar esto un poco. Tenemos una variable contador que, cada 200 iteraciones y, para el enemigo que está en estado de alerta (el de índice 2), va a calcular que el enemigo avance hacia la posición de la cámara. Para esto tengo a v_mov que calcula un vector en la dirección de la cámara desde la posición actual del enemigo, lo normaliza y lo multiplica por 0,5 que es la velocidad del enemigo, podríamos tener distintos valores para cada tipo de enemigo definidos en la clase Enemigo.
Bien, si ejecutais ahora vereis que, el radar funciona pero todavía no hace más que dibujar puntos, tenemos que regularizar la posición de los enemigos para que sea "real".
No hay comentarios:
Publicar un comentario