Raised This Month: $51 Target: $400
 12% 

[INC] Beam Entities


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
KORD_12.7
Senior Member
Join Date: Aug 2009
Location: Russia, Vladivostok
Old 05-09-2012 , 00:20   [INC] Beam Entities
Reply With Quote #1

[INC] Beam Entities [AGHL.ru link]
version 1.3
by KORD_12.7

Description:
Quote:
Originally Posted by HLSDK
These functions are here to show the way beams are encoded as entities. Encoding beams as entities simplifies their management in the client/server architecture.
Credits:
  • HLSDK - effects.cpp & effects.h
INC:
PHP Code:
/* AMX Mod X
*    Beam entities include by KORD_12.7.
*
* Version 1.3 (last update: 4, may (05), 2013)
*
* http://aghl.ru/forum/ - Russian Half-Life and Adrenaline Gamer Community
*
* This file is provided as is (no warranties)
*/

#if defined _beams_included
    #endinput
#endif
#define _beams_included

#include <engine>
#include <fakemeta>
#include <xs>


// These functions are here to show the way beams are encoded as entities.
// Encoding beams as entities simplifies their management in the client/server architecture.


// Beam types
enum _:Beam_Types
{
    
BEAM_POINTS,
    
BEAM_ENTPOINT,
    
BEAM_ENTS,
    
BEAM_HOSE
};

// Beam flags
#define BEAM_FSINE    0x10
#define BEAM_FSOLID    0x20
#define BEAM_FSHADEIN    0x40
#define BEAM_FSHADEOUT    0x80


#define Beam_SetType(%0,%1) set_pev(%0, pev_rendermode, (pev(%0, pev_rendermode) & 0xF0) | %1 & 0x0F)
/* stock Beam_SetType(const iBeamEntity, const iType)
    return set_pev(iBeamEntity, pev_rendermode, (pev(iBeamEntity, pev_rendermode) & 0xF0) | iType & 0x0F); */
    
#define Beam_SetFlags(%0,%1) set_pev(%0, pev_rendermode, (pev(%0, pev_rendermode) & 0x0F) | %1 & 0xF0)
/* stock Beam_SetFlags(const iBeamEntity, const iType)
    return set_pev(iBeamEntity, pev_rendermode, (pev(iBeamEntity, pev_rendermode) & 0x0F) | iType & 0xF0); */    

#define Beam_SetStartPos(%0,%1) set_pev(%0, pev_origin, %1)
/* stock Beam_SetStartPos(const iBeamEntity, const Float: flVecStart[3])
    return set_pev(iBeamEntity, pev_origin, flVecStart); */

#define Beam_SetEndPos(%0,%1) set_pev(%0, pev_angles, %1)
/* stock Beam_SetEndPos(const iBeamEntity, const Float: flVecEnd[3]) 
    return set_pev(iBeamEntity, pev_angles, flVecEnd); */

#define Beam_SetStartEntity(%0,%1) \
    
set_pev(%0pev_sequence, (%0x0FFF) | ((pev(%0pev_sequence) & 0xF000) << 12)); \
    
set_pev(%0pev_owner, %1) \
/* stock Beam_SetStartEntity(const iBeamEntity, const iEntityIndex) */

#define Beam_SetEndEntity(%0,%1) \
    
set_pev(%0pev_skin, (%0x0FFF) | ((pev(%0pev_skin) & 0xF000) << 12)); \
    
set_pev(%0pev_aiment, %1) \
/* stock Beam_SetEndEntity(const iBeamEntity, const iEntityIndex) */

#define Beam_SetStartAttachment(%0,%1) set_pev(%0, pev_sequence, (pev(%0, pev_sequence) & 0x0FFF) | ((%1 & 0xF) << 12))
/* stock Beam_SetStartAttachment(const iBeamEntity, const iAttachment)
    return set_pev(iBeamEntity, pev_sequence, (pev(iBeamEntity, pev_sequence) & 0x0FFF) | ((iAttachment & 0xF) << 12)); */

#define Beam_SetEndAttachment(%0,%1) set_pev(%0, pev_skin, (pev(%0, pev_skin) & 0x0FFF) | ((%1 & 0xF) << 12))
/* stock Beam_SetEndAttachment(const iBeamEntity, const iAttachment)
    return set_pev(iBeamEntity, pev_skin, (pev(iBeamEntity, pev_skin) & 0x0FFF) | ((iAttachment & 0xF) << 12)); */

#define Beam_SetTexture(%0,%1) set_pev(%0, pev_modelindex, %1)
/* stock Beam_SetTexture(const iBeamEntity, const iSpriteIndex)
    return set_pev(iBeamEntity, pev_modelindex, iSpriteIndex); */

#define Beam_SetWidth(%0,%1) set_pev(%0, pev_scale, %1)
/* stock Beam_SetWidth(const iBeamEntity, const Float: flWidth)
    return set_pev(iBeamEntity, pev_scale, flWidth); */

#define Beam_SetNoise(%0,%1) set_pev(%0, pev_body, %1)
/* stock Beam_SetNoise(const iBeamEntity, const iNoise)
    return set_pev(iBeamEntity, pev_body, iNoise); */    
    
#define Beam_SetColor(%0,%1) set_pev(%0, pev_rendercolor, %1)
/* stock Beam_SetColor(const iBeamEntity, const Float: flColor[3])
    return set_pev(iBeamEntity, pev_rendercolor, flColor); */    
        
#define Beam_SetBrightness(%0,%1) set_pev(%0, pev_renderamt, %1)
/* stock Beam_SetBrightness(const iBeamEntity, const Float: flBrightness)
    return set_pev(iBeamEntity, pev_renderamt, flBrightness); */

#define Beam_SetFrame(%0,%1) set_pev(%0, pev_frame, %1)
/* stock Beam_SetFrame(const iBeamEntity, const Float: flFrame)
    return set_pev(iBeamEntity, pev_frame, flFrame); */

#define Beam_SetScrollRate(%0,%1) set_pev(%0, pev_animtime, %1)
/* stock Beam_SetScrollRate(const iBeamEntity, const Float: flSpeed)
    return set_pev(iBeamEntity, pev_animtime, flSpeed); */

#define Beam_GetType(%0) (pev(%0, pev_rendermode) & 0x0F)
/* stock Beam_GetType(const iBeamEntity)
    return pev(iBeamEntity, pev_rendermode) & 0x0F; */
    
#define Beam_GetFlags(%0) (pev(%0, pev_rendermode) & 0xF0)
/* stock Beam_GetFlags(const iBeamEntity)
    return pev(iBeamEntity, pev_rendermode) & 0xF0; */    

#define Beam_GetStartEntity(%0) (pev(%0, pev_sequence) & 0xFFF)
/* stock Beam_GetStartEntity(const iBeamEntity)
    return pev(iBeamEntity, pev_sequence) & 0xFFF; */

#define Beam_GetEndEntity(%0) (pev(%0, pev_skin) & 0xFFF)
/* stock Beam_GetEndEntity(const iBeamEntity)
    return pev(iBeamEntity, pev_skin) & 0xFFF; */

stock Beam_GetStartPos(const iBeamEntityFloatvecStartPos[3])
{
    static 
iEntityiEntity Beam_GetStartEntity(iBeamEntity);
    
    if (
Beam_GetType(iBeamEntity) == BEAM_ENTS && pev_valid(iEntity))
    {
        
pev(iEntitypev_originvecStartPos);
        return;
    }
    
    
pev(iBeamEntitypev_originvecStartPos);
}

stock Beam_GetEndPos(const iBeamEntityFloatvecEndPos[3])
{
    static 
iType
    static 
iEntity;
    
    
iType Beam_GetType(iBeamEntity);
    
    if (
iType == BEAM_POINTS || iType == BEAM_HOSE)
    {
        
pev(iBeamEntitypev_anglesvecEndPos);
        return;
    }
    
    
iEntity Beam_GetEndEntity(iBeamEntity);
    
    if (
pev_valid(iEntity))
    {
        
pev(iEntitypev_originvecEndPos);
        return;
    }
    
    
pev(iBeamEntitypev_anglesvecEndPos);
}

#define Beam_GetTexture(%0) pev(%0, pev_modelindex)
/* stock Beam_GetTexture(const iBeamEntity)
    return pev(iBeamEntity, pev_modelindex); */
    
#define Beam_GetWidth(%0) entity_get_float(%0, EV_FL_scale)
/* stock Float: Beam_GetWidth(const iBeamEntity)
    return entity_get_float(iBeamEntity, EV_FL_scale); */

#define Beam_GetNoise(%0) pev(%0, pev_body)
/* stock Beam_GetNoise(const iBeamEntity)
    return pev(iBeamEntity, pev_body); */
    
#define Beam_GetColor(%0,%1) pev(%0, pev_rendercolor,%1)
/* stock Beam_GetColor(const iBeamEntity, Float: flRGB[3])
    return pev(iBeamEntity, pev_rendercolor, flRGB); */

#define Beam_GetBrightness(%0) entity_get_float(%0, EV_FL_renderamt)
/* stock Float: Beam_GetBrightness(const iBeamEntity)
    return entity_get_float(iBeamEntity, EV_FL_renderamt); */
    
#define Beam_GetFrame(%0) entity_get_float(%0, EV_FL_frame)
/* stock Float: Beam_GetFrame(const iBeamEntity)
    return entity_get_float(iBeamEntity, EV_FL_frame); */

#define Beam_GetScrollRate(%0) entity_get_float(%0, EV_FL_animtime)
/* stock Float: Beam_GetScrollRate(const iBeamEntity)
    return entity_get_float(iBeamEntity, EV_FL_animtime); */

stock Beam_Create(const szSpriteName[], const FloatflWidth)
{
    static 
iBeamEntityiszAllocStringCached;
    if (
iszAllocStringCached || (iszAllocStringCached engfunc(EngFunc_AllocString"beam")))
    {
        
iBeamEntity engfunc(EngFunc_CreateNamedEntityiszAllocStringCached);
    }
    
    if (!
pev_valid(iBeamEntity))
    {
        return 
FM_NULLENT;
    }
    
    
Beam_Init(iBeamEntityszSpriteNameflWidth);
    return 
iBeamEntity;
}

stock Beam_Init(const iBeamEntity, const szSpriteName[], const FloatflWidth)
{
    
set_pev(iBeamEntitypev_flagspev(iBeamEntitypev_flags) | FL_CUSTOMENTITY);
    
    
Beam_SetColor(iBeamEntityFloat: {255.0255.0255.0});
    
Beam_SetBrightness(iBeamEntity255.0);
    
Beam_SetNoise(iBeamEntity0);
    
Beam_SetFrame(iBeamEntity0.0);
    
Beam_SetScrollRate(iBeamEntity0.0);
    
Beam_SetWidth(iBeamEntityflWidth);
    
    
engfunc(EngFunc_SetModeliBeamEntityszSpriteName);
    
    
set_pev(iBeamEntitypev_skin0);
    
set_pev(iBeamEntitypev_sequence0);
    
set_pev(iBeamEntitypev_rendermode0);
}

stock Beam_PointsInit(const iBeamEntity, const FloatflVecStart[3], const FloatflVecEnd[3])
{
    
Beam_SetType(iBeamEntityBEAM_POINTS);
    
Beam_SetStartPos(iBeamEntityflVecStart);
    
Beam_SetEndPos(iBeamEntityflVecEnd);
    
Beam_SetStartAttachment(iBeamEntity0);
    
Beam_SetEndAttachment(iBeamEntity0);
    
Beam_RelinkBeam(iBeamEntity);
}

stock Beam_HoseInit(const iBeamEntity, const FloatflVecStart[3], const FloatflVecDirection[3])
{
    
Beam_SetType(iBeamEntityBEAM_HOSE);
    
Beam_SetStartPos(iBeamEntityflVecStart);
    
Beam_SetEndPos(iBeamEntityflVecDirection);
    
Beam_SetStartAttachment(iBeamEntity0);
    
Beam_SetEndAttachment(iBeamEntity0);
    
Beam_RelinkBeam(iBeamEntity);
}

stock Beam_PointEntInit(const iBeamEntity, const FloatflVecStart[3], const iEndIndex)
{
    
Beam_SetType(iBeamEntityBEAM_ENTPOINT);
    
Beam_SetStartPos(iBeamEntityflVecStart);
    
Beam_SetEndEntity(iBeamEntityiEndIndex);
    
Beam_SetStartAttachment(iBeamEntity0);
    
Beam_SetEndAttachment(iBeamEntity0);
    
Beam_RelinkBeam(iBeamEntity);
}

stock Beam_EntsInit(const iBeamEntity, const iStartIndex, const iEndIndex)
{
    
Beam_SetType(iBeamEntityBEAM_ENTS);
    
Beam_SetStartEntity(iBeamEntityiStartIndex);
    
Beam_SetEndEntity(iBeamEntityiEndIndex);
    
Beam_SetStartAttachment(iBeamEntity0);
    
Beam_SetEndAttachment(iBeamEntity0);
    
Beam_RelinkBeam(iBeamEntity);
}

stock Beam_RelinkBeam(const iBeamEntity)
{
    static 
FloatvecMins[3];
    static 
FloatvecMaxs[3];
    
    static 
FloatvecOrigin[3];
    static 
FloatvecEndPos[3];
    static 
FloatvecStartPos[3];
    
    
pev(iBeamEntitypev_originvecOrigin);
    
    
Beam_GetStartPos(iBeamEntityvecStartPos);
    
Beam_GetEndPos(iBeamEntityvecEndPos);
    
    
vecMins[0] = floatmin(vecStartPos[0], vecEndPos[0]);
    
vecMins[1] = floatmin(vecStartPos[1], vecEndPos[1]);
    
vecMins[2] = floatmin(vecStartPos[2], vecEndPos[2]);
    
    
vecMaxs[0] = floatmax(vecStartPos[0], vecEndPos[0]);
    
vecMaxs[1] = floatmax(vecStartPos[1], vecEndPos[1]);
    
vecMaxs[2] = floatmax(vecStartPos[2], vecEndPos[2]);
    
    
xs_vec_sub(vecMinsvecOriginvecMins);
    
xs_vec_sub(vecMaxsvecOriginvecMaxs);
    
    
set_pev(iBeamEntitypev_minsvecMins);
    
set_pev(iBeamEntitypev_maxsvecMaxs);
    
    
engfunc(EngFunc_SetSizeiBeamEntityvecMinsvecMaxs);
    
engfunc(EngFunc_SetOriginiBeamEntityvecOrigin);

TO DO:
Add some code examples with creating beam ents
Attached Files
File Type: inc beams.inc (9.8 KB, 2365 views)
__________________

Vi Veri Veniversum Vivus Vici
Russian Half-Life and Adrenaline Gamer community

Last edited by KORD_12.7; 05-04-2013 at 01:41.
KORD_12.7 is offline
Send a message via ICQ to KORD_12.7
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 15:12.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode