Once I get that upgrade to 36-hour days, I will tackle that. – Mychaeel
Difference between revisions of "UE1:RMusicPlayer"
m (→Gametype integration (with save support)) |
m (→Gametype integration (without save support)) |
||
Line 197: | Line 197: | ||
if(Level.NetMode != NM_DedicatedServer && Level.NetMode != NM_ListenServer) | if(Level.NetMode != NM_DedicatedServer && Level.NetMode != NM_ListenServer) | ||
{ | { | ||
− | + | if(NewPlayer.GetEntryLevel() != none) | |
− | + | ||
{ | { | ||
− | // | + | //we have to find music player in Entry level |
− | + | foreach NewPlayer.GetEntryLevel().AllActors(class'RMusic_Player',RMusic_Player) | |
− | + | ||
− | + | ||
{ | { | ||
− | RMusic_Player.RMusic_LocalPlayer = NewPlayer; | + | //then we stops currently played song |
− | + | RMusic_Player.RMusic_Stop(false); | |
+ | //and eventually add info about player/current level | ||
+ | if( RMusic_Player.bAuthoritative ) | ||
+ | { | ||
+ | RMusic_Player.RMusic_LocalPlayer = NewPlayer; | ||
+ | RMusic_Player.RMusic_OldLevel = NewPlayer.Level; | ||
+ | } | ||
} | } | ||
} | } |
Revision as of 11:34, 26 May 2008
Contents
About
RMusicPlayer is new version of RvMp3Player. The code has been completly rewritten, this time using FMODEX. Features:
- Mod support (you can subclass RMusic_Player to define new music directory)
- Save support in SP games
- Supports many audio files (flac, mp2, mp3, ogg, wma, wav)
- Crossfades/fades in/fades out music
Current bugs (will be fixed):
- DSP plugins - everything loads fine, but I can't hear difference :)
- You can't have more then one DSP plugin
- Additional codecs doesn't work
ToDo:
- Add complete readme about RMusic_Player native function, non-native functions and variables
- Fix DSP plugin architecture
- Fix loading additional codecs
Class tree
+- Actor_(UT) +- RMusic_Component - holds everything toghether and implements some basic functions +- RMusic_Controller - controls RMusic_Player +- RMusic_Player - plays music. This class is spawned either by RMusic_Controller or game type/console. +- RMusic_Save - spawned by RMusic_Controller. Stores information about last used RMusic_Controller
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)
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 && Level.NetMode != NM_ListenServer) { if(NewPlayer.GetEntryLevel() != none) { //we have to find music player in Entry level foreach NewPlayer.GetEntryLevel().AllActors(class'RMusic_Player',RMusic_Player) { //then we stops currently played song RMusic_Player.RMusic_Stop(false); //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 (without save support)
Subclass of coopgame2 (coopgame2 is part of OldSkool by UsAaR33)
class RMusic_CoopGameInfo extends coopgame2; 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 && Level.NetMode != NM_ListenServer) { if(NewPlayer.GetEntryLevel() != none) { //we have to find music player in Entry level foreach NewPlayer.GetEntryLevel().AllActors(class'RMusic_Player',RMusic_Player) { //then we stops currently played song RMusic_Player.RMusic_Stop(false); //and eventually add info about player/current level if( RMusic_Player.bAuthoritative ) { RMusic_Player.RMusic_LocalPlayer = NewPlayer; RMusic_Player.RMusic_OldLevel = NewPlayer.Level; } } } } }
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) { foreach PP.GetEntryLevel().AllActors(class'RMusic_Player', RMusic_Player) break; if (RMusic_Player != none) RMusic_Player.RMusic_Stop(false); } } Super.DrawLevelAction(C); }
Download
link: [1]