mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2024-12-25 07:14:50 +01:00
80 lines
2.6 KiB
C++
80 lines
2.6 KiB
C++
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of version 2 of the GNU General Public License as published by
|
|
the Free Software Foundation
|
|
|
|
|
|
This program 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 this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
|
|
105
|
|
%{
|
|
#include "StdH.h"
|
|
%}
|
|
|
|
%{
|
|
|
|
extern DECL_DLL void JumpFromBouncer(CEntity *penToBounce, CEntity *penBouncer)
|
|
{
|
|
CEntity *pen = penToBounce;
|
|
CBouncer *pbo = (CBouncer *)penBouncer;
|
|
// if it is a movable model and some time has passed from the last jump
|
|
if ( (pen->GetRenderType()==CEntity::RT_MODEL) &&
|
|
(pen->GetPhysicsFlags()&EPF_MOVABLE) ) {
|
|
CMovableEntity *pmen = (CMovableEntity *)pen;
|
|
if (pmen->en_penReference==NULL) {
|
|
return;
|
|
}
|
|
// give it speed
|
|
FLOAT3D vDir;
|
|
AnglesToDirectionVector(pbo->m_aDirection, vDir);
|
|
pmen->FakeJump(pmen->en_vIntendedTranslation, vDir, pbo->m_fSpeed,
|
|
-pbo->m_fParallelComponentMultiplier, pbo->m_fNormalComponentMultiplier, pbo->m_fMaxExitSpeed, pbo->m_tmControl);
|
|
}
|
|
}
|
|
|
|
%}
|
|
|
|
class CBouncer : CRationalEntity {
|
|
name "Bouncer";
|
|
thumbnail "Thumbnails\\Bouncer.tbn";
|
|
features "HasName";
|
|
|
|
properties:
|
|
1 CTString m_strName "Name" 'N' = "Bouncer",
|
|
2 CTString m_strDescription = "",
|
|
|
|
4 FLOAT m_fSpeed "Speed [m/s]" 'S' = 20.0f,
|
|
5 ANGLE3D m_aDirection "Direction" 'D' = ANGLE3D(0,90,0),
|
|
6 FLOAT m_tmControl "Control time" 'T' = 5.0f,
|
|
7 BOOL m_bEntrySpeed = TRUE,
|
|
10 FLOAT m_fMaxExitSpeed "Max exit speed" 'M' = 200.0f,
|
|
12 FLOAT m_fNormalComponentMultiplier "Normal component multiplier" 'O' = 1.0f,
|
|
13 FLOAT m_fParallelComponentMultiplier "Parallel component multiplier" 'P' = 0.0f,
|
|
|
|
components:
|
|
functions:
|
|
procedures:
|
|
Main() {
|
|
// declare yourself as a brush
|
|
InitAsBrush();
|
|
SetPhysicsFlags(EPF_BRUSH_FIXED|EPF_NOIMPACT);
|
|
SetCollisionFlags(ECF_BRUSH);
|
|
|
|
// if old flag "entry speed" has been reset
|
|
if (!m_bEntrySpeed)
|
|
{
|
|
// kill normal component by default (same behaviour by default)
|
|
m_fNormalComponentMultiplier = 0.0f;
|
|
m_bEntrySpeed = TRUE;
|
|
}
|
|
return;
|
|
}
|
|
};
|
|
|