mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2024-12-26 23:54:50 +01:00
127 lines
3.3 KiB
Erlang
127 lines
3.3 KiB
Erlang
|
/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */
|
||
|
|
||
|
354
|
||
|
%{
|
||
|
#include "StdH.h"
|
||
|
#include "EntitiesMP/BackgroundViewer.h"
|
||
|
#include "EntitiesMP/WorldSettingsController.h"
|
||
|
#include "EntitiesMP/EnemyBase.h"
|
||
|
%}
|
||
|
|
||
|
// event for initialisation
|
||
|
event ESeriousBomb {
|
||
|
CEntityPointer penOwner,
|
||
|
};
|
||
|
|
||
|
%{
|
||
|
void CSeriousBomb_OnPrecache(CDLLEntityClass *pdec, INDEX iUser)
|
||
|
{
|
||
|
pdec-> PrecacheSound(SOUND_BLOW);
|
||
|
};
|
||
|
%}
|
||
|
|
||
|
class CSeriousBomb : CRationalEntity {
|
||
|
name "Serious Bomb";
|
||
|
thumbnail "";
|
||
|
features "ImplementsOnPrecache";
|
||
|
|
||
|
properties:
|
||
|
1 CEntityPointer m_penOwner, // entity which owns it
|
||
|
20 CSoundObject m_soBlow,
|
||
|
|
||
|
components:
|
||
|
|
||
|
//0 class CLASS_BASE "Classes\\Item.ecl",
|
||
|
|
||
|
//1 model MODEL_BOMB "ModelsMP\\Items\\PowerUps\\SeriousBomb\\SeriousBomb.mdl",
|
||
|
//2 texture TEXTURE_BOMB "ModelsMP\\Items\\PowerUps\\SeriousBomb\\SeriousBomb.tex",
|
||
|
|
||
|
100 sound SOUND_BLOW "SoundsMP\\Weapons\\SeriousBombBlow.wav",
|
||
|
|
||
|
|
||
|
functions:
|
||
|
|
||
|
void ShakeItBaby(FLOAT tmShaketime, FLOAT fPower, FLOAT fFade, BOOL bFadeIn)
|
||
|
{
|
||
|
CWorldSettingsController *pwsc = GetWSC(this);
|
||
|
if (pwsc!=NULL) {
|
||
|
pwsc->m_tmShakeStarted = tmShaketime;
|
||
|
pwsc->m_vShakePos = GetPlacement().pl_PositionVector;
|
||
|
pwsc->m_fShakeFalloff = 450.0f;
|
||
|
pwsc->m_fShakeFade = fFade;
|
||
|
|
||
|
pwsc->m_fShakeIntensityZ = 0;
|
||
|
pwsc->m_tmShakeFrequencyZ = 5.0f;
|
||
|
pwsc->m_fShakeIntensityY = 0.1f*fPower;
|
||
|
pwsc->m_tmShakeFrequencyY = 5.0f;
|
||
|
pwsc->m_fShakeIntensityB = 2.5f*fPower;
|
||
|
pwsc->m_tmShakeFrequencyB = 7.2f;
|
||
|
|
||
|
pwsc->m_bShakeFadeIn = bFadeIn;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Glare(FLOAT fStart, FLOAT fEnd, FLOAT fFinR, FLOAT fFoutR)
|
||
|
{
|
||
|
CWorldSettingsController *pwsc = GetWSC(this);
|
||
|
if (pwsc!=NULL)
|
||
|
{
|
||
|
pwsc->m_colGlade=C_WHITE;
|
||
|
pwsc->m_tmGlaringStarted = _pTimer->CurrentTick()+fStart;
|
||
|
pwsc->m_tmGlaringEnded = pwsc->m_tmGlaringStarted+fEnd;
|
||
|
pwsc->m_fGlaringFadeInRatio = fFinR;
|
||
|
pwsc->m_fGlaringFadeOutRatio = fFoutR;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void ExplodeBomb( void )
|
||
|
{
|
||
|
// for each entity in the world
|
||
|
{FOREACHINDYNAMICCONTAINER(this->GetWorld()->wo_cenEntities, CEntity, iten) {
|
||
|
CEntity *pen = iten;
|
||
|
if (IsDerivedFromClass(pen, "Enemy Base")) {
|
||
|
CEnemyBase *penEnemy = (CEnemyBase *)pen;
|
||
|
if (penEnemy->m_bBoss==TRUE || DistanceTo(this, penEnemy)>250.0f) {
|
||
|
continue;
|
||
|
}
|
||
|
this->InflictDirectDamage(pen, this, DMT_EXPLOSION, penEnemy->GetHealth()+100.0f, pen->GetPlacement().pl_PositionVector, FLOAT3D(0,1,0));
|
||
|
}
|
||
|
}}
|
||
|
}
|
||
|
|
||
|
procedures:
|
||
|
|
||
|
Main(ESeriousBomb esb)
|
||
|
{
|
||
|
InitAsVoid();
|
||
|
|
||
|
if (esb.penOwner) {
|
||
|
m_penOwner = esb.penOwner;
|
||
|
|
||
|
m_soBlow.Set3DParameters(500.0f, 250.0f, 3.0f, 1.0f);
|
||
|
PlaySound(m_soBlow, SOUND_BLOW, SOF_3D);
|
||
|
if(_pNetwork->IsPlayerLocal(m_penOwner)) {IFeel_PlayEffect("SeriousBombBlow");}
|
||
|
|
||
|
//Glare(tmp_af[5], tmp_af[6], tmp_af[7], tmp_af[8]);
|
||
|
Glare(1.0f, 2.8f, 0.3f, 0.3f);
|
||
|
|
||
|
ShakeItBaby(_pTimer->CurrentTick(), 4.0f, 1.0f, TRUE);
|
||
|
autowait(1.5f);
|
||
|
|
||
|
// fading shake
|
||
|
ShakeItBaby(_pTimer->CurrentTick(), 8.0f, 2.0f, FALSE);
|
||
|
|
||
|
// explode bomb twicejust to be sure
|
||
|
ExplodeBomb();
|
||
|
autowait(0.25f);
|
||
|
ExplodeBomb();
|
||
|
autowait(1.75f);
|
||
|
|
||
|
}
|
||
|
Destroy();
|
||
|
return;
|
||
|
};
|
||
|
|
||
|
};
|