Files
prosperon/examples/test_particles.ce
2026-02-26 15:54:11 -06:00

302 lines
6.7 KiB
Plaintext

log.console("test_particles starting")
var time = use('time')
var random = use('random').random
var core = use('core')
var particles2d = use('particles2d')
var text2d = use('text2d')
var compositor = use('compositor')
var film2d = use('film2d')
var math = use('math/radians')
var particle_handles = []
var emitters = []
var labels = []
var t = 0
var camera = {
pos: {x: 250, y: 250},
width: 500,
height: 500,
anchor: {x: 0.5, y: 0.5}
}
var compositor_config = {
clear: {r: 0.05, g: 0.05, b: 0.1, a: 1},
planes: [
{
name: 'main',
plane: 'main',
camera: camera,
resolution: {width: 500, height: 500},
presentation: 'stretch',
clear: {r: 0.05, g: 0.05, b: 0.1, a: 1}
}
]
}
function init() {
// Emitter 1: Normal particles (top-left)
var handle1 = particles2d.create({
plane: 'main',
layer: 0,
image: 'examples/tiles/fireball',
width: 20,
height: 20
})
particle_handles[] = handle1
emitters[] = particles2d.emitters.create({
pos: {x: 100, y: 400},
spawn_area: {width: 30, height: 10},
velocity: {x: 0, y: 50},
velocity_var: {x: 20, y: 10},
life: 2,
rate: 15,
scale: 1,
scale_var: 0.2,
color: {r: 1, g: 0.8, b: 0.3},
handle: handle1
})
labels[] = text2d({
plane: 'main',
layer: 10,
text: "Normal",
pos: {x: 70, y: 480},
font: 'examples/fonts/dos',
size: 14,
color: {r: 1, g: 1, b: 1, a: 1}
})
// Emitter 2: Half opacity (top-center)
var handle2 = particles2d.create({
plane: 'main',
layer: 0,
image: 'examples/tiles/fireball',
width: 20,
height: 20,
opacity: 0.5
})
particle_handles[] = handle2
emitters[] = particles2d.emitters.create({
pos: {x: 250, y: 400},
spawn_area: {width: 30, height: 10},
velocity: {x: 0, y: 50},
velocity_var: {x: 20, y: 10},
life: 2,
rate: 15,
scale: 1,
scale_var: 0.2,
color: {r: 1, g: 0.8, b: 0.3},
handle: handle2
})
labels[] = text2d({
plane: 'main',
layer: 10,
text: "Opacity 0.5",
pos: {x: 210, y: 480},
font: 'examples/fonts/dos',
size: 14,
color: {r: 1, g: 1, b: 1, a: 1}
})
// Emitter 3: Red tint (top-right)
var handle3 = particles2d.create({
plane: 'main',
layer: 0,
image: 'examples/tiles/fireball',
width: 20,
height: 20,
tint: {r: 1, g: 0.2, b: 0.2, a: 1}
})
particle_handles[] = handle3
emitters[] = particles2d.emitters.create({
pos: {x: 400, y: 400},
spawn_area: {width: 30, height: 10},
velocity: {x: 0, y: 50},
velocity_var: {x: 20, y: 10},
life: 2,
rate: 15,
scale: 1,
scale_var: 0.2,
color: {r: 1, g: 0.8, b: 0.3},
handle: handle3
})
labels[] = text2d({
plane: 'main',
layer: 10,
text: "Red Tint",
pos: {x: 370, y: 480},
font: 'examples/fonts/dos',
size: 14,
color: {r: 1, g: 1, b: 1, a: 1}
})
// Emitter 4: Blue tint (bottom-left)
var handle4 = particles2d.create({
plane: 'main',
layer: 0,
image: 'examples/tiles/fireball',
width: 24,
height: 24,
tint: {r: 0.3, g: 0.5, b: 1, a: 1}
})
particle_handles[] = handle4
emitters[] = particles2d.emitters.create({
pos: {x: 100, y: 200},
spawn_area: {width: 40, height: 10},
velocity: {x: 0, y: 60},
velocity_var: {x: 30, y: 15},
life: 2.5,
rate: 20,
scale: 1.2,
scale_var: 0.3,
color: {r: 1, g: 1, b: 1},
handle: handle4
})
labels[] = text2d({
plane: 'main',
layer: 10,
text: "Blue Tint",
pos: {x: 70, y: 280},
font: 'examples/fonts/dos',
size: 14,
color: {r: 1, g: 1, b: 1, a: 1}
})
// Emitter 5: Green tint + opacity (bottom-center)
var handle5 = particles2d.create({
plane: 'main',
layer: 0,
image: 'examples/tiles/fireball',
width: 24,
height: 24,
tint: {r: 0.3, g: 1, b: 0.3, a: 1},
opacity: 0.7
})
particle_handles[] = handle5
emitters[] = particles2d.emitters.create({
pos: {x: 250, y: 200},
spawn_area: {width: 40, height: 10},
velocity: {x: 0, y: 60},
velocity_var: {x: 30, y: 15},
life: 2.5,
rate: 20,
scale: 1.2,
scale_var: 0.3,
color: {r: 1, g: 1, b: 1},
handle: handle5
})
labels[] = text2d({
plane: 'main',
layer: 10,
text: "Green + 70%",
pos: {x: 210, y: 280},
font: 'examples/fonts/dos',
size: 14,
color: {r: 1, g: 1, b: 1, a: 1}
})
// Emitter 6: Animated tint (bottom-right)
var handle6 = particles2d.create({
plane: 'main',
layer: 0,
image: 'examples/tiles/fireball',
width: 24,
height: 24,
tint: {r: 1, g: 1, b: 1, a: 1}
})
particle_handles[] = handle6
emitters[] = particles2d.emitters.create({
pos: {x: 400, y: 200},
spawn_area: {width: 40, height: 10},
velocity: {x: 0, y: 60},
velocity_var: {x: 30, y: 15},
life: 2.5,
rate: 20,
scale: 1.2,
scale_var: 0.3,
color: {r: 1, g: 1, b: 1},
handle: handle6
})
labels[] = text2d({
plane: 'main',
layer: 10,
text: "Rainbow",
pos: {x: 370, y: 280},
font: 'examples/fonts/dos',
size: 14,
color: {r: 1, g: 1, b: 1, a: 1}
})
// Emitter 7: Animated opacity (center)
var handle7 = particles2d.create({
plane: 'main',
layer: 0,
image: 'examples/tiles/fireball',
width: 32,
height: 32,
opacity: 1
})
particle_handles[] = handle7
emitters[] = particles2d.emitters.create({
pos: {x: 250, y: 80},
spawn_area: {width: 60, height: 20},
velocity: {x: 0, y: 40},
velocity_var: {x: 40, y: 20},
life: 3,
rate: 25,
scale: 1.5,
scale_var: 0.4,
color: {r: 1, g: 0.6, b: 0.2},
handle: handle7
})
labels[] = text2d({
plane: 'main',
layer: 10,
text: "Pulsing Opacity",
pos: {x: 180, y: 20},
font: 'examples/fonts/dos',
size: 14,
color: {r: 1, g: 1, b: 0, a: 1}
})
log.console("test_particles initialized with " + text(length(emitters)) + " emitters")
}
function update(dt) {
t += dt
// Update all emitters
var i = 0
for (i = 0; i < length(emitters); i++) {
particles2d.emitters.update(emitters[i], dt)
}
// Animate rainbow tint on emitter 6
var rainbow_handle = particle_handles[5]
rainbow_handle.tint.r = 0.5 + 0.5 * math.sine(t * 2)
rainbow_handle.tint.g = 0.5 + 0.5 * math.sine(t * 2 + 2.094)
rainbow_handle.tint.b = 0.5 + 0.5 * math.sine(t * 2 + 4.188)
// Animate pulsing opacity on emitter 7
var pulsing_handle = particle_handles[6]
pulsing_handle.opacity = 0.3 + 0.7 * abs(math.sine(t * 1.5))
}
function render() {
var plan = compositor.compile(compositor_config)
return compositor.execute(plan)
}
init()
core.start({
width: 500,
height: 500,
title: "Test Particles Features",
framerate: 60,
update: update,
render: render
})