using System.Collections; using System.Collections.Generic; using UnityEngine; public partial class GameModule { private readonly UniQuake uq; public GameModule(UniQuake uniQuake) { uq = uniQuake; BuildCallbacks(); } private void SetEntityModel(int entityNum, string modelName) { if (string.IsNullOrEmpty(modelName)) { uq.GameState.GetEntity(entityNum).ClearModel(); return; } if (modelName.StartsWith("*")) { if (!int.TryParse(modelName.Substring(1), out int subModelNum)) { Debug.LogWarning($"Invalid world sub-model index: {modelName}"); return; } uq.GameState.SetEntityWorldModel(entityNum, subModelNum); return; } if (modelName.EndsWith(".bsp")) { uq.GameState.SetEntityBrushModel(entityNum, modelName); return; } if (modelName.EndsWith(".spr")) { // TODO: sprite uq.GameState.GetEntity(entityNum).ClearModel(); return; } uq.GameState.SetEntityAliasModel(entityNum, modelName); } private void SetEntityTransform(int entityNum, QVec3 origin, QVec3 angles) { uq.GameState.GetEntity(entityNum).SetTransform(origin.ToUnityPosition(), angles.ToUnityRotation()); } private void RemoveEntity(int entityNum) { uq.GameState.RemoveEntity(entityNum); } private void UpdateEntityAnimation(int entityNum, int pose1, int pose2, float blend) { uq.GameState.GetEntity(entityNum).UpdateAnimation(pose1, pose2, blend); } private void SetEntitySkin(int entityNum, int skinNum) { uq.GameState.GetEntity(entityNum).SetSkin(skinNum); } private void RunParticleEffect(Vector3 position, Vector3 direction, Color colorMin, Color colorMax, int count) { uq.CurrentStyle.Particles.RunParticleEffect(position, direction, colorMin,colorMax, count, uq.GameLayer); } private void CreateParticleEffect(ParticleEffect type, Vector3 position) { switch (type) { case ParticleEffect.Explosion: uq.CurrentStyle.Particles.CreateExplosion(position, uq.GameLayer); break; case ParticleEffect.TeleportSplash: uq.CurrentStyle.Particles.CreateTeleportSplash(position, uq.GameLayer); break; } } private void CreateParticleExplosion(Vector3 position, Color colorMin, Color colorMax) { } // Should correspond to particle_effect_t in game_uniquake.c private enum ParticleEffect { Explosion = 0, Explosion2, BlobExplosion, LavaSplash, TeleportSplash, } // Should correspond to `int type` argument in R_RocketTrail private enum ParticleTrail { Rocket = 0, Smoke = 1, Blood = 2, Tracer = 3, SlightBlood = 4, Tracer2 = 5, VoreBall = 6, } }