loopize++, Wavefront .OBJ & C#
Suite oficial de adiciones para juegos 3D y 2D sobre Looping Engine: carga de mallas .obj, raycasting por triángulo (Möller–Trumbore), scripts C# con MonoBehaviour y sistemas de juego integrados en C++17, C# SDK y Web.
Pipeline Wavefront .OBJ
Carga archivos externos o modelos embebidos con soporte para vértices (v), normales (vn), coordenadas UV (vt), caras triangulares y n-gonales (f), normalización de escala, subdivisión catmull-style y exportación a .obj.
val mesh := obj3d.load("assets/models/starfighter.obj", "starfighter")
obj3d.normalize("starfighter", 2.4)
val subdiv_faces := obj3d.subdivide("starfighter")
spawn3d.obj(
"AngelHero",
obj: "starfighter.obj",
at: (0, 2.2, 6),
scale: 1.6,
color: "#38bdf8",
cs: "StarfighterPilot"
)
| Función | Uso principal |
|---|---|
obj3d.load(path, alias?) |
Carga y parsea un .obj local o incorporado; retorna conteo de vértices, triángulos y radio envolvente. |
obj3d.parse(raw_text, alias) |
Compila geometría .obj generada dinámicamente en memoria. |
obj3d.subdivide(key) / obj3d.normalize(key, radius) |
Duplica detalle poligonal o normaliza escala al radio indicado. |
obj3d.spawn(...) / spawn3d.obj(...) |
Instancia una entidad 3D con la malla y script C# opcional en la escena. |
physics3d.raycast_scene(origin, dir) |
Disparo exacto por triángulo (Möller–Trumbore) contra las mallas activas. |
Modelos 3D Incorporados (assets/models/)
El runtime nativo y el intérprete web incluyen 5 mallas .obj listas para usarse sin configuración adicional:
starfighter.obj— Caza interceptor principal con cabina, alas en flecha y propulsores.valkyrie_drone.obj— Dron centinela para escuadrones y oleadas.omega_titan.obj— Crucero jefe multipolígono de alta presencia.cyber_crystal.obj— Cristal energético flotante para coleccionables y objetivos.star_gate.obj— Portal dimensional orbital de doble cara.
C# MonoBehaviour Bridge & Exportación
Escribe clases C# directamente dentro de archivos .loop con cs! { ... }. La VM C# embebida funciona sin dependencias externas y detecta automáticamente dotnet / mcs+mono cuando están presentes en el sistema.
use "csharp"
cs! {
public class StarfighterPilot : MonoBehaviour {
public float Shield = 100.0f;
public void Start() {
LoopingBridge.Set("cs_pilot_ready", true);
}
public void Update(float dt) {
Scene3D.Rotate("Starfighter01", 0.0f, dt * 42.0f, 0.0f);
Shield = Mathf.Clamp(Shield + dt * 4.0f, 0.0f, 100.0f);
}
}
}
val cs_code := csharp.export("StarfighterPilot")
También puedes transpilar un proyecto Looping 3D a código fuente C# independiente mediante CLI:
looping compile mi_juego.loop --target csharp -o GameExport.cs
ECS, Wave Director y FSM (loopize++)
Importa la librería híbrida con use "loopize++" para acceder a las utilidades lz_* y las primitivas de núcleo loopize.*:
use "loopize++"
lz_banner("Orbit Sector 7")
lz_spawn_obj("TitanBoss", "omega_titan.obj", 0, 5, 36, 1.8, "#f43f5e", "StarfighterPilot")
// Director de oleadas con enemigos .obj
val spawned := lz_wave_rush(1, "valkyrie", 4, 90, "valkyrie_drone.obj")
// Máquinas de estado finitas & ECS
lz_fsm("boss_ai", "patrol")
val eid := loopize.ecs_spawn("Escort", "ally", [4, 2, 10], 120, "starfighter.obj", "")
val nearby := loopize.spatial_radius([0, 2, 10], 15.0, "ally")
Combos, Camera Shake, Tweens, Misiones & Reporte
- Combos & Sacudida de Cámara:
lz_hit_combo(puntos, trauma)acumula multiplicadores hasta x8 y aplica trauma shake a la cámara spring-arm. - Curvas & Tweens:
lz_ease("out_cubic", t)ylz_tween(key, from, to, dur, curve)con curvaslinear,in_quad,out_quad,in_out_quad,out_cubic,in_out_cubicyout_back. - Misiones XP & Inventario:
lz_mission(id, titulo, meta, xp),loopize.quest_progress(id, delta),loopize.inventory_addyloopize.inventory_has. - Paso Físico y Telemetría:
lz_step(dt),lz_collide(a, b)ylz_report().
Web Loopize Kit (Web Components)
Embeds 3D de cero dependencias usando /web-loopize-kit.js directamente en cualquier página web:
<script type="module" src="https://cokistudios.com/web-loopize-kit.js"></script>
<loopize-obj-viewer model="starfighter" color="#38bdf8" autorotate="true"></loopize-obj-viewer>
<loopize-stage preset="orbital_arena" title="Orbit Sector 7"></loopize-stage>