Here is a simple approach that uses SetViewOffset for scrolling and places the 3D particle effects at the correct positions using an ortho cam.
Supports 2 layers of particle effects (front and between sprite layers)
You just need to change it to use your own effects and images.
Scroll with A/D, or whatever your default is for GetJoystickX.
settings.fullScr = 1
settings.mainSize = 1.0
settings.scrollSpeed = 300.0
// Initialie AGK rendering
init()
// include the particle addon
#include "inc_gpup.agc"
// Initialize the particle system
gpup_init()
partBack = gpup_loadEffect("magic_green", 0, 0, 0, 2.0)
gpup_emitterActive( partBack, gpup_active )
partFront = gpup_loadEffect("magic_red", 500.0+0.7, 1.6, 0, 2.0)
gpup_emitterActive( partFront, gpup_active )
spriteLayer = LoadSprite("test.png")
SetSpritePosition(spriteLayer, 200, 0)
spriteBack = LoadSprite("back.jpg")
SetSpriteDepth(spriteBack, 110)
SetSpritePosition(spriteBack, 0, 0)
// Main loop
do
settings.tmr = GetFrameTime()
// Update the particle system. Call this every refresh.
gpup_update()
checkSize()
settings.scrollX = settings.scrollX + GetJoystickX() * settings.tmr * settings.scrollSpeed
SetViewOffset(settings.scrollX, 0)
gpup_setGlobalPosition(partBack, Get3DVectorXFromScreen(260-settings.scrollX, 230), Get3DVectorYFromScreen(260, 230), 0)
gpup_setGlobalPosition(partFront, Get3DVectorXFromScreen(510-settings.scrollX, 209)+500, Get3DVectorYFromScreen(510, 209), 0)
Render2DBack()
ClearDepthBuffer()
Render3D()
Print(str(ScreenFPS()) )
Print("Active effects: "+str(gpup_settings.activeEffects))
SetSpritePosition(spriteLayer, 200, 0)
SetSpritePosition(spriteBack, 0, 0)
ClearDepthBuffer()
Render2DFront()
SetCameraPosition(1, GetCameraX(1)+500, 0, -10)
ClearDepthBuffer()
Render3D()
SetCameraPosition(1, GetCameraX(1)-500, 0, -10)
Swap()
//Sync()
if ( GetRawKeyState(27) ) then exit
loop
end
function checkSize()
x = GetDeviceWidth()
y = GetDeviceHeight()
if x<>settings.sx or y<>settings.sy
settings.sx = x
settings.sy = y
settings.scaler = 1920.0/settings.sx
SetVirtualResolution(settings.sx, settings.sy)
SetCameraOrthoWidth( 1, 10.0/settings.scaler )
endif
endfunction
function init()
settings.sx = GetMaxDeviceWidth()*settings.mainSize
settings.sy = GetMaxDeviceHeight()*settings.mainSize
settings.scaler = 1920.0/settings.sx
SetErrorMode(2)
SetWindowTitle( "Runtime Demo" )
SetAntialiasMode( 1 )
SetWindowSize( settings.sx, settings.sy, settings.fullScr)
SetWindowAllowResize(1)
SetVirtualResolution(settings.sx, settings.sy)
UseNewDefaultFonts( 1 )
SetPrintSize( 20 )
SetGenerateMipmaps( 1 )
SetSyncRate( 0, 0 )
setcamerarange(1, 0.1, 20)
SetClearColor( 20,30,130 )
SetCameraFOV(1, 0)
SetCameraOrthoWidth( 1, 10.0/settings.scaler )
SetCameraPosition( 1, 0, 0, -10.0 )
SetCameraLookAt(1, 0, 0, 0, 0)
SetGlobal3DDepth( 100 )
endfunction
type t_settings
sx as float
sy as float
mainSize as float
fullScr as integer
scrollSpeed as float
scaler as float
tmr as float
scrollX as float
endtype
global settings as t_settings
It's admittedly very crude and simple, but I hope it helps to point you in the right direction.
I will work on a better 2D integration soon.