2023-04-30 17:22:57 +02:00
|
|
|
/*
|
|
|
|
===========================================================================
|
|
|
|
Copyright (C) 2023 the OpenMoHAA team
|
|
|
|
|
|
|
|
This file is part of OpenMoHAA source code.
|
|
|
|
|
|
|
|
OpenMoHAA source code is free software; you can redistribute it
|
|
|
|
and/or modify it under the terms of the GNU General Public License as
|
|
|
|
published by the Free Software Foundation; either version 2 of the License,
|
|
|
|
or (at your option) any later version.
|
|
|
|
|
|
|
|
OpenMoHAA source code is distributed in the hope that it will be
|
|
|
|
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with OpenMoHAA source code; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
===========================================================================
|
|
|
|
*/
|
|
|
|
|
|
|
|
// DESCRIPTION:
|
|
|
|
// Special Effects code
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "cg_local.h"
|
2023-05-04 20:30:38 +02:00
|
|
|
#include "cg_commands.h"
|
|
|
|
#include "class.h"
|
2023-04-30 17:22:57 +02:00
|
|
|
|
2023-05-06 23:36:27 +02:00
|
|
|
#define MAX_SPECIAL_EFFECT_COMMANDS 32
|
|
|
|
|
2023-07-22 17:35:02 +02:00
|
|
|
typedef enum {
|
|
|
|
SFX_BHIT_PAPER_LITE,
|
|
|
|
SFX_BHIT_PAPER_HARD,
|
|
|
|
SFX_BHIT_WOOD_LITE,
|
|
|
|
SFX_BHIT_WOOD_HARD,
|
|
|
|
SFX_BHIT_METAL_LITE,
|
|
|
|
SFX_BHIT_METAL_HARD,
|
|
|
|
SFX_BHIT_STONE_LITE,
|
|
|
|
SFX_BHIT_STONE_HARD,
|
|
|
|
SFX_BHIT_DIRT_LITE,
|
|
|
|
SFX_BHIT_DIRT_HARD,
|
|
|
|
SFX_BHIT_GRILL_LITE,
|
|
|
|
SFX_BHIT_GRILL_HARD,
|
|
|
|
SFX_BHIT_GRASS_LITE,
|
|
|
|
SFX_BHIT_GRASS_HARD,
|
|
|
|
SFX_BHIT_MUD_LITE,
|
|
|
|
SFX_BHIT_MUD_HARD,
|
|
|
|
SFX_BHIT_PUDDLE_LITE,
|
|
|
|
SFX_BHIT_PUDDLE_HARD,
|
|
|
|
SFX_BHIT_GLASS_LITE,
|
|
|
|
SFX_BHIT_GLASS_HARD,
|
|
|
|
SFX_BHIT_GRAVEL_LITE,
|
|
|
|
SFX_BHIT_GRAVEL_HARD,
|
|
|
|
SFX_BHIT_SAND_LITE,
|
|
|
|
SFX_BHIT_SAND_HARD,
|
|
|
|
SFX_BHIT_FOLIAGE_LITE,
|
|
|
|
SFX_BHIT_FOLIAGE_HARD,
|
|
|
|
SFX_BHIT_SNOW_LITE,
|
|
|
|
SFX_BHIT_SNOW_HARD,
|
|
|
|
SFX_BHIT_CARPET_LITE,
|
|
|
|
SFX_BHIT_CARPET_HARD,
|
|
|
|
SFX_BHIT_HUMAN_UNIFORM_LITE,
|
|
|
|
SFX_BHIT_HUMAN_UNIFORM_HARD,
|
|
|
|
SFX_WATER_TRAIL_BUBBLE,
|
|
|
|
SFX_VFX_PAPER_LITE,
|
|
|
|
SFX_VFX_PAPER_HARD,
|
|
|
|
SFX_VFX_WOOD_LITE,
|
|
|
|
SFX_VFX_WOOD_HARD,
|
|
|
|
SFX_VFX_METAL_LITE,
|
|
|
|
SFX_VFX_METAL_HARD,
|
|
|
|
SFX_VFX_STONE_LITE,
|
|
|
|
SFX_VFX_STONE_HARD,
|
|
|
|
SFX_VFX_DIRT_LITE,
|
|
|
|
SFX_VFX_DIRT_HARD,
|
|
|
|
SFX_VFX_GRILL_LITE,
|
|
|
|
SFX_VFX_GRILL_HARD,
|
|
|
|
SFX_VFX_GRASS_LITE,
|
|
|
|
SFX_VFX_GRASS_HARD,
|
|
|
|
SFX_VFX_MUD_LITE,
|
|
|
|
SFX_VFX_MUD_HARD,
|
|
|
|
SFX_VFX_PUDDLE_LITE,
|
|
|
|
SFX_VFX_PUDDLE_HARD,
|
|
|
|
SFX_VFX_GLASS_LITE,
|
|
|
|
SFX_VFX_GLASS_HARD,
|
|
|
|
SFX_VFX_GRAVEL_LITE,
|
|
|
|
SFX_VFX_GRAVEL_HARD,
|
|
|
|
SFX_VFX_SAND_LITE,
|
|
|
|
SFX_VFX_SAND_HARD,
|
|
|
|
SFX_VFX_FOLIAGE_LITE,
|
|
|
|
SFX_VFX_FOLIAGE_HARD,
|
|
|
|
SFX_VFX_SNOW_LITE,
|
|
|
|
SFX_VFX_SNOW_HARD,
|
|
|
|
SFX_VFX_CARPET_LITE,
|
|
|
|
SFX_VFX_CARPET_HARD,
|
|
|
|
SFX_EXP_GREN_BASE,
|
|
|
|
SFX_EXP_BAZOOKA_BASE,
|
|
|
|
SFX_EXP_HEAVYSHELL_BASE,
|
|
|
|
SFX_EXP_TANK_BASE,
|
|
|
|
SFX_EXP_GREN_PAPER,
|
|
|
|
SFX_EXP_GREN_WOOD,
|
|
|
|
SFX_EXP_GREN_METAL,
|
|
|
|
SFX_EXP_GREN_STONE,
|
|
|
|
SFX_EXP_GREN_DIRT,
|
|
|
|
SFX_EXP_GREN_GRILL,
|
|
|
|
SFX_EXP_GREN_GRASS,
|
|
|
|
SFX_EXP_GREN_MUD,
|
|
|
|
SFX_EXP_GREN_PUDDLE,
|
|
|
|
SFX_EXP_GREN_GLASS,
|
|
|
|
SFX_EXP_GREN_GRAVEL,
|
|
|
|
SFX_EXP_GREN_SAND,
|
|
|
|
SFX_EXP_GREN_FOLIAGE,
|
|
|
|
SFX_EXP_GREN_SNOW,
|
|
|
|
SFX_EXP_GREN_CARPET,
|
|
|
|
SFX_EXP_HEAVYSHELL_DIRT,
|
|
|
|
SFX_EXP_HEAVYSHELL_STONE,
|
|
|
|
SFX_EXP_HEAVYSHELL_SNOW,
|
|
|
|
SFX_EXP_TANK_DIRT,
|
|
|
|
SFX_EXP_TANK_STONE,
|
|
|
|
SFX_EXP_TANK_SNOW,
|
|
|
|
SFX_EXP_BAZOOKA_DIRT,
|
|
|
|
SFX_EXP_BAZOOKA_STONE,
|
|
|
|
SFX_EXP_BAZOOKA_SNOW,
|
|
|
|
SFX_WATER_RIPPLE_STILL,
|
|
|
|
SFX_WATER_RIPPLE_MOVING,
|
|
|
|
SFX_OIL_LEAK_BIG,
|
|
|
|
SFX_OIL_LEAK_MEDIUM,
|
|
|
|
SFX_OIL_LEAK_SMALL,
|
|
|
|
SFX_OIL_LEAK_SPLAT,
|
|
|
|
SFX_WATER_LEAK_BIG,
|
|
|
|
SFX_WATER_LEAK_MEDIUM,
|
|
|
|
SFX_WATER_LEAK_SMALL,
|
|
|
|
SFX_WATER_LEAK_SPLAT,
|
|
|
|
SFX_FOOT_LIGHT_DUST,
|
|
|
|
SFX_FOOT_HEAVY_DUST,
|
|
|
|
SFX_FOOT_DIRT,
|
|
|
|
SFX_FOOT_GRASS,
|
|
|
|
SFX_FOOT_MUD,
|
|
|
|
SFX_FOOT_PUDDLE,
|
|
|
|
SFX_FOOT_SAND,
|
|
|
|
SFX_FOOT_SNOW,
|
|
|
|
SFX_FENCE_WOOD,
|
|
|
|
SFX_TEST_EFFECT,
|
|
|
|
SFX_COUNT
|
|
|
|
} SpecialEffects;
|
|
|
|
|
2023-07-05 21:24:23 +02:00
|
|
|
class specialeffectcommand_t : public Class
|
|
|
|
{
|
2023-04-30 17:22:57 +02:00
|
|
|
public:
|
2023-07-05 21:24:23 +02:00
|
|
|
spawnthing_t *emitter;
|
|
|
|
float fCommandTime;
|
2023-07-22 17:35:02 +02:00
|
|
|
void (ClientGameCommandManager::*endfcn)();
|
2023-05-05 20:43:37 +02:00
|
|
|
Event *pEvent;
|
2023-05-01 15:39:53 +02:00
|
|
|
|
|
|
|
public:
|
|
|
|
specialeffectcommand_t();
|
2023-04-30 17:22:57 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
class specialeffect_t : public Class
|
|
|
|
{
|
|
|
|
public:
|
2023-07-05 21:24:23 +02:00
|
|
|
int m_iCommandCount;
|
|
|
|
specialeffectcommand_t *m_commands[MAX_SPECIAL_EFFECT_COMMANDS];
|
2023-05-01 15:39:53 +02:00
|
|
|
|
|
|
|
public:
|
|
|
|
specialeffect_t();
|
2023-05-06 23:36:27 +02:00
|
|
|
|
2023-07-05 21:24:23 +02:00
|
|
|
specialeffectcommand_t *AddNewCommand();
|
2023-04-30 17:22:57 +02:00
|
|
|
};
|
2023-05-01 15:10:17 +02:00
|
|
|
|
|
|
|
#define MAX_SPECIAL_EFFECTS 99
|
|
|
|
#define SPECIAL_EFFECT_TEST MAX_SPECIAL_EFFECTS - 1
|
|
|
|
|
2023-07-05 21:24:23 +02:00
|
|
|
class ClientSpecialEffectsManager : public Listener
|
|
|
|
{
|
2023-05-01 15:10:17 +02:00
|
|
|
specialeffect_t m_effects[99];
|
2023-07-05 21:24:23 +02:00
|
|
|
qboolean m_bEffectsLoaded;
|
|
|
|
int m_iNumPendingEvents;
|
2023-05-01 15:10:17 +02:00
|
|
|
|
|
|
|
public:
|
|
|
|
CLASS_PROTOTYPE(ClientSpecialEffectsManager);
|
|
|
|
|
|
|
|
private:
|
2023-07-05 21:24:23 +02:00
|
|
|
void ContinueEffectExecution(Event *ev);
|
2023-05-01 15:10:17 +02:00
|
|
|
void ExecuteEffect(int iEffect, int iStartCommand, Vector vPos, Vector vAngles, float axis[3][3]);
|
|
|
|
|
|
|
|
public:
|
|
|
|
ClientSpecialEffectsManager();
|
|
|
|
|
2023-07-05 21:24:23 +02:00
|
|
|
void LoadEffects();
|
|
|
|
qboolean EffectsPending();
|
|
|
|
void MakeEffect_Normal(int iEffect, Vector vPos, Vector vNormal);
|
|
|
|
void MakeEffect_Angles(int iEffect, Vector vPos, Vector vAngles);
|
|
|
|
void MakeEffect_Axis(int iEffect, Vector vPos, float axis[3][3]);
|
|
|
|
specialeffect_t *GetTestEffectPointer();
|
2023-05-01 15:10:17 +02:00
|
|
|
};
|
2023-05-01 17:08:02 +02:00
|
|
|
|
|
|
|
extern ClientSpecialEffectsManager sfxManager;
|