|
|
(9 intermediate revisions by 4 users not shown) |
Line 1: |
Line 1: |
| Do not edit the area above the separator line, please. | | Do not edit the area above the separator line, please. |
| ---- | | ---- |
− | [[Legacy:Actor]]
| + | UIComp_DrawImage custom subclasses: |
− | [[Actor]]
| + | {{#dpl: |
− | [[UE3:Actor (UT3)]]
| + | |category=Subclasses of UIComp_DrawImage{{!}}Subclasses of UIComp_DrawImage (UE3)}{{!}}Subclasses of UIComp_DrawImage (UT3) |
− | [[Project:Sandbox]]
| + | |category=Custom classes{{!}}Custom UE3-specific classes{{!}}Custom UT3-specific classes |
− | | + | |namespace={{#if:UE3|{{!}}UE3}}{{!}}User |
− | <uscript>
| + | |format=,[[%PAGE%|%TITLE%]],, |
− | /** Override BeginFire so that it will enter the firing state right away. */
| + | |inlinetext=,  |
− | simulated function BeginFire(byte FireModeNum)
| + | |shownamespace=false |
− | { | + | |replaceintitle=/ (?!\()/,_ |
− | | + | |resultsheader=\n;Known custom subclasses:: |
− | // verify that our owning pawn isn't busy before calling Super.BeginFire(), which is where PendingFire is set
| + | |oneresultheader=\n;Known custom subclass:: |
− | if ( !IsFiringAllowed(FireModeNum) )
| + | |noresultsheader=<nowiki></nowiki> |
− | {
| + | |allowcachedresults=true |
− | return;
| + | }} |
− | }
| + | |
− | //`log(`location @ `showvar(IsTimerActive(nameof(DelayedFire)),DelayedFire Active));
| + | |
− | | + | |
− | Super.BeginFire(FireModeNum);
| + | |
− | | + | |
− | } | + | |
− | | + | |
− | | + | |
− | /**
| + | |
− | * For tracehit weapons with no prefire delay, handles firing the weapon.
| + | |
− | */
| + | |
− | simulated function InstantFire()
| + | |
− | { | + | |
− | //`log(`location);
| + | |
− | CustomFire();
| + | |
− | PerformInstantFire();
| + | |
− | } | + | |
− | | + | |
− | /**
| + | |
− | * For weapons using projectiles, which have no prefire delay - fires the weapon.
| + | |
− | */
| + | |
− | simulated function Projectile ProjectileFire()
| + | |
− | { | + | |
− | //`log(`location);
| + | |
− | CustomFire();
| + | |
− | return Super.ProjectileFire();
| + | |
− | | + | |
− | } | + | |
− | | + | |
− | simulated function Delayed_CustomFire( byte FireModeNum );
| + | |
− | | + | |
− | /**
| + | |
− | * Called on a timer (set in BeginFire()), this is called only for weapons which have a prefire delay.
| + | |
− | */
| + | |
− | simulated function DelayedFire()
| + | |
− | { | + | |
− | DelayedWeaponFire(0);
| + | |
− | } | + | |
− | | + | |
− | /**
| + | |
− | * Called on a timer (set in BeginFire()), this is called only for weapons which have a prefire delay.
| + | |
− | */
| + | |
− | simulated function DelayedAltFire()
| + | |
− | { | + | |
− | DelayedWeaponFire(1);
| + | |
− | } | + | |
− | | + | |
− | simulated function DelayedWeaponFire( byte FireModeNum )
| + | |
− | {
| + | |
− | //`log(`location);
| + | |
− | // restore our WeaponFireType, since we switched it to EWFT_Custom in BeginFire()
| + | |
− | WeaponFireTypes[FireModeNum] = default.WeaponFireTypes[FireModeNum];
| + | |
− | if ( WeaponFireTypes[FireModeNum] == EWFT_InstantHit )
| + | |
− | {
| + | |
− | // our own version of InstantFire() is only called for weapons that do not have a prefire
| + | |
− | // delay, so go directly to our parent class/state version
| + | |
− | PerformInstantFire();
| + | |
− | }
| + | |
− | else if ( WeaponFireTypes[FireModeNum] == EWFT_Projectile )
| + | |
− | {
| + | |
− | // our own version of ProjectileFire() is only called for weapons that do not have a prefire
| + | |
− | // delay, so go directly to our parent class/state version
| + | |
− | Super.ProjectileFire();
| + | |
− | }
| + | |
− | else if ( WeaponFireTypes[FireModeNum] == EWFT_Custom )
| + | |
− | {
| + | |
− | Delayed_CustomFire(FireModeNum);
| + | |
− | }
| + | |
− | | + | |
− | PrefireCachedStartTrace = vect(0,0,0);
| + | |
− | }
| + | |
− | | + | |
− | /** | + | |
− | * Utility function to allow me to inject some debugging code prior to passing control to our parent classes.
| + | |
− | */
| + | |
− | protected simulated function PerformInstantFire()
| + | |
− | {
| + | |
− | Super.InstantFire();
| + | |
− | }
| + | |
− | | + | |
− | </uscript>
| + | |
− | | + | |
− | Testing UScript highlighter...
| + | |
− | <uscript>
| + | |
− | class X extends Y within Z
| + | |
− | implements(I)
| + | |
− | nottransient;
| + | |
− | | + | |
− | `include(SomeFile.uci)
| + | |
− | | + | |
− | | + | |
− | var(Group) interp struct Type {
| + | |
− | var() bool bCorrect;
| + | |
− | var array<class<Actor> > ActorClasses;
| + | |
− | } VarName;
| + | |
− | | + | |
− | reliable client function CheckType(optional class<Actor> ActorClass)
| + | |
− | {
| + | |
− | local int i;
| + | |
− | | + | |
− | for (i = 0; i < VarName.ActorClasses.Length; ++i) {
| + | |
− | if (ActorClass == None || ClassIsChildOf(VarName.ActorClasses[i], ActorClass)) {
| + | |
− | VarName.ActorClasses[i].static.StaticSaveConfig();
| + | |
− | continue;
| + | |
− | }
| + | |
− | VarName.ActorClasses.Remove(i--, 1);
| + | |
− | }
| + | |
− | VarName.bCorrect = True;
| + | |
− | }
| + | |
− | | + | |
− | static function byte GetHash(int Value)
| + | |
− | {
| + | |
− | switch (Value) {
| + | |
− | case -1:
| + | |
− | return 0;
| + | |
− | case 0xCAFE:
| + | |
− | return 1
| + | |
− | default:
| + | |
− | return (Value >= 0 && Value < 10) ? class'Hasher'.default.Hash[Value] : (Value & 0xff);
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | defaultproperties
| + | |
− | {
| + | |
− | VarName.Empty
| + | |
− | VarName[0] = {(
| + | |
− | bCorrect = True,
| + | |
− | ActorClasses.Add(class'ReplicationInfo')
| + | |
− | )}
| + | |
− | } | + | |
− | </uscript>
| + | |
Do not edit the area above the separator line, please.