You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

115 lines
3.1 KiB

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,
}
}