I don't need to test my programs. I have an error-correcting modem.
Difference between revisions of "UE1:RMusic Controller"
m (→Gametype integration (with save support and level change detection)) |
m (→Advanced usage (gametype/console integration)) |
||
Line 158: | Line 158: | ||
//if saved controller is found, we have to restore music | //if saved controller is found, we have to restore music | ||
if(RMusic_Controller != none) RMusic_Controller.EVENT_Player(); | if(RMusic_Controller != none) RMusic_Controller.EVENT_Player(); | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
} | } | ||
Line 203: | Line 169: | ||
event PostLogin( playerpawn NewPlayer ) | event PostLogin( playerpawn NewPlayer ) | ||
{ | { | ||
− | + | local RMusic_Controller RMusic_Controller; | |
− | + | local RMusic_Save RMusic_Save; | |
− | + | local RMusic_Player RMusic_Player; | |
− | + | ||
Super.PostLogin(NewPlayer); | Super.PostLogin(NewPlayer); | ||
− | + | ||
− | + | if(Level.NetMode != NM_DedicatedServer) | |
− | + | { | |
− | + | //we have to found save part | |
− | + | foreach AllActors(class'RMusic_Save', RMusic_Save) | |
+ | { | ||
+ | //we have to check if we have saved controller | ||
+ | if(RMusic_Save.SavedController != none) | ||
+ | { | ||
+ | RMusic_Controller=RMusic_Save.SavedController; | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | //if saved controller is found, we have to restore music | ||
+ | if(RMusic_Controller != none) RMusic_Controller.EVENT_Player(); | ||
+ | else | ||
{ | { | ||
− | //we have to | + | //we found RMusic_Save, so RMusic_Controller is used, but wasn't activated. We have to stop the music if playing |
− | if( | + | RMusic_Player = class'RMusic_Component'.static.Find_RMusicPlayerByPPawn(NewPlayer,none,true); |
+ | if( RMusic_Player != none) | ||
{ | { | ||
− | + | if( RMusic_Player.RMusic_IsPlaying() ) RMusic_Player.RMusic_Stop(); | |
− | + | ||
} | } | ||
} | } | ||
− | + | } | |
− | + | ||
− | + | ||
} | } | ||
</uscript> | </uscript> |
Revision as of 03:41, 2 June 2008
Contents
This class is part of RMusicPlayer by Raven
About
RMusic_Controller is part of RMusicPlayer beta. It controls RMusic_Player.
Usage
In ActorBrowser find Actor->RMusic_Component->RMusic_Controller, place it on map and configure it.
RMusic_Controller properties
You can configure following properties:
Name: PlayerClass
Type: class<RMusic_Player>
Description: Player class (if you want to have own music directory)
Name: RMusic_File
Type: string
Description: Music file to play
Name: RMusic_PlayAtStartup
Type: bool
Description: Should it be played at level start
Name: RMusic_MuteUMX
Type: bool
Description: If true will mute all music in umx files
Name: RMusic_BroadcastToAll
Type: bool
Description: If true, it'll broadcast functions to all players
Name: RMusic_bUnloadPreviousDSP
Type: bool
Description: If true, all DSP plugins will be unloaded
Name: RMusic_bOwnFadeUpdateTime
Type: bool
Description: If true, RMusic_OwnFadeUpdateTime will be used instead of default FaderUpdateTime in RMusic_Player
Name: RMusic_OwnFadeUpdateTime
Type: float
Description: Defines how fast music will fade in/out
Name: RMusic_bUseSaveControl
Type: bool
Description: If true, special RMusic_Save will be spawned to track last used controller
Name: RMusic_DSPPlugins[16]
Type: string
Description: DSP plugins to load
Name: Action
Type: ENum
Values:
- AC_Play - Plays music
- AC_Stop - Stops music
- AC_ShutDown - Shutdown FMODEX (avoid this one ;) )
Description: Action
Name: RMusic_PlayType
Type: ENum
Values:
- PT_Loop - Loops music
- PT_PlayOnce - Plays once
Description: Play type
Name: RMusic_Transition
Type: ENum
Values:
- TRANS_Instanly - Instant transition
- TRANS_Fade - Smooth fade
Description: Transition type
Advanced usage (gametype/console integration)
RMusicPlayer can be also integrated with gametypes, console.
Gametype integration (with save support and level change detection)
Subclass of SinglePlayer2 (SinglePlayer2 is part of OldSkool by UsAaR33)
class RMusic_SingleGameInfo extends SinglePlayer2; event PostLogin( playerpawn NewPlayer ) { local RMusic_Controller RMusic_Controller; local RMusic_Save RMusic_Save; local RMusic_Player RMusic_Player; Super.PostLogin(NewPlayer); if(Level.NetMode != NM_DedicatedServer) { if(NewPlayer.GetEntryLevel() != none) { //we have to find music player in Entry level RMusic_Player = class'RMusic_Component'.static.Find_RMusicPlayerByPPawn(NewPlayer,none,true); if( RMusic_Player != none) { //then we stops currently played song RMusic_Player.RMusic_Stop(); //and eventually add info about player/current level if( RMusic_Player.bAuthoritative ) { RMusic_Player.RMusic_LocalPlayer = NewPlayer; RMusic_Player.RMusic_OldLevel = NewPlayer.Level; } } } //we have to found save part foreach AllActors(class'RMusic_Save', RMusic_Save) { //we have to check if we have saved controller if(RMusic_Save.SavedController != none) { RMusic_Controller=RMusic_Save.SavedController; break; } } //if saved controller is found, we have to restore music if(RMusic_Controller != none) RMusic_Controller.EVENT_Player(); } }
Gametype integration (with save support only)
Subclass of SinglePlayer2 (SinglePlayer2 is part of OldSkool by UsAaR33)
class RMusic_SingleGameInfo extends SinglePlayer2; event PostLogin( playerpawn NewPlayer ) { local RMusic_Controller RMusic_Controller; local RMusic_Save RMusic_Save; local RMusic_Player RMusic_Player; Super.PostLogin(NewPlayer); if(Level.NetMode != NM_DedicatedServer) { //we have to found save part foreach AllActors(class'RMusic_Save', RMusic_Save) { //we have to check if we have saved controller if(RMusic_Save.SavedController != none) { RMusic_Controller=RMusic_Save.SavedController; break; } } //if saved controller is found, we have to restore music if(RMusic_Controller != none) RMusic_Controller.EVENT_Player(); else { //we found RMusic_Save, so RMusic_Controller is used, but wasn't activated. We have to stop the music if playing RMusic_Player = class'RMusic_Component'.static.Find_RMusicPlayerByPPawn(NewPlayer,none,true); if( RMusic_Player != none) { if( RMusic_Player.RMusic_IsPlaying() ) RMusic_Player.RMusic_Stop(); } } } }
Console integration
Subclass of UTConsole
class RMusic_Console extends UTConsole; function DrawLevelAction( canvas C ) { local RMusic_Player RMusic_Player; local PlayerPawn PP; if ( Viewport.Actor.Level.LevelAction == LEVACT_Loading ) // Loading Screen { PP = Root.GetPlayerOwner(); if(PP != none) { if(PP.GetEntryLevel() != none) { foreach PP.GetEntryLevel().AllActors(class'RMusic_Player', RMusic_Player) break; if (RMusic_Player != none && RMusic_Player.RMusic_IsPlaying()) RMusic_Player.RMusic_Stop(); } } } Super.DrawLevelAction(C); }