126 lines
3.2 KiB
Plaintext
126 lines
3.2 KiB
Plaintext
main()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "stop_animmode" );
|
|
self notify( "killanimscript" );
|
|
self._tag_entity endon( self._anime );
|
|
|
|
if ( isdefined( self._custom_anim_thread ) )
|
|
{
|
|
self thread [[ self._custom_anim_thread ]]();
|
|
self._custom_anim_thread = undefined;
|
|
}
|
|
|
|
loop = isdefined( self._custom_anim_loop ) && self._custom_anim_loop;
|
|
if ( loop )
|
|
{
|
|
self endon( "stop_loop" );
|
|
self._custom_anim_loop = undefined;
|
|
}
|
|
else
|
|
{
|
|
thread notify_on_end( self._anime );
|
|
}
|
|
|
|
anime = self._anime;
|
|
self._anime = undefined;
|
|
|
|
arraySize = 0;
|
|
if ( loop )
|
|
{
|
|
arraySize = level.scr_anim[ self._animname ][ anime ].size;
|
|
animationName = level.scr_anim[ self._animname ][ anime ][ randomint( arraySize ) ];
|
|
}
|
|
else
|
|
{
|
|
animationName = level.scr_anim[ self._animname ][ anime ];
|
|
}
|
|
|
|
origin = getstartOrigin( self._tag_entity.origin, self._tag_entity.angles, animationName );
|
|
angles = getstartAngles( self._tag_entity.origin, self._tag_entity.angles, animationName );
|
|
|
|
newOrigin = self getDropToFloorPosition( origin );
|
|
if ( isdefined( newOrigin ) )
|
|
origin = newOrigin;
|
|
else
|
|
println( "Custom animation may be playing in solid for entity '" + self getentnum() + "'\n" );
|
|
|
|
if ( !isdefined( self.noTeleport ) )
|
|
self teleport( origin, angles );
|
|
|
|
self.pushable = 0;
|
|
|
|
clear_time = 0.3;
|
|
blend_time = 0.2;
|
|
|
|
if ( isdefined( self.anim_blend_time_override ) )
|
|
{
|
|
clear_time = self.anim_blend_time_override;
|
|
blend_time = self.anim_blend_time_override;
|
|
}
|
|
|
|
self animMode( self._animmode );
|
|
self clearAnim( self.root_anim, clear_time );
|
|
|
|
// self setAnim( %body, 1, 0 ); // The %body node should always have weight 1.
|
|
self OrientMode( "face angle", angles[ 1 ] );
|
|
|
|
anim_string = "custom_animmode";
|
|
self setflaggedanimrestart( anim_string, animationName, 1, blend_time, 1 );
|
|
self._tag_entity thread maps\_anim::start_notetrack_wait( self, anim_string, anime, self._animname );
|
|
self._tag_entity thread maps\_anim::animscriptDoNoteTracksThread( self, anim_string, anime );
|
|
|
|
//thread maps\_debug::drawArrowForever( self._tag_entity.origin, self._tag_entity.angles );
|
|
|
|
tag_entity = self._tag_entity;
|
|
self._tag_entity = undefined;
|
|
self._animmode = undefined;
|
|
|
|
self endon( "killanimscript" );
|
|
|
|
endMarker = "end";
|
|
|
|
if ( !loop )
|
|
{
|
|
if ( animHasNoteTrack( animationName, "finish" ) )
|
|
endMarker = "finish";
|
|
else if ( animHasNoteTrack( animationName, "stop anim" ) )
|
|
endMarker = "stop anim";
|
|
}
|
|
|
|
while ( 1 )
|
|
{
|
|
self waittillmatch( anim_string, endMarker );
|
|
|
|
if ( loop )
|
|
{
|
|
animationName = level.scr_anim[ self._animname ][ anime ][ randomint( arraySize ) ];
|
|
self SetFlaggedAnimKnobLimitedRestart( anim_string, animationName, 1, 0.2, 1 );
|
|
|
|
if ( isdefined( tag_entity ) )
|
|
{
|
|
tag_entity thread maps\_anim::start_notetrack_wait( self, anim_string, anime, self._animname );
|
|
tag_entity thread maps\_anim::animscriptDoNoteTracksThread( self, anim_string, anime );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( endMarker != "end" )
|
|
self OrientMode( "face motion" );
|
|
|
|
self notify( "finished_custom_animmode" + anime );
|
|
}
|
|
|
|
notify_on_end( msg )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "finished_custom_animmode" + msg );
|
|
|
|
self waittill( "killanimscript" );
|
|
|
|
self notify( "finished_custom_animmode" + msg );
|
|
} |