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.BlobExplosion: uq.CurrentStyle.Particles.CreateBlobExplosion(position, uq.GameLayer); break; case ParticleEffect.TeleportSplash: uq.CurrentStyle.Particles.CreateTeleportSplash(position, uq.GameLayer); break; case ParticleEffect.LavaSplash: uq.CurrentStyle.Particles.CreateLavaSplash(position, uq.GameLayer); break; } } private void CreateRogueExplosion(Vector3 position, Color colorMin, Color colorMax) { uq.CurrentStyle.Particles.CreateRogueExplosion(position, colorMin, colorMax, uq.GameLayer); } private void CreateParticleTrail(int entityNum, int type, Vector3 position) { int dec; if (type < 128) { dec = 3; } else { dec = 1; type -= 128; } var trailType = (ParticleTrail)type; var entity = uq.GameState.GetEntity(entityNum); if (entity.HasParticleTrail(trailType)) return; var particleTrail = uq.CurrentStyle.Particles.CreateParticleTrail(trailType, position, dec, uq.GameLayer); if (particleTrail == null) return; entity.SetParticleTrail(particleTrail); } }