openmohaa/code/fgame/beam.h
2023-06-15 23:44:02 +02:00

127 lines
3.9 KiB
C++

/*
===========================================================================
Copyright (C) 2015 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
===========================================================================
*/
// beam.h: Beam
#ifndef __BEAM_H__
#define __BEAM_H__
#include "g_local.h"
#include "scriptslave.h"
extern Event EV_FuncBeam_Activate;
extern Event EV_FuncBeam_Deactivate;
extern Event EV_FuncBeam_Diameter;
extern Event EV_FuncBeam_Maxoffset;
extern Event EV_FuncBeam_Minoffset;
extern Event EV_FuncBeam_Overlap;
extern Event EV_FuncBeam_Color;
extern Event EV_FuncBeam_SetTarget;
extern Event EV_FuncBeam_SetAngle;
extern Event EV_FuncBeam_SetEndPoint;
extern Event EV_FuncBeam_SetLife;
extern Event EV_FuncBeam_Shader;
extern Event EV_FuncBeam_Segments;
extern Event EV_FuncBeam_Delay;
extern Event EV_FuncBeam_NumSphereBeams;
extern Event EV_FuncBeam_SphereRadius;
extern Event EV_FuncBeam_ToggleDelay;
extern Event EV_FuncBeam_FindEndpoint;
extern Event EV_FuncBeam_EndAlpha;
class FuncBeam : public ScriptSlave
{
protected:
SimpleEntityPtr end, origin_target;
float damage;
float life;
Vector end_point;
qboolean use_angles;
float shootradius;
str shader;
bool m_bIgnoreWalls;
public:
CLASS_PROTOTYPE( FuncBeam );
FuncBeam();
void SetAngle( Event *ev );
void SetAngles( Event *ev );
void SetEndPoint( Event *ev );
void SetModel( Event *ev );
void SetDamage( Event *ev );
void SetOverlap( Event *ev );
void SetBeamStyle( Event *ev );
void SetLife( Event *ev );
void Activate( Event *ev );
void Deactivate( Event *ev );
void SetDiameter( Event *ev );
void SetMaxoffset( Event *ev );
void SetMinoffset( Event *ev );
void SetColor( Event *ev );
void SetSegments( Event *ev );
void SetBeamShader( str shader );
void SetBeamShader( Event *ev );
void SetBeamTileShader( Event *ev );
void SetDelay( Event *ev );
void SetToggleDelay( Event *ev );
void SetSphereRadius( Event *ev );
void SetNumSphereBeams( Event *ev );
void SetEndAlpha( Event *ev );
void SetShootRadius( Event *ev );
void SetPersist( Event *ev );
void FindEndpoint( Event *ev );
void UpdateEndpoint( Event *ev );
void UpdateOrigin( Event *ev );
void Shoot( Event *ev );
void SetIgnoreWalls( Event *ev );
void setAngles( Vector ang ) override;
void Archive( Archiver &arc ) override;
FuncBeam* CreateBeam(const char* model, const char* shader, Vector start, Vector end, int numsegments = 4, float scale = 1.0f, float life = 1.0f, float damage = 0.0f, Entity* origin_target = NULL);
friend FuncBeam* CreateBeam(const char* model, const char* shader, Vector start, Vector end, int numsegments, float scale, float life, float damage, Entity* origin_target);
};
inline void FuncBeam::Archive
(
Archiver &arc
)
{
ScriptSlave::Archive( arc );
arc.ArchiveSafePointer( &end );
arc.ArchiveSafePointer( &origin_target );
arc.ArchiveFloat( &damage );
arc.ArchiveFloat( &life );
arc.ArchiveVector( &end_point );
arc.ArchiveBoolean( &use_angles );
arc.ArchiveFloat( &shootradius );
arc.ArchiveString( &shader );
if ( arc.Loading() )
{
SetBeamShader( shader );
}
}
#endif // __BEAM_H__