Serious-Engine/Sources/Entities/PlayerActionMarker.es

108 lines
4.3 KiB
C++
Raw Normal View History

2016-04-08 00:11:36 +02:00
407
%{
#include "Entities/StdH/StdH.h"
%}
uses "Entities/Marker";
uses "Entities/Player";
enum PlayerAutoAction {
1 PAA_RUN "Run", // run to this marker
2 PAA_WAIT "Wait", // wait given time
3 PAA_USEITEM "UseItem", // use some item here
4 PAA_STOREWEAPON "StoreWeapon", // put current weapon away
5 PAA_DRAWWEAPON "DrawWeapon", // put current weapon back in hand
6 PAA_LOOKAROUND "LookAround", // wait given time and look around
7 PAA_RUNANDSTOP "RunAndStop", // run to this marker and stop at it
8 PAA_RECORDSTATS "RecordStats", // before end of level animation - record statistics
9 PAA_ENDOFGAME "EndOfGame", // the game has ended - go to computer, then to menu
10 PAA_SHOWSTATS "ShowStats", // after end of level animation - show statistics
11 PAA_APPEARING "Appearing", // appearing with stardust effect
12 PAA_WAITFOREVER "WaitForever", // wait trigger
13 PAA_TELEPORT "Teleport", // teleport to new location
14 PAA_PICKITEM "PickItem", // pick item
15 PAA_FALLDOWN "FallDown", // falling from broken bridge
16 PAA_FALLTOABYSS "FallToAbyss", // falling down into an abyss
17 PAA_RELEASEPLAYER "ReleasePlayer", // return control to player from camera and similar
18 PAA_STARTCOMPUTER "StartComputer", // invoke netricsa
19 PAA_TRAVELING_IN_BEAM "TravelingInBeam", // traveling in space shpi beam
20 PAA_LOGO_FIRE_MINIGUN "LogoFireMinigun", // fire minigun in logo sequence
21 PAA_STARTCREDITS "StartCredits", // start credits printout
22 PAA_STARTINTROSCROLL "StartIntroScroll", // start intro text scroll
23 PAA_STOPSCROLLER "StopScroller", // stop intro scroll, or end-of-game credits
24 PAA_NOGRAVITY "NoGravity", // deactivate gravity influence for player
25 PAA_TURNONGRAVITY "TurnOnGravity", // turn on gravity
};
class CPlayerActionMarker: CMarker {
name "PlayerActionMarker";
thumbnail "Thumbnails\\PlayerActionMarker.tbn";
properties:
1 enum PlayerAutoAction m_paaAction "Action" 'A' = PAA_RUN, // what to do here
2 FLOAT m_tmWait "Wait" 'W' = 0.0f, // how long to wait (if wait action)
3 CEntityPointer m_penDoorController "Door for item" 'D', // where to use the item (if use action)
4 CEntityPointer m_penTrigger "Trigger" 'G', // triggered when player gets here
5 FLOAT m_fSpeed "Speed" 'S' = 1.0f, // how fast to run towards marker
6 CEntityPointer m_penItem "Item to pick" 'I',
components:
1 model MODEL_MARKER "Models\\Editor\\PlayerActionMarker.mdl",
2 texture TEXTURE_MARKER "Models\\Editor\\PlayerActionMarker.tex",
functions:
const CTString &GetDescription(void) const {
CTString strAction = PlayerAutoAction_enum.NameForValue(INDEX(m_paaAction));
if (m_penTarget==NULL) {
((CTString&)m_strDescription).PrintF("%s (%s)-><none>", (const char*)m_strName, (const char*)strAction);
} else {
((CTString&)m_strDescription).PrintF("%s (%s)->%s", (const char*)m_strName, (const char*)strAction,
(const char*)m_penTarget->GetName());
}
return m_strDescription;
}
/* Check if entity can drop marker for making linked route. */
BOOL DropsMarker(CTFileName &fnmMarkerClass, CTString &strTargetProperty) const {
fnmMarkerClass = CTFILENAME("Classes\\PlayerActionMarker.ecl");
strTargetProperty = "Target";
return TRUE;
}
/* Handle an event, return false if the event is not handled. */
BOOL HandleEvent(const CEntityEvent &ee)
{
// if triggered
if (ee.ee_slEvent==EVENTCODE_ETrigger) {
ETrigger &eTrigger = (ETrigger &)ee;
// if triggered by a player
if( IsDerivedFromClass(eTrigger.penCaused, "Player")) {
// send it event to start auto actions from here
EAutoAction eAutoAction;
eAutoAction.penFirstMarker = this;
eTrigger.penCaused->SendEvent(eAutoAction);
}
return TRUE;
}
return FALSE;
}
procedures:
Main()
{
InitAsEditorModel();
SetPhysicsFlags(EPF_MODEL_IMMATERIAL);
SetCollisionFlags(ECF_IMMATERIAL);
// set appearance
SetModel(MODEL_MARKER);
SetModelMainTexture(TEXTURE_MARKER);
m_tmWait = ClampDn(m_tmWait, 0.05f);
return;
}
};