- Timestamp:
- Mar 15, 2011, 9:47:11 PM (14 years ago)
- Location:
- code/trunk
- Files:
-
- 116 edited
- 4 copied
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
-
code/trunk/cmake/tools/TargetUtilities.cmake
r7818 r8079 266 266 ADD_MODULE(${_target_name}) 267 267 # Ensure that the main program depends on the module 268 SET(ORXONOX_MODULES ${ORXONOX_MODULES} ${_target_name} CACHE STRING "" FORCE)268 SET(ORXONOX_MODULES ${ORXONOX_MODULES} ${_target_name} CACHE INTERNAL "") 269 269 ENDIF() 270 270 -
code/trunk/data/defaultConfig/keybindings.ini
r7533 r8079 42 42 KeyF9= 43 43 KeyG=greet 44 KeyGrave=" openConsole"44 KeyGrave="InGameConsole openConsole" 45 45 KeyH= 46 46 KeyHome= … … 127 127 KeyU="" 128 128 KeyUP="scale 1 moveFrontBack" 129 KeyUnassigned=" openConsole"129 KeyUnassigned="InGameConsole openConsole" 130 130 KeyUnderline= 131 131 KeyUnlabeled= -
code/trunk/data/gui/configs/CEGUIConfig.xsd
r5781 r8079 2 2 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 3 3 4 4 <xsd:element name="CEGUIConfig" type="CEGUIConfigType"/> 5 5 6 6 <xsd:simpleType name="LogLevel"> … … 12 12 </xsd:restriction> 13 13 </xsd:simpleType> 14 15 16 17 18 19 20 21 22 14 15 <xsd:complexType name="CEGUIConfigType"> 16 <xsd:attribute name="Logfile" type="xsd:string" use="optional" default=""/> 17 <xsd:attribute name="Scheme" type="xsd:string" use="optional" default=""/> 18 <xsd:attribute name="DefaultFont" type="xsd:string" use="optional" default=""/> 19 <xsd:attribute name="Layout" type="xsd:string" use="optional" default=""/> 20 <xsd:attribute name="InitScript" type="xsd:string" use="optional" default=""/> 21 <xsd:attribute name="TerminateScript" type="xsd:string" use="optional" default=""/> 22 <xsd:attribute name="DefaultResourceGroup" type="xsd:string" use="optional" default="" /> 23 23 <xsd:attribute name="LoggingLevel" type="LogLevel" use="optional" default="Standard" /> 24 25 24 </xsd:complexType> 25 26 26 </xsd:schema> 27 27 -
code/trunk/data/gui/layouts/GraphicsMenu.layout
r7801 r8079 15 15 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 16 16 <Property Name="VertFormatting" Value="TopAligned" /> 17 <Property Name="UnifiedAreaRect" Value="{{0.25,0},{0.2,0},{0.75,0},{0.6375,0}}" /> 18 <Window Type="MenuWidgets/StaticText" Name="orxonox/Resolution" > 19 <Property Name="Text" Value="Resolution" /> 20 <Property Name="InheritsAlpha" Value="False" /> 21 <Property Name="HorzFormatting" Value="HorzCentred" /> 17 <Property Name="UnifiedAreaRect" Value="{{0.25,0},{0.15,0},{0.75,0},{0.6375,0}}" /> 18 <Window Type="MenuWidgets/TabControl" Name="orxonox/GraphicsTabControl" > 19 <Property Name="TabHeight" Value="{0,26.4388}" /> 22 20 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 23 <Property Name="VertFormatting" Value="TopAligned" /> 24 <Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.10,0},{0.475,0},{0.65,0}}" /> 25 <Window Type="MenuWidgets/Listbox" Name="orxonox/ResolutionListbox" > 21 <Property Name="TabPanePosition" Value="Top" /> 22 <Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.1,0},{0.95,0},{0.925,0}}" /> 23 <Window Type="DefaultWindow" Name="orxonox/Display" > 24 <Property Name="Text" Value="Display" /> 26 25 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 27 <Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.2,0},{0.95,0},{0.95,0}}" /> 28 <Event Name="ItemSelectionChanged" Function="GraphicsMenu.GraphicsResolutionListbox_changed"/> 26 <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{1,0},{1,0}}" /> 27 <Window Type="MenuWidgets/StaticText" Name="orxonox/Display/Resolution" > 28 <Property Name="Text" Value="Resolution" /> 29 <Property Name="HorzFormatting" Value="HorzCentred" /> 30 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 31 <Property Name="VertFormatting" Value="TopAligned" /> 32 <Property Name="UnifiedAreaRect" Value="{{0.025,0},{0.035,0},{0.4875,0},{0.96,0}}" /> 33 <Window Type="MenuWidgets/Checkbox" Name="orxonox/Display/Resolution/Fullscreen" > 34 <Property Name="Text" Value="Fullscreen" /> 35 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 36 <Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.15,0},{0.95,0},{0.27,0}}" /> 37 <Event Name="CheckStateChanged" Function="GraphicsMenu.callback_FullscreenCheckbox_CheckStateChanged" /> 38 </Window> 39 <Window Type="MenuWidgets/Combobox" Name="orxonox/Display/Resolution/Combobox" > 40 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 41 <Property Name="ClippedByParent" Value="False" /> 42 <Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.3,0},{0.95,0},{1.2,0}}" /> 43 <Property Name="MaxEditTextLength" Value="1073741823" /> 44 <Event Name="ListSelectionAccepted" Function="GraphicsMenu.callback_ResolutionCombobox_ListSelectionAccepted" /> 45 </Window> 46 <Window Type="MenuWidgets/Editbox" Name="orxonox/Display/Resolution/EditboxWidth" > 47 <Property Name="MaxTextLength" Value="1073741823" /> 48 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 49 <Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.45,0},{0.45,0},{0.57,0}}" /> 50 <Event Name="TextChanged" Function="GraphicsMenu.callback_ResolutionEditboxWidth_TextChanged" /> 51 </Window> 52 <Window Type="MenuWidgets/Editbox" Name="orxonox/Display/Resolution/EditboxHeight" > 53 <Property Name="MaxTextLength" Value="1073741823" /> 54 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 55 <Property Name="UnifiedAreaRect" Value="{{0.55,0},{0.45,0},{0.95,0},{0.57,0}}" /> 56 <Event Name="TextChanged" Function="GraphicsMenu.callback_ResolutionEditboxHeight_TextChanged" /> 57 </Window> 58 <Window Type="MenuWidgets/StaticText" Name="orxonox/Display/Resolution/x" > 59 <Property Name="Text" Value="x" /> 60 <Property Name="FrameEnabled" Value="False" /> 61 <Property Name="HorzFormatting" Value="HorzCentred" /> 62 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 63 <Property Name="UnifiedAreaRect" Value="{{0.45,0},{0.45,0},{0.55,0},{0.57,0}}" /> 64 <Property Name="BackgroundEnabled" Value="False" /> 65 </Window> 66 <Window Type="MenuWidgets/Button" Name="orxonox/Display/Resolution/Apply" > 67 <Property Name="Text" Value="Apply" /> 68 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 69 <Property Name="UnifiedAreaRect" Value="{{0.25,0},{0.61,0},{0.75,0},{0.73,0}}" /> 70 <Event Name="Clicked" Function="GraphicsMenu.callback_Apply_Clicked" /> 71 </Window> 72 <Window Type="MenuWidgets/StaticText" Name="orxonox/Display/Resolution/AspectRatioLabel" > 73 <Property Name="Text" Value="Aspect Ratio" /> 74 <Property Name="FrameEnabled" Value="False" /> 75 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 76 <Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.825,0},{0.6,0},{0.95,0}}" /> 77 <Property Name="BackgroundEnabled" Value="False" /> 78 </Window> 79 <Window Type="MenuWidgets/Editbox" Name="orxonox/Display/Resolution/AspectRatio" > 80 <Property Name="Text" Value="1" /> 81 <Property Name="MaxTextLength" Value="1073741823" /> 82 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 83 <Property Name="UnifiedAreaRect" Value="{{0.65,0},{0.825,0},{0.95,0},{0.95,0}}" /> 84 </Window> 85 </Window> 86 <Window Type="MenuWidgets/StaticText" Name="orxonox/Display/Theme" > 87 <Property Name="Text" Value="Theme" /> 88 <Property Name="HorzFormatting" Value="HorzCentred" /> 89 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 90 <Property Name="VertFormatting" Value="TopAligned" /> 91 <Property Name="UnifiedAreaRect" Value="{{0.5125,0},{0.035,0},{0.975,0},{0.32,0}}" /> 92 <Window Type="MenuWidgets/Combobox" Name="orxonox/Display/Theme/Combobox" > 93 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 94 <Property Name="ClippedByParent" Value="False" /> 95 <Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.5,0},{0.95,0},{1.6,0}}" /> 96 <Property Name="MaxEditTextLength" Value="1073741823" /> 97 <Event Name="ListSelectionAccepted" Function="GraphicsMenu.callback_ThemeCombobox_ListSelectionAccepted" /> 98 </Window> 99 </Window> 100 <Window Type="MenuWidgets/StaticText" Name="orxonox/Display/More" > 101 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 102 <Property Name="UnifiedAreaRect" Value="{{0.5125,0},{0.37,0},{0.975,0},{0.7,0}}" /> 103 <Window Type="MenuWidgets/Checkbox" Name="orxonox/Display/More/VSync" > 104 <Property Name="Text" Value="VSync" /> 105 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 106 <Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.1,0},{0.95,0},{0.45,0}}" /> 107 <Event Name="CheckStateChanged" Function="GraphicsMenu.callback_VSyncCheckbox_CheckStateChanged" /> 108 </Window> 109 <Window Type="MenuWidgets/StaticText" Name="orxonox/Display/More/FSAALabel" > 110 <Property Name="Text" Value="FSAA" /> 111 <Property Name="FrameEnabled" Value="False" /> 112 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 113 <Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.55,0},{0.3,0},{0.9,0}}" /> 114 <Property Name="BackgroundEnabled" Value="False" /> 115 </Window> 116 <Window Type="MenuWidgets/Combobox" Name="orxonox/Display/More/FSAA" > 117 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 118 <Property Name="ClippedByParent" Value="False" /> 119 <Property Name="UnifiedAreaRect" Value="{{0.3,0},{0.55,0},{0.95,0},{2.1,0}}" /> 120 <Property Name="MaxEditTextLength" Value="1073741823" /> 121 <Event Name="ListSelectionAccepted" Function="GraphicsMenu.callback_FSAACombobox_ListSelectionAccepted" /> 122 </Window> 123 </Window> 124 <Window Type="MenuWidgets/StaticText" Name="orxonox/Display/Notice" > 125 <Property Name="Font" Value="BlueHighway-12" /> 126 <Property Name="Text" >Changing the theme, FSAA, 127 or VSync requires a restart</Property> 128 <Property Name="HorzFormatting" Value="HorzCentred" /> 129 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 130 <Property Name="UnifiedAreaRect" Value="{{0.5125,0},{0.75,0},{0.975,0},{0.96,0}}" /> 131 </Window> 132 <Window Type="MenuWidgets/StaticText" Name="orxonox/Display/NoticeRed" > 133 <Property Name="Font" Value="BlueHighway-12" /> 134 <Property Name="Text" >Restart required</Property> 135 <Property Name="TextColours" Value="tl:FFFF0000 tr:FFFF8888 bl:FFFF8888 br:FFFFFFFF" /> 136 <Property Name="HorzFormatting" Value="HorzCentred" /> 137 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 138 <Property Name="UnifiedAreaRect" Value="{{0.5125,0},{0.75,0},{0.975,0},{0.96,0}}" /> 139 </Window> 140 </Window> 141 <Window Type="DefaultWindow" Name="orxonox/Settings" > 142 <Property Name="Text" Value="Settings" /> 143 <Property Name="Visible" Value="False" /> 144 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 145 <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{1,0},{1,0}}" /> 146 <Window Type="MenuWidgets/StaticText" Name="orxonox/Settings/FovLabel" > 147 <Property Name="Text" Value="Vertical field of view (FOV)" /> 148 <Property Name="FrameEnabled" Value="False" /> 149 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 150 <Property Name="UnifiedAreaRect" Value="{{0.035,0},{0.05,0},{0.5,0},{0.12,0}}" /> 151 <Property Name="BackgroundEnabled" Value="False" /> 152 </Window> 153 <Window Type="MenuWidgets/StaticText" Name="orxonox/Settings/FpsLimitLabel" > 154 <Property Name="Text" Value="Maximal frame rate" /> 155 <Property Name="FrameEnabled" Value="False" /> 156 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 157 <Property Name="UnifiedAreaRect" Value="{{0.035,0},{0.18,0},{0.5,0},{0.25,0}}" /> 158 <Property Name="BackgroundEnabled" Value="False" /> 159 </Window> 160 <Window Type="MenuWidgets/StaticText" Name="orxonox/Settings/ParticleLodLabel" > 161 <Property Name="Text" Value="Particle detail level" /> 162 <Property Name="FrameEnabled" Value="False" /> 163 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 164 <Property Name="UnifiedAreaRect" Value="{{0.035,0},{0.31,0},{0.5,0},{0.38,0}}" /> 165 <Property Name="BackgroundEnabled" Value="False" /> 166 </Window> 167 <Window Type="MenuWidgets/Editbox" Name="orxonox/Settings/Fov" > 168 <Property Name="MaxTextLength" Value="1073741823" /> 169 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 170 <Property Name="UnifiedAreaRect" Value="{{0.5,0},{0.03,0},{0.65,0},{0.14,0}}" /> 171 </Window> 172 <Window Type="MenuWidgets/Editbox" Name="orxonox/Settings/FpsLimit" > 173 <Property Name="MaxTextLength" Value="1073741823" /> 174 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 175 <Property Name="UnifiedAreaRect" Value="{{0.5,0},{0.16,0},{0.65,0},{0.27,0}}" /> 176 </Window> 177 <Window Type="MenuWidgets/Combobox" Name="orxonox/Settings/ParticleLodCombobox" > 178 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 179 <Property Name="ClippedByParent" Value="False" /> 180 <Property Name="UnifiedAreaRect" Value="{{0.5,0},{0.29,0},{0.7,0},{0.725,0}}" /> 181 <Property Name="MaxEditTextLength" Value="1073741823" /> 182 </Window> 183 <Window Type="MenuWidgets/Checkbox" Name="orxonox/Settings/MeshLodCheckbox" > 184 <Property Name="Text" Value="Enable mesh LOD" /> 185 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 186 <Property Name="UnifiedAreaRect" Value="{{0.035,0},{0.44,0},{0.5,0},{0.51,0}}" /> 187 </Window> 188 <Window Type="MenuWidgets/Checkbox" Name="orxonox/Settings/MotionBlurCheckbox" > 189 <Property Name="Text" Value="Enable motion blur" /> 190 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 191 <Property Name="UnifiedAreaRect" Value="{{0.035,0},{0.57,0},{0.5,0},{0.64,0}}" /> 192 </Window> 29 193 </Window> 30 194 </Window> 31 <Window Type="MenuWidgets/StaticText" Name="orxonox/Themes" >32 <Property Name="Text" Value="Themes" />33 <Property Name="InheritsAlpha" Value="False" />34 <Property Name="HorzFormatting" Value="HorzCentred" />35 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />36 <Property Name="VertFormatting" Value="TopAligned" />37 <Property Name="UnifiedAreaRect" Value="{{0.525,0},{0.10,0},{0.95,0},{0.35,0}}" />38 <Window Type="MenuWidgets/Listbox" Name="orxonox/ThemeDropBox" >39 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />40 <Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.3,0},{0.95,0},{0.95,0}" />41 <Event Name="ItemSelectionChanged" Function="GraphicsMenu.ThemeDropBox_changed"/>42 </Window>43 </Window>44 <Window Type="MenuWidgets/StaticText" Name="orxonox/Brightness" >45 <Property Name="Text" Value="Brightness" />46 <Property Name="InheritsAlpha" Value="False" />47 <Property Name="HorzFormatting" Value="HorzCentred" />48 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />49 <Property Name="VertFormatting" Value="TopAligned" />50 <Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.70,0},{0.475,0},{0.85,0}}" />51 <Window Type="MenuWidgets/HorizontalScrollbar" Name="orxonox/BrightnessScrollbar" >52 <Property Name="Disabled" Value="true" />53 <Property Name="PageSize" Value="0" />54 <Property Name="StepSize" Value="0.1" />55 <Property Name="OverlapSize" Value="0" />56 <Property Name="DocumentSize" Value="1" />57 <Property Name="ScrollPosition" Value="0" />58 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />59 <Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.6,0},{0.95,0},{0.8,0}}" />60 <Event Name="ThumbTrackStarted" Function="GraphicsMenu.GraphicsBrightnessScrollbar_started" />61 <Event Name="ThumbTrackEnded" Function="GraphicsMenu.GraphicsBrightnessScrollbar_ended" />62 <Event Name="ScrollPosChanged" Function="GraphicsMenu.GraphicsBrightnessScrollbar_changed" />63 </Window>64 </Window>65 <Window Type="MenuWidgets/Checkbox" Name="orxonox/FullscreenCheckbox" >66 <Property Name="Text" Value="Fullscreen" />67 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />68 <Property Name="UnifiedAreaRect" Value="{{0.65,0},{0.35,0},{0.85,0},{0.425,0}}" />69 <Event Name="CheckStateChanged" Function="GraphicsMenu.GraphicsFullscreenCheckbox_clicked"/>70 </Window>71 <Window Type="MenuWidgets/StaticText" Name="orxonox/GraphicsInfo" >72 <Property Name="Text" >73 Changes in graphics74 settings require75 a game restart.</Property>76 <Property Name="TextColours" Value="FFFFFFFF" />77 <Property Name="InheritsAlpha" Value="False" />78 <Property Name="HorzFormatting" Value="HorzCentred" />79 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />80 <Property Name="VertFormatting" Value="TopAligned" />81 <Property Name="UnifiedAreaRect" Value="{{0.525,0},{0.425,0},{0.95,0},{0.85,0}}" />82 </Window>83 195 </Window> 84 <Window Type="MenuWidgets/Button" Name="orxonox/Graphics BackButton" >85 <Property Name="Text" Value=" Back" />196 <Window Type="MenuWidgets/Button" Name="orxonox/GraphicsOkButton" > 197 <Property Name="Text" Value="OK" /> 86 198 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 87 <Property Name="UnifiedAreaRect" Value="{{0.4,0},{0.6625,0},{0.6,0},{0.7125,0}}" /> 88 <Event Name="Clicked" Function="GraphicsMenu.GraphicsBackButton_clicked"/> 199 <Property Name="UnifiedAreaRect" Value="{{0.2875,0},{0.6625,0},{0.4875,0},{0.7125,0}}" /> 200 <Event Name="Clicked" Function="GraphicsMenu.callback_Ok_Clicked" /> 201 </Window> 202 <Window Type="MenuWidgets/Button" Name="orxonox/GraphicsCancelButton" > 203 <Property Name="Text" Value="Cancel" /> 204 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" /> 205 <Property Name="UnifiedAreaRect" Value="{{0.5125,0},{0.6625,0},{0.7125,0},{0.7125,0}}" /> 206 <Event Name="Clicked" Function="GraphicsMenu.callback_Cancel_Clicked" /> 89 207 </Window> 90 208 </Window> -
code/trunk/data/gui/schemes/GUIScheme.xsd
r5781 r8079 1 1 <?xml version="1.0" ?> 2 2 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 3 4 3 <xsd:element name="GUIScheme" type="SchemeType" /> 4 <xsd:complexType name="SchemeType"> 5 5 <xsd:choice minOccurs="0" maxOccurs="unbounded"> 6 6 <xsd:element name="Imageset" type="NamedDataType" /> 7 7 <xsd:element name="ImagesetFromImage" type="NamedDataType" /> 8 8 <xsd:element name="Font" type="NamedDataType" /> 9 9 <xsd:element name="LookNFeel" type="FileDataType" /> 10 11 12 10 <xsd:element name="WindowSet" type="WindowSetType" /> 11 <xsd:element name="WindowRendererSet" type="WindowRendererSetType" /> 12 <xsd:element name="WindowAlias" type="WindowAliasType" /> 13 13 <xsd:element name="FalagardMapping" type="FalagardMapType" /> 14 15 16 17 18 14 </xsd:choice> 15 <xsd:attribute name="Name" type="xsd:string" use="required" /> 16 </xsd:complexType> 17 <xsd:complexType name="WindowSetType"> 18 <xsd:sequence> 19 19 <xsd:element name="WindowFactory" type="WindowFactoryType" minOccurs="0" maxOccurs="unbounded" /> 20 21 22 23 24 20 </xsd:sequence> 21 <xsd:attribute name="Filename" type="xsd:string" use="required" /> 22 </xsd:complexType> 23 <xsd:complexType name="WindowRendererSetType"> 24 <xsd:sequence> 25 25 <xsd:element name="WindowRendererFactory" type="WindowRendererFactoryType" minOccurs="0" maxOccurs="unbounded" /> 26 27 28 26 </xsd:sequence> 27 <xsd:attribute name="Filename" type="xsd:string" use="required" /> 28 </xsd:complexType> 29 29 <xsd:complexType name="FileDataType"> 30 30 <xsd:attribute name="Filename" type="xsd:string" use="required" /> 31 31 <xsd:attribute name="ResourceGroup" type="xsd:string" use="optional" default="" /> 32 32 </xsd:complexType> 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 33 <xsd:complexType name="NamedDataType"> 34 <xsd:attribute name="Name" type="xsd:string" use="required" /> 35 <xsd:attribute name="Filename" type="xsd:string" use="required" /> 36 <xsd:attribute name="ResourceGroup" type="xsd:string" use="optional" default="" /> 37 </xsd:complexType> 38 <xsd:complexType name="WindowFactoryType"> 39 <xsd:attribute name="Name" type="xsd:string" use="required" /> 40 </xsd:complexType> 41 <xsd:complexType name="WindowRendererFactoryType"> 42 <xsd:attribute name="Name" type="xsd:string" use="required" /> 43 </xsd:complexType> 44 <xsd:complexType name="WindowAliasType"> 45 <xsd:attribute name="Alias" type="xsd:string" use="required" /> 46 <xsd:attribute name="Target" type="xsd:string" use="required" /> 47 </xsd:complexType> 48 48 <xsd:complexType name="FalagardMapType"> 49 49 <xsd:attribute name="WindowType" type="xsd:string" use="required" /> 50 50 <xsd:attribute name="TargetType" type="xsd:string" use="required" /> 51 51 <xsd:attribute name="Renderer" type="xsd:string" use="required" /> 52 52 <xsd:attribute name="LookNFeel" type="xsd:string" use="required" /> 53 53 </xsd:complexType> -
code/trunk/data/gui/schemes/OrxonoxLook.scheme
r7887 r8079 1 1 <?xml version="1.0" ?> 2 2 <GUIScheme Name="OrxonoxLook"> 3 4 5 3 <Imageset Name="OrxonoxLook" Filename="OrxonoxLook.imageset" /> 4 <LookNFeel Filename="OrxonoxLook.looknfeel" /> 5 <WindowRendererSet Filename="CEGUIFalagardWRBase" /> 6 6 7 7 <!-- Standard widgets --> … … 45 45 <FalagardMapping WindowType="OrxonoxLook/Tooltip" TargetType="CEGUI/Tooltip" Renderer="Falagard/Tooltip" LookNFeel="OrxonoxLook/Tooltip" /> 46 46 <FalagardMapping WindowType="OrxonoxLook/Tree" TargetType="CEGUI/Tree" Renderer="Falagard/Tree" LookNFeel="OrxonoxLook/Tree" /> 47 47 48 48 <!-- Additional widgets --> 49 49 <FalagardMapping WindowType="OrxonoxLook/AlternateProgressBar" TargetType="CEGUI/ProgressBar" Renderer="Falagard/ProgressBar" LookNFeel="OrxonoxLook/AltProgressBar" /> -
code/trunk/data/gui/schemes/TaharezGreenLook.scheme
r6746 r8079 1 1 <?xml version="1.0" ?> 2 2 <GUIScheme Name="TaharezGreenLook"> 3 4 5 3 <Imageset Name="TaharezGreenLook" Filename="TaharezGreenLook.imageset" /> 4 <LookNFeel Filename="TaharezGreenLook.looknfeel" /> 5 <WindowRendererSet Filename="CEGUIFalagardWRBase" /> 6 6 7 7 <!-- Standard widgets --> … … 45 45 <FalagardMapping WindowType="TaharezGreenLook/Tooltip" TargetType="CEGUI/Tooltip" Renderer="Falagard/Tooltip" LookNFeel="TaharezGreenLook/Tooltip" /> 46 46 <FalagardMapping WindowType="TaharezGreenLook/Tree" TargetType="CEGUI/Tree" Renderer="Falagard/Tree" LookNFeel="TaharezGreenLook/Tree" /> 47 47 48 48 <!-- Additional widgets --> 49 49 <FalagardMapping WindowType="TaharezGreenLook/AlternateProgressBar" TargetType="CEGUI/ProgressBar" Renderer="Falagard/ProgressBar" LookNFeel="TaharezGreenLook/AltProgressBar" /> -
code/trunk/data/gui/schemes/TaharezLook.scheme
r6746 r8079 1 1 <?xml version="1.0" ?> 2 2 <GUIScheme Name="TaharezLook"> 3 4 5 3 <Imageset Name="TaharezLook" Filename="TaharezLook.imageset" /> 4 <LookNFeel Filename="TaharezLook.looknfeel" /> 5 <WindowRendererSet Filename="CEGUIFalagardWRBase" /> 6 6 7 7 <!-- Standard widgets --> … … 45 45 <FalagardMapping WindowType="TaharezLook/Tooltip" TargetType="CEGUI/Tooltip" Renderer="Falagard/Tooltip" LookNFeel="TaharezLook/Tooltip" /> 46 46 <FalagardMapping WindowType="TaharezLook/Tree" TargetType="CEGUI/Tree" Renderer="Falagard/Tree" LookNFeel="TaharezLook/Tree" /> 47 47 48 48 <!-- Additional widgets --> 49 49 <FalagardMapping WindowType="TaharezLook/AlternateProgressBar" TargetType="CEGUI/ProgressBar" Renderer="Falagard/ProgressBar" LookNFeel="TaharezLook/AltProgressBar" /> -
code/trunk/data/gui/scripts/AudioMenu.lua
r7689 r8079 2 2 3 3 local P = createMenuSheet("AudioMenu") 4 5 P.buttonList = {}6 7 function P.onShow()8 P.oldindex = -29 P.index = -110 end11 4 12 5 function P.onLoad() … … 50 43 end 51 44 52 local item ={45 P:setButton(1, 1, { 53 46 ["button"] = winMgr:getWindow("orxonox/AudioBackButton"), 54 ["function"] = P.AudioBackButton_clicked 55 } 56 P.buttonList[1] = item 47 ["callback"] = P.AudioBackButton_clicked 48 }) 57 49 end 58 50 … … 185 177 end 186 178 187 function P.onKeyPressed()188 buttonIteratorHelper(P.buttonList, code, P, 1, 1)189 end190 191 179 return P 192 180 -
code/trunk/data/gui/scripts/ControlsMenu.lua
r7689 r8079 2 2 3 3 local P = createMenuSheet("ControlsMenu") 4 P.buttonList = {}5 4 P.loadAlong = { "MouseControlsMenu", "KeyBindMenu" } 6 5 7 6 function P.onLoad() 8 P.multiplayerMode = "startClient" 7 P.multiplayerMode = "startClient" 9 8 10 9 --buttons are arranged in a 3x1 matrix: 11 local item ={10 P:setButton(1, 1, { 12 11 ["button"] = winMgr:getWindow("orxonox/MouseControlsButton"), 13 ["function"] = P.ControlsMouseControlsButton_clicked 14 } 15 P.buttonList[1] = item 12 ["callback"] = P.ControlsMouseControlsButton_clicked 13 }) 16 14 17 local item ={15 P:setButton(2, 1, { 18 16 ["button"] = winMgr:getWindow("orxonox/KeybindingsButton"), 19 ["function"] = P.ControlsKeyboardControlsButton_clicked 20 } 21 P.buttonList[2] = item 17 ["callback"] = P.ControlsKeyboardControlsButton_clicked 18 }) 22 19 23 local item ={20 P:setButton(3, 1, { 24 21 ["button"] = winMgr:getWindow("orxonox/ControlsBackButton"), 25 ["function"] = P.ControlsBackButton_clicked 26 } 27 P.buttonList[3] = item 28 29 end 30 31 function P.onShow() 32 --indices to iterate through buttonlist 33 P.oldindex = -2 34 P.index = -1 22 ["callback"] = P.ControlsBackButton_clicked 23 }) 35 24 end 36 25 … … 47 36 end 48 37 49 function P.onKeyPressed()50 buttonIteratorHelper(P.buttonList, code, P, 3, 1)51 end52 53 38 return P 54 39 -
code/trunk/data/gui/scripts/CreditsMenu.lua
r7732 r8079 3 3 local P = createMenuSheet("CreditsMenu") 4 4 5 P.buttonList = {}6 5 P.scrollbarWidth = 13 7 6 8 7 function P.onLoad() 9 local item ={8 P:setButton(1, 1, { 10 9 ["button"] = winMgr:getWindow("orxonox/CreditsBackButton"), 11 ["function"] = P.CreditsBackButton_clicked 12 } 13 P.buttonList[1] = item 10 ["callback"] = P.CreditsBackButton_clicked 11 }) 14 12 end 15 13 16 14 function P.onShow() 17 --indices to iterate through buttonlist18 P.oldindex = -219 P.index = -120 21 15 local description = winMgr:getWindow("orxonox/CreditsText") 22 16 description:setProperty("HorzFormatting", "WordWrapLeftAligned") … … 33 27 end 34 28 35 function P.onKeyPressed()36 buttonIteratorHelper(P.buttonList, code, P, 1, 1)37 end38 39 29 return P 40 30 -
code/trunk/data/gui/scripts/DecisionPopup.lua
r7726 r8079 3 3 local P = createMenuSheet("DecisionPopup") 4 4 5 P.buttonList = {}6 7 function P.onShow()8 --indices to iterate through buttonlist9 P.oldindex = -210 P.index = -111 end12 13 5 function P.onLoad() 14 6 15 7 --button are arranged in a 1x2 matrix 16 local item ={8 P:setButton(1, 1, { 17 9 ["button"] = winMgr:getWindow("orxonox/DecisionPopup_button_yes"), 18 ["function"] = P.button_yes 19 } 20 P.buttonList[1] = item 10 ["callback"] = P.button_yes 11 }) 21 12 22 local item ={13 P:setButton(1, 2, { 23 14 ["button"] = winMgr:getWindow("orxonox/DecisionPopup_button_no"), 24 [" function"] = P.button_no25 } 26 P.buttonList[2] = item 15 ["callback"] = P.button_no 16 }) 17 end 27 18 19 function P.onShow() 20 P:setSelection(1, 1) 28 21 end 29 22 … … 51 44 end 52 45 53 function P.onKeyPressed()54 buttonIteratorHelper(P.buttonList, code, P, 1, 2)55 end56 57 46 return P 58 47 -
code/trunk/data/gui/scripts/GUISheet.lua
r7689 r8079 16 16 end 17 17 18 -- Override this function if you need to do work on show 19 function P:onShow() 20 end 21 22 -- Override this function if you need to do work on hide 23 function P:onHide() 24 end 25 26 -- Override this function if you need to do work on quit 27 function P:onQuit() 28 end 29 30 -- Override this function if you want to react on keystrokes 31 function P:onKeyPressed() 32 end 33 34 -- Override this function if you want to update the gui after the window was resized 35 function P:onWindowResized() 36 end 37 18 38 -- show function for the GUI 19 39 function P:show() … … 21 41 self.bVisible = true 22 42 43 -- set the selected button's state 44 self:setSelectedButtonsStateToSelected() 45 23 46 self:onShow() 24 end25 26 -- Override this function if you need to do work on show27 function P:onShow()28 47 end 29 48 … … 36 55 end 37 56 38 -- Override this function if you need to do work on hide 39 function P:onHide() 40 end 41 42 -- Override this function if you need to do work just after the sheet has been hidden 43 function P:afterHide() 57 function P:quit() 58 -- reset the selected button 59 if self.buttons then 60 self:resetSelection() 61 end 62 63 self:onQuit() 44 64 end 45 65 … … 64 84 end 65 85 66 function P:onKeyPressed(e) 86 -- Handles key pressed while the gui sheed is displayed 87 function P:keyPressed() 88 if self.buttons then 89 if code == "208" then -- key down 90 self:moveSelectionRow(1) 91 elseif code == "200" then -- key up 92 self:moveSelectionRow(-1) 93 elseif code == "205" then -- key right 94 self:moveSelectionColumn(1) 95 elseif code == "203" then -- key left 96 self:moveSelectionColumn(-1) 97 elseif code == "28" or code == "156" then -- key enter or key numpad enter 98 self:pressSelectedButton() 99 end 100 end 101 102 self:onKeyPressed() 103 end 104 105 function P:windowResized() 106 self:onWindowResized() 107 end 108 109 110 ------------------------------------------------------------------------------- 111 -- Keyboard control ----------------------------------------------------------- 112 ------------------------------------------------------------------------------- 113 114 -- Initializes the buttons table, used to control the menu with the keyboard 115 function P:initButtons(rows, columns) 116 self.rows = rows 117 self.columns = columns 118 self.buttons = {} 119 self.selectedRow = 0 120 self.selectedColumn = 0 121 self.ratio = 1 122 end 123 124 -- ratio: the button's with divided by the button's height (used to calculate distance between buttons - adjust this until you get the desired behavior) 125 function P:setRatio(ratio) 126 self.ratio = ratio 127 end 128 129 -- Defines the button for a given position in the table. The upper-left button is at position (1, 1) 130 function P:setButton(row, column, button) 131 if not self.buttons then 132 -- init the table 133 self:initButtons(row, column) 134 elseif row > self.rows or column > self.columns then 135 -- rearrange the table 136 local maxRows = math.max(self.rows, row) 137 local maxColumns = math.max(self.columns, column) 138 139 for r = self.rows, 1, -1 do 140 for c = self.columns, 1, -1 do 141 local b = self:getButton(r, c) 142 if b then 143 self.buttons[(r - 1) * self.columns + (c - 1)] = nil 144 self.buttons[(r - 1) * maxColumns + (c - 1)] = b 145 end 146 end 147 end 148 149 self.rows = maxRows 150 self.columns = maxColumns 151 end 152 153 self.buttons[(row - 1) * self.columns + (column - 1)] = button 154 end 155 156 -- Returns the button at a given position in the table. The upper-left button is at position (1, 1) 157 function P:getButton(row, column) 158 if self.buttons then 159 return self.buttons[(row - 1) * self.columns + (column - 1)] 160 else 161 return nil 162 end 163 end 164 165 -- Returns the selected button 166 function P:getSelectedButton() 167 if self:hasSelection() then 168 return self:getButton(self.selectedRow, self.selectedColumn) 169 else 170 return nil 171 end 172 end 173 174 -- Presses the selected button if any 175 function P:pressSelectedButton() 176 if self:getSelectedButton() then 177 self.pressedEnter = true 178 self:getSelectedButton().callback() 179 self.pressedEnter = false 180 end 181 end 182 183 -- Sets the selection to a given row and column. The upper-left button is at position (1, 1) 184 function P:setSelection(row, column) 185 if not self.buttons then 186 return 187 end 188 189 assert(row > 0 and column > 0 and row <= self.rows and column <= self.columns, "(" .. row .. "/" .. column .. ") is not in the valid bounds of the table (1/1)-(" .. self.rows .. "/" .. self.columns .. ")") 190 191 self:setSelectedButtonsStateToNormal() 192 193 self.selectedRow = row 194 self.selectedColumn = column 195 196 self:setSelectedButtonsStateToSelected() 197 end 198 199 -- Sets the selection to the button closest to the given row and column. The upper-left button is at position (1, 1) 200 function P:setSelectionNear(row, column) 201 if not self.buttons then 202 return 203 end 204 205 assert(row > 0 and column > 0 and row <= self.rows and column <= self.columns, "(" .. row .. "/" .. column .. ") is not in the valid bounds of the table (1/1)-(" .. self.rows .. "/" .. self.columns .. ")") 206 207 if self:getButton(row, column) then 208 self:setSelection(row, column) 209 else 210 local min = 1000000 211 local minRow, minColumn 212 213 for r = 1, self.rows do 214 for c = 1, self.columns do 215 if self:getButton(r, c) then 216 local distance = math.sqrt((row - r)^2 + ((column - c) * self.ratio)^2) 217 if distance < min then 218 min = distance; minRow = r; minColumn = c 219 end 220 end 221 end 222 end 223 224 if minRow and minColumn then 225 self:setSelection(minRow, minColumn) 226 else 227 self:resetSelection() 228 end 229 end 230 end 231 232 -- Moves the selection by a given number of rows (a positive value means down, a negative value means up) 233 function P:moveSelectionRow(relRow) 234 self:moveSelection(relRow, "selectedRow", "selectedColumn", "rows", "columns", true) 235 end 236 237 -- Moves the selection by a given number of columns (a positive value means right, a negative value means left) 238 function P:moveSelectionColumn(relColumn) 239 self:moveSelection(relColumn, "selectedColumn", "selectedRow", "columns", "rows", false) 240 end 241 242 -- Generic move function, the values are determined at runtime depending on the arguments 243 function P:moveSelection(relMove, selectedThis, selectedOther, limitThis, limitOther, isRow) 244 if not self.buttons then 245 return 246 end 247 248 -- if there's no selection yet, prepare it such that the selection enters the table from the desired side 249 if self.selectedRow > 0 or self.selectedColumn > 0 then 250 self:setSelectedButtonsStateToNormal() 251 else 252 if relMove > 0 then 253 self[selectedThis] = 0 254 self[selectedOther] = 1 255 elseif relMove < 0 then 256 self[selectedThis] = self[limitThis] + 1 257 self[selectedOther] = 1 258 else 259 return 260 end 261 end 262 263 -- move the selection according to the parameters 264 self[selectedThis] = self[selectedThis] + relMove 265 266 -- wrap around on overflow or underflow 267 while self[selectedThis] > self[limitThis] do self[selectedThis] = self[selectedThis] - self[limitThis] end 268 while self[selectedThis] <= 0 do self[selectedThis] = self[selectedThis] + self[limitThis] end 269 270 -- if the button is deactivated, search the button closest to the desired location 271 if self:getSelectedButton() == nil then 272 local min = 1000000 273 local minV1, minV2 274 local limit, step 275 276 if relMove > 0 then 277 limit = self[limitThis] 278 step = 1 279 else 280 limit = 1 281 step = -1 282 end 283 284 for v1 = self[selectedThis], limit, step do 285 for v2 = 1, self[limitOther] do 286 local button 287 if isRow == true then 288 button = self:getButton(v1, v2) 289 else 290 button = self:getButton(v2, v1) 291 end 292 if button then 293 local distance 294 if isRow == true then 295 distance = math.sqrt((self[selectedThis] - v1)^2 + ((self[selectedOther] - v2) * self.ratio)^2) 296 else 297 distance = math.sqrt(((self[selectedThis] - v1) * self.ratio)^2 + (self[selectedOther] - v2)^2) 298 end 299 if distance < min then 300 min = distance; minV1 = v1; minV2 = v2 301 end 302 end 303 end 304 end 305 306 if minV1 and minV2 then 307 self[selectedThis] = minV1 308 self[selectedOther] = minV2 309 elseif self:hasButtons() then 310 -- no suitable button found - wrap around and search again 311 if relMove > 0 then 312 self[selectedThis] = 0 313 else 314 self[selectedThis] = self[limitThis] + 1 315 end 316 self:moveSelection(relMove, selectedThis, selectedOther, limitThis, limitOther, isRow) 317 end 318 end 319 320 self:setSelectedButtonsStateToSelected() 321 end 322 323 -- Resets the selection 324 function P:resetSelection() 325 self:setSelectedButtonsStateToNormal() 326 327 self.selectedRow = 0 328 self.selectedColumn = 0 329 end 330 331 -- Checks if there's at least one button in the table 332 function P:hasButtons() 333 local count = 0 334 for r = 1, self.rows do 335 for c = 1, self.columns do 336 if self:getButton(r, c) then 337 count = count + 1 338 end 339 end 340 end 341 342 return (count > 0) 343 end 344 345 -- Determines if a button is selected 346 function P:hasSelection() 347 if self.selectedRow and self.selectedRow > 0 and self.selectedColumn and self.selectedColumn > 0 then 348 return true 349 else 350 return false 351 end 352 end 353 354 -- Sets the selected button's state to normal 355 function P:setSelectedButtonsStateToNormal() 356 self:setSelectedButtonsState("Normal") 357 end 358 359 -- Sets the selected button's state to selected 360 function P:setSelectedButtonsStateToSelected() 361 self:setSelectedButtonsState("Selected") 362 end 363 364 -- Sets the selected button's state to pushed 365 function P:setSelectedButtonsStateToPushed() 366 self:setSelectedButtonsState("Pushed") 367 end 368 369 -- Sets the selected button's state 370 function P:setSelectedButtonsState(state) 371 if self:getSelectedButton() then 372 local element = self:getSelectedButton().button 373 local offset = getElementStateOffset(element) 374 375 if offset then 376 element:setProperty("NormalImageRightEdge", string.sub(element:getProperty("NormalImageRightEdge"), 1, offset) .. state) 377 element:setProperty("NormalImageLeftEdge", string.sub(element:getProperty("NormalImageLeftEdge"), 1, offset) .. state) 378 element:setProperty("NormalImageBackground", string.sub(element:getProperty("NormalImageBackground"), 1, offset) .. state) 379 end 380 end 381 end 382 383 -- Gets the offset of the button's current state 384 function getElementStateOffset(element) 385 local property = element:getProperty("NormalImageRightEdge") 386 387 if string.sub(property, string.len(property) - 5, string.len(property)) == "Normal" then 388 return -7 389 elseif string.sub(property, string.len(property) - 7, string.len(property)) == "Selected" then 390 return -9 391 elseif string.sub(property, string.len(property) - 5, string.len(property)) == "Pushed" then 392 return -7 393 else 394 return nil 395 end 67 396 end 68 397 -
code/trunk/data/gui/scripts/GUITools.lua
r7913 r8079 54 54 return height 55 55 end 56 57 --function to iterate through a menu sheet by using arrowkeys58 59 --@arguments:60 -- list: 2-dimensional table, arguments are items that contain a button and its function61 -- !!note: each button can only be in the list once!!62 -- code: code of any key on the keyboard63 -- P: menusheet64 -- n: number of rows of the buttontable65 -- m: number of colums of the buttontable66 67 function buttonIteratorHelper(list, code, P, n, m)68 69 --after a key (down,up,left,right) is pressed the index of the current button has to be updated70 71 --key down72 if code == "208" then73 if P.index < 0 then -- initial status74 P.index = 075 P.oldindex = -176 else77 P.oldindex = P.index78 P.index = (P.index + m) % (m*n) --modulo operation works as a "wrap around" in the button menu79 80 while list[P.index+1] == nil do81 P.oldindex = P.index82 P.index = (P.index + m) % (m*n)83 end84 end85 86 --key up87 elseif code == "200" then88 if P.index < 0 then89 P.index = 090 P.oldindex = -191 elseif(P.index == 0) then92 P.oldindex = P.index93 P.index = m*n-m94 95 while list[P.index+1] == nil do96 P.oldindex = P.index97 P.index = (P.index-m)%(m*n)98 end99 else100 P.oldindex = P.index101 P.index = (P.index -m) % (m*n)102 103 while list[P.index+1] == nil do104 P.oldindex = P.index105 P.index = (P.index-m)%(m*n)106 end107 end108 109 --key right110 elseif code == "205" then111 if P.index < 0 then112 P.index = 0113 P.oldindex = -1114 elseif (P.index+1) % m == 0 then -- we are at the right-end of a row115 P.oldindex = P.index116 P.index = P.index + 1 -m117 118 while list[P.index+1] == nil do119 P.oldindex = P.index120 P.index = P.index + 1121 end122 else123 P.oldindex = P.index124 P.index = P.index + 1125 126 while list[P.index+1] == nil do127 if (P.index+1) % m == 0 then -- we are at the right-end of a row128 P.oldindex = P.index129 P.index = P.index + 1-m130 131 else132 P.oldindex = P.index133 P.index = P.index + 1134 end135 end136 end137 138 --key left139 elseif code == "203" then140 if P.index < 0 then141 P.index = 0142 P.oldindex = -1143 elseif P.index % m == 0 then -- we are at the left-end of a row144 P.oldindex = P.index145 P.index = P.index +m-1146 147 while list[P.index+1] == nil do148 P.oldindex = P.index149 P.index = P.index -1150 end151 else152 P.oldindex = P.index153 P.index = P.index -1154 155 while list[P.index+1] == nil do156 if P.index % m == 0 then -- we are at the left-end of a row157 P.oldindex = P.index158 P.index = P.index -1 + m159 else160 P.oldindex = P.index161 P.index = P.index -1162 end163 end164 end165 end166 167 --to update the new current button168 if (code == "208" or code == "200" or code == "203" or code == "205") and P.oldindex~= P.index then169 170 local system = CEGUI.System:getSingleton()171 local window = winMgr:getWindow("orxonox/MainMenuBackground")172 173 local item = list[P.index+1]174 local child = item["button"]175 local s = child:getProperty("NormalImageRightEdge")176 177 --teste ob der Button nicht schon gehighlightet ist178 if string.sub(s,string.len(s)-8,string.len(s)) == "Highlight" then179 --nop180 else181 child:setProperty("NormalImageRightEdge", string.sub(child:getProperty("NormalImageRightEdge"),1,-7) .. "Highlight")182 child:setProperty("NormalImageLeftEdge", string.sub(child:getProperty("NormalImageLeftEdge"),1,-7) .. "Highlight")183 child:setProperty("NormalImageBackground", string.sub(child:getProperty("NormalImageBackground"),1,-7) .. "Highlight")184 if P.oldindex >= 0 then185 if list[P.oldindex+1] ~= nil then186 local item = list[P.oldindex+1]187 local oldChild = item["button"]188 oldChild:setProperty("NormalImageRightEdge", string.sub(oldChild:getProperty("NormalImageRightEdge"),1,-10) .. "Normal")189 oldChild:setProperty("NormalImageLeftEdge", string.sub(oldChild:getProperty("NormalImageLeftEdge"),1,-10) .. "Normal")190 oldChild:setProperty("NormalImageBackground", string.sub(oldChild:getProperty("NormalImageBackground"),1,-10) .. "Normal")191 end192 end193 end194 195 --for every highlighted button check if index is on its position. If not, set imageproperty on "normal"196 local i = 1197 while i < (n*m) do198 if i == P.index +1 then199 i = i+1200 else201 if list[i] ~= nil then202 local item = list[i]203 local child = item["button"]204 local s = child:getProperty("NormalImageRightEdge")205 if string.sub(s,string.len(s)-8,string.len(s)) == "Highlight" then206 child:setProperty("NormalImageRightEdge", string.sub(child:getProperty("NormalImageRightEdge"),1,-10) .. "Normal")207 child:setProperty("NormalImageLeftEdge", string.sub(child:getProperty("NormalImageLeftEdge"),1,-10) .. "Normal")208 child:setProperty("NormalImageBackground", string.sub(child:getProperty("NormalImageBackground"),1,-10) .. "Normal")209 end210 end211 end212 i=i+1213 end214 end215 216 --enter217 if code == "28" and P.index >= 0 then218 local item = list[P.index+1]219 local child = item["button"]220 child:setProperty("NormalImageRightEdge", string.sub(child:getProperty("NormalImageRightEdge"),1,-10) .. "Normal")221 child:setProperty("NormalImageLeftEdge", string.sub(child:getProperty("NormalImageLeftEdge"),1,-10) .. "Normal")222 child:setProperty("NormalImageBackground", string.sub(child:getProperty("NormalImageBackground"),1,-10) .. "Normal")223 224 local foo = item["function"]225 foo()226 end227 228 end229 230 --write index and oldindex on the console231 --works like buttonIteratorHelper232 function indexTester(list,code,P,n,m)233 --key down234 if code == "208" then235 if P.index < 0 then -- initial status236 P.index = 0237 P.oldindex = -1238 else239 P.oldindex = P.index240 P.index = (P.index + m) % (m*n)241 242 while list[P.index+1] == nil do243 P.oldindex = P.index244 P.index = (P.index + m) % (m*n)245 end246 end247 248 --key up249 elseif code == "200" then250 if P.index < 0 then251 P.index = 0252 P.oldindex = -1253 elseif(P.index == 0) then254 P.oldindex = P.index255 P.index = m*n-m256 257 while list[P.index+1] == nil do258 P.oldindex = P.index259 P.index = (P.index-m)%(m*n)260 end261 else262 P.oldindex = P.index263 P.index = (P.index -m) % (m*n)264 265 while list[P.index+1] == nil do266 P.oldindex = P.index267 P.index = P.index -m268 end269 end270 271 --key right272 elseif code == "205" then273 if P.index < 0 then274 P.index = 0275 P.oldindex = -1276 elseif (P.index+1) % m == 0 then -- we are at the right-end of a row277 P.oldindex = P.index278 P.index = P.index + 1 -m279 280 while list[P.index+1] == nil do281 P.oldindex = P.index282 P.index = P.index + 1283 end284 else285 P.oldindex = P.index286 P.index = P.index + 1287 288 while list[P.index+1] == nil do289 if (P.index+1) % m == 0 then -- we are at the right-end of a row290 P.oldindex = P.index291 P.index = P.index + 1-m292 293 else294 P.oldindex = P.index295 P.index = P.index + 1296 end297 end298 end299 300 --key left301 elseif code == "203" then302 if P.index < 0 then303 P.index = 0304 P.oldindex = -1305 elseif P.index % m == 0 then -- we are at the left-end of a row306 P.oldindex = P.index307 P.index = P.index +m-1308 309 while list[P.index+1] == nil do310 P.oldindex = P.index311 P.index = P.index -1312 end313 else314 P.oldindex = P.index315 P.index = P.index -1316 317 while list[P.index+1] == nil do318 if P.index % m == 0 then -- we are at the left-end of a row319 P.oldindex = P.index320 P.index = P.index -1 + m321 else322 P.oldindex = P.index323 P.index = P.index -1324 end325 end326 end327 end328 329 cout(0, P.oldindex)330 cout(0, P.index)331 332 end333 334 335 336 -
code/trunk/data/gui/scripts/GraphicsMenu.lua
r7801 r8079 3 3 local P = createMenuSheet("GraphicsMenu") 4 4 5 P. buttonList = {}5 P.resolutionList = {"custom", "640 x 480", "720 x 480", "720 x 576", "800 x 600", "1024 x 600", "1024 x 768", "1152 x 864", "1280 x 720", "1280 x 800", "1280 x 960", "1280 x 1024", "1360 x 768", "1440 x 900", "1600 x 900", "1600 x 1200", "1680 x 1050"} 6 6 P.schemeList = {"TaharezGreen", "Orxonox"} 7 8 function P.onShow() 9 --indices to iterate through buttonlist (trivial in this menu sheet) 10 P.oldindex = -2 11 P.index = -1 12 end 13 14 function P.onLoad() 15 block = true 16 file = orxonox.PathConfig:getConfigPathString() .. orxonox.getConfig("GraphicsManager", "ogreConfigFile_") 17 search_mode = 0 18 f = io.open(file, "r") 19 firstline = f:read("*line") 20 rendersystem = string.sub(firstline, 15) 21 for line in f:lines() do 22 if search_mode == 0 then 23 if string.find(line, rendersystem) ~= nil then 24 search_mode = 1 25 end 7 P.fsaaList = {"0", "2", "4", "8", "8 [Quality]"} 8 P.particleLodList = {"None", "Low", "Normal", "High"} 9 10 function P:onLoad() 11 ------------------- 12 -- Button matrix -- 13 ------------------- 14 15 P:setButton(1, 1, { 16 ["button"] = winMgr:getWindow("orxonox/GraphicsOkButton"), 17 ["callback"] = P.callback_Ok_Clicked 18 }) 19 20 P:setButton(1, 2, { 21 ["button"] = winMgr:getWindow("orxonox/GraphicsCancelButton"), 22 ["callback"] = P.callback_Cancel_Clicked 23 }) 24 25 -- place apply button at the bottom in the matrix, even though it's in fact at the top, to make the OK button highlighted by default 26 P:setButton(2, 1, { 27 ["button"] = winMgr:getWindow("orxonox/Display/Resolution/Apply"), 28 ["callback"] = P.callback_Apply_Clicked 29 }) 30 31 ----------------- 32 -- Combo boxes -- 33 ----------------- 34 35 -- resolution combobox 36 local resolutionCombobox = winMgr:getWindow("orxonox/Display/Resolution/Combobox") 37 CEGUI.toCombobox(resolutionCombobox):setReadOnly(true) 38 39 for k,v in pairs(P.resolutionList) do 40 local item = CEGUI.createListboxTextItem(v) 41 item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush") 42 resolutionCombobox:addItem(item) 43 end 44 45 -- themes combobox 46 local themeCombobox = winMgr:getWindow("orxonox/Display/Theme/Combobox") 47 CEGUI.toCombobox(themeCombobox):setReadOnly(true) 48 49 for k,v in pairs(P.schemeList) do 50 local item = CEGUI.createListboxTextItem(v) 51 item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush") 52 themeCombobox:addItem(item) 53 end 54 55 -- fsaa combobox 56 local fsaaCombobox = winMgr:getWindow("orxonox/Display/More/FSAA") 57 CEGUI.toCombobox(fsaaCombobox):setReadOnly(true) 58 59 for k,v in pairs(P.fsaaList) do 60 local item = CEGUI.createListboxTextItem(v) 61 item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush") 62 fsaaCombobox:addItem(item) 63 end 64 65 -- particle lod combobox 66 local particleLodCombobox = winMgr:getWindow("orxonox/Settings/ParticleLodCombobox") 67 CEGUI.toCombobox(particleLodCombobox):setReadOnly(true) 68 69 for k,v in pairs(P.particleLodList) do 70 local item = CEGUI.createListboxTextItem(v) 71 item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush") 72 particleLodCombobox:addItem(item) 73 end 74 end 75 76 function P:onShow() 77 ----------------- 78 -- Display tab -- 79 ----------------- 80 81 -- fullscreen checkbox / resolution combobox / resolution editboxes 82 self:onWindowResized() 83 84 -- apply button 85 self.updateApplyButton() 86 87 -- aspect ratio editbox 88 local aspectRatioEditbox = winMgr:getWindow("orxonox/Display/Resolution/AspectRatio") 89 local currentAspectRatio = orxonox.CommandExecutor:query("getConfig Camera aspectRatio_") 90 aspectRatioEditbox:setText(currentAspectRatio) 91 92 -- themes combobox 93 local themeCombobox = winMgr:getWindow("orxonox/Display/Theme/Combobox") 94 local currentTheme = orxonox.CommandExecutor:query("getConfig GUIManager guiScheme_") 95 96 for i = 0, themeCombobox:getDropList():getItemCount() - 1 do 97 local item = themeCombobox:getListboxItemFromIndex(i) 98 themeCombobox:setItemSelectState(item, (item:getText() == currentTheme)) 99 end 100 101 -- vsync checkbox 102 local vsyncCheckbox = winMgr:getWindow("orxonox/Display/More/VSync") 103 local hasVSync = orxonox.GraphicsManager:getInstance():hasVSyncEnabled() 104 CEGUI.toCheckbox(vsyncCheckbox):setSelected(hasVSync) 105 106 -- fsaa combobox 107 local fsaaCombobox = winMgr:getWindow("orxonox/Display/More/FSAA") 108 local currentFSAAMode = orxonox.GraphicsManager:getInstance():getFSAAMode() 109 110 for i = 0, fsaaCombobox:getDropList():getItemCount() - 1 do 111 local item = fsaaCombobox:getListboxItemFromIndex(i) 112 fsaaCombobox:setItemSelectState(item, (item:getText() == currentFSAAMode)) 113 end 114 115 -- notice 116 self:updateRedLabel() 117 118 ------------------ 119 -- Settings tab -- 120 ------------------ 121 122 -- fov editbox 123 local fovEditbox = winMgr:getWindow("orxonox/Settings/Fov") 124 local currentFov = orxonox.CommandExecutor:query("getConfig Camera fov_") 125 fovEditbox:setText(currentFov) 126 127 -- fps limit editbox 128 local fpsEditbox = winMgr:getWindow("orxonox/Settings/FpsLimit") 129 local currentFpsLimit = orxonox.CommandExecutor:query("getConfig GraphicsSettings fpsLimit") 130 fpsEditbox:setText(currentFpsLimit) 131 132 -- particle lod combobox 133 local particleLodCombobox = winMgr:getWindow("orxonox/Settings/ParticleLodCombobox") 134 local currentParticleLod = orxonox.CommandExecutor:query("getConfig GraphicsSettings particlesDetailLevel") 135 136 if currentParticleLod == "" then 137 particleLodCombobox:disable() 138 else 139 particleLodCombobox:enable() 140 141 for i = 0, particleLodCombobox:getDropList():getItemCount() - 1 do 142 local item = particleLodCombobox:getListboxItemFromIndex(i) 143 particleLodCombobox:setItemSelectState(item, (tostring(i) == currentParticleLod)) 26 144 end 27 if search_mode == 1 then 28 if string.sub(line, 1, 11) == "Full Screen" then 29 if string.sub(line, 13) == "Yes" then 30 fullscreen = true 31 else 32 fullscreen = false 33 end 34 end 35 if string.sub(line, 1, 10) == "Video Mode" then 36 if string.match(line, "@") == "@" then 37 resolution = string.sub(line, 12, string.find(line, "@")-2) 38 else 39 resolution = string.sub(line, 12) 40 end 41 break 42 end 145 end 146 147 -- mesh lod checkbox 148 local meshLodCheckbox = winMgr:getWindow("orxonox/Settings/MeshLodCheckbox") 149 local hasMeshLod = orxonox.CommandExecutor:query("getConfig GraphicsSettings enableMeshLoD") 150 if hasMeshLod == "true" then 151 hasMeshLod = true 152 elseif hasMeshLod == "false" then 153 hasMeshLod = false 154 end 155 CEGUI.toCheckbox(meshLodCheckbox):setSelected(hasMeshLod) 156 157 -- motion blur checkbox 158 local motionBlurCheckbox = winMgr:getWindow("orxonox/Settings/MotionBlurCheckbox") 159 local hasMotionBlur = orxonox.CommandExecutor:query("getConfig GraphicsSettings enableMotionBlur") 160 if hasMotionBlur == "true" then 161 hasMotionBlur = true 162 elseif hasMotionBlur == "false" then 163 hasMotionBlur = false 164 end 165 CEGUI.toCheckbox(motionBlurCheckbox):setSelected(hasMotionBlur) 166 end 167 168 function P:onWindowResized() 169 -- fullscreen checkbox 170 local fullscreenCheckbox = winMgr:getWindow("orxonox/Display/Resolution/Fullscreen") 171 local isFullscreen = orxonox.GraphicsManager:getInstance():isFullScreen() 172 CEGUI.toCheckbox(fullscreenCheckbox):setSelected(isFullscreen) 173 174 -- resolution combobox 175 local resolutionCombobox = winMgr:getWindow("orxonox/Display/Resolution/Combobox") 176 177 local currentWidth = orxonox.GraphicsManager:getInstance():getWindowWidth() 178 local currentHeight = orxonox.GraphicsManager:getInstance():getWindowHeight() 179 180 if P.forceResolutionEditboxes then 181 currentWidth = P.newWidth 182 currentHeight = P.newHeight 183 P.forceResolutionEditboxes = false 184 end 185 186 local currentResolution = currentWidth .. " x " .. currentHeight 187 188 for i = 0, resolutionCombobox:getDropList():getItemCount() - 1 do 189 local item = resolutionCombobox:getListboxItemFromIndex(i) 190 resolutionCombobox:setItemSelectState(item, item:getText() == currentResolution) 191 end 192 193 -- resolution editboxes 194 self.updateResolutionEditboxes() 195 end 196 197 ---------------------- 198 -- Helper functions -- 199 ---------------------- 200 201 -- updates the text of the resolution checkboxes and checks if they should be enabled (only if the "custom" resolution was selected) 202 function P.updateResolutionEditboxes() 203 -- resolution combobox 204 local resolutionCombobox = winMgr:getWindow("orxonox/Display/Resolution/Combobox") 205 206 local currentWidth = orxonox.GraphicsManager:getInstance():getWindowWidth() 207 local currentHeight = orxonox.GraphicsManager:getInstance():getWindowHeight() 208 209 -- resolution editboxes 210 local widthEditbox = winMgr:getWindow("orxonox/Display/Resolution/EditboxWidth") 211 local heightEditbox = winMgr:getWindow("orxonox/Display/Resolution/EditboxHeight") 212 widthEditbox:disable() 213 heightEditbox:disable() 214 215 -- selected combobox item 216 local item = resolutionCombobox:getSelectedItem() 217 if item then 218 local itemText = item:getText() 219 if itemText ~= "custom" then 220 currentWidth = string.sub(itemText, 1, string.find(itemText, "x") - 2) 221 currentHeight = string.sub(itemText, string.find(itemText, "x") + 2) 222 else 223 widthEditbox:enable() 224 heightEditbox:enable() 43 225 end 44 226 end 45 f:close() 46 local fullscreenwindow = tolua.cast(winMgr:getWindow("orxonox/FullscreenCheckbox"),"CEGUI::Checkbox") 47 fullscreenwindow:setSelected(fullscreen) 48 listboxwindow = winMgr:getWindow("orxonox/ResolutionListbox") 49 local resolutionList = {} 50 table.insert(resolutionList, "640 x 480") 51 table.insert(resolutionList, "720 x 480") 52 table.insert(resolutionList, "720 x 576") 53 table.insert(resolutionList, "800 x 480") 54 table.insert(resolutionList, "800 x 600") 55 table.insert(resolutionList, "1024 x 480") 56 table.insert(resolutionList, "1024 x 600") 57 table.insert(resolutionList, "1024 x 768") 58 table.insert(resolutionList, "1152 x 864") 59 table.insert(resolutionList, "1280 x 720") 60 table.insert(resolutionList, "1280 x 768") 61 table.insert(resolutionList, "1440 x 900") 62 for k,v in pairs(resolutionList) do 63 item = CEGUI.createListboxTextItem(v) 64 item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush") 65 CEGUI.toListbox(listboxwindow):addItem(item) 66 end 67 if resolution == "640 x 480" then 68 listboxwindow:setItemSelectState(0,true) 69 elseif resolution == "720 x 480" then 70 listboxwindow:setItemSelectState(1,true) 71 elseif resolution == "720 x 576" then 72 listboxwindow:setItemSelectState(2,true) 73 elseif resolution == "800 x 480" then 74 listboxwindow:setItemSelectState(3,true) 75 elseif resolution == "800 x 600" then 76 listboxwindow:setItemSelectState(4,true) 77 elseif resolution == "1024 x 480" then 78 listboxwindow:setItemSelectState(5,true) 79 elseif resolution == "1024 x 600" then 80 listboxwindow:setItemSelectState(6,true) 81 elseif resolution == "1024 x 768" then 82 listboxwindow:setItemSelectState(7,true) 83 elseif resolution == "1152 x 864" then 84 listboxwindow:setItemSelectState(8,true) 85 elseif resolution == "1280 x 720" then 86 listboxwindow:setItemSelectState(9,true) 87 elseif resolution == "1280 x 768" then 88 listboxwindow:setItemSelectState(10,true) 89 elseif resolution == "1440 x 900" then 90 listboxwindow:setItemSelectState(11,true) 91 end 92 scrollbar_active = false 93 block = false 94 95 local item = { 96 ["button"] = winMgr:getWindow("orxonox/GraphicsBackButton"), 97 ["function"] = P.GraphicsBackButton_clicked 98 } 99 P.buttonList[1] = item 100 101 local dropbox = winMgr:getWindow("orxonox/ThemeDropBox") 102 local scheme = orxonox.CommandExecutor:query("getConfig GUIManager guiScheme_") 103 for k,v in pairs(P.schemeList) do 104 local item = CEGUI.createListboxTextItem(P.schemeList[k]) 105 item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush") 106 CEGUI.toListbox(dropbox):addItem(item) 107 if v == scheme then 108 dropbox:setItemSelectState(item, true) 109 end 110 end 111 112 end 113 114 function P.ThemeDropBox_changed(e) 115 local dropbox = winMgr:getWindow("orxonox/ThemeDropBox") 116 local listbox = CEGUI.toListbox(dropbox) 117 local choice = listbox:getFirstSelectedItem() 118 local index = 0 119 if choice ~= nil then 120 index = listbox:getItemIndex(choice) 121 end 122 orxonox.CommandExecutor:execute("config GUIManager guiScheme_ " .. P.schemeList[index+1]) 123 end 124 125 function P.GraphicsResolutionListbox_changed(e) 126 if listboxwindow:isItemSelected(0) then 127 resolution = "640 x 480" 128 elseif listboxwindow:isItemSelected(1) then 129 resolution = "720 x 480" 130 elseif listboxwindow:isItemSelected(2) then 131 resolution = "720 x 576" 132 elseif listboxwindow:isItemSelected(3) then 133 resolution = "800 x 480" 134 elseif listboxwindow:isItemSelected(4) then 135 resolution = "800 x 600" 136 elseif listboxwindow:isItemSelected(5) then 137 resolution = "1024 x 480" 138 elseif listboxwindow:isItemSelected(6) then 139 resolution = "1024 x 600" 140 elseif listboxwindow:isItemSelected(7) then 141 resolution = "1024 x 768" 142 elseif listboxwindow:isItemSelected(8) then 143 resolution = "1152 x 864" 144 elseif listboxwindow:isItemSelected(9) then 145 resolution = "1280 x 720" 146 elseif listboxwindow:isItemSelected(10) then 147 resolution = "1280 x 768" 148 elseif listboxwindow:isItemSelected(11) then 149 resolution = "1440 x 900" 150 end 151 search_mode = 0 152 f = io.open(file, "r") 153 firstline = f:read("*line") 154 text = firstline .. "\n" 155 rendersystem = string.sub(firstline, 15) 156 for line in f:lines() do 157 if search_mode == 0 then 158 if string.find(line, rendersystem) ~= nil then 159 search_mode = 1 160 end 161 end 162 if search_mode == 1 then 163 if string.sub(line, 1, 10) == "Video Mode" then 164 if string.match(line, "@") == "@" then 165 line = "Video Mode=" .. resolution .. string.sub(line, string.find(line, "@")-1) 166 else 167 line = "Video Mode=" .. resolution 168 end 169 search_mode = 2 170 end 171 end 172 text = text .. line .. "\n" 173 end 174 f:close() 175 f = io.open(file, "w") 176 f:write(text) 177 f:close() 178 end 179 180 function P.GraphicsBrightnessScrollbar_changed(e) 181 if scrollbar_active == false then 182 -- brightness 183 logMessage(0, "event: brightness") 184 end 185 end 186 187 function P.GraphicsBrightnessScrollbar_started(e) 188 scrollbar_active = true 189 end 190 191 function P.GraphicsBrightnessScrollbar_ended(e) 192 -- brightness 193 logMessage(0, "event: brightness") 194 scrollbar_active = false 195 end 196 197 function P.GraphicsFullscreenCheckbox_clicked(e) 198 if block == false then 199 search_mode = 0 200 f = io.open(file, "r") 201 firstline = f:read("*line") 202 text = firstline .. "\n" 203 rendersystem = string.sub(firstline, 15) 204 for line in f:lines() do 205 if search_mode == 0 then 206 if string.find(line, rendersystem) ~= nil then 207 search_mode = 1 208 end 209 end 210 if search_mode == 1 then 211 if string.sub(line, 1, 11) == "Full Screen" then 212 if fullscreen == true then 213 line = "Full Screen=No" 214 fullscreen = false 215 else 216 line = "Full Screen=Yes" 217 fullscreen = true 218 end 219 search_mode = 2 220 end 221 end 222 text = text .. line .. "\n" 223 end 224 f:close() 225 f = io.open(file, "w") 226 f:write(text) 227 f:close() 228 end 229 end 230 231 function P.GraphicsBackButton_clicked(e) 227 228 widthEditbox:setText(currentWidth) 229 heightEditbox:setText(currentHeight) 230 end 231 232 -- checks if the apply button should be enabled or disabled (only enabled if the current settings are different from the selected values) 233 function P.updateApplyButton() 234 -- fullscreen checkbox 235 local fullscreenCheckbox = winMgr:getWindow("orxonox/Display/Resolution/Fullscreen") 236 local isFullscreen = orxonox.GraphicsManager:getInstance():isFullScreen() 237 local fullscreenChanged = (isFullscreen ~= CEGUI.toCheckbox(fullscreenCheckbox):isSelected()) 238 239 -- resolution editboxes 240 local widthEditbox = winMgr:getWindow("orxonox/Display/Resolution/EditboxWidth") 241 local heightEditbox = winMgr:getWindow("orxonox/Display/Resolution/EditboxHeight") 242 local currentWidth = tostring(orxonox.GraphicsManager:getInstance():getWindowWidth()) 243 local currentHeight = tostring(orxonox.GraphicsManager:getInstance():getWindowHeight()) 244 local widthChanged = (currentWidth ~= widthEditbox:getText()) 245 local heightChanged = (currentHeight ~= heightEditbox:getText()) 246 local resolutionEditboxesEnabled = not widthEditbox:isDisabled() 247 248 -- apply button 249 local applyButton = winMgr:getWindow("orxonox/Display/Resolution/Apply") 250 251 if fullscreenChanged or widthChanged or heightChanged or resolutionEditboxesEnabled then 252 applyButton:enable() 253 else 254 applyButton:disable() 255 end 256 end 257 258 function P.updateRedLabel() 259 -- theme 260 local themeCombobox = winMgr:getWindow("orxonox/Display/Theme/Combobox") 261 local currentTheme = orxonox.CommandExecutor:query("getConfig GUIManager guiScheme_") 262 local themeChanged = (currentTheme ~= themeCombobox:getText()) 263 264 -- vsync 265 local vsyncCheckbox = winMgr:getWindow("orxonox/Display/More/VSync") 266 local hasVSync = orxonox.GraphicsManager:getInstance():hasVSyncEnabled() 267 local vsyncChanged = (hasVSync ~= CEGUI.toCheckbox(vsyncCheckbox):isSelected()) 268 269 -- fsaa 270 local fsaaCombobox = winMgr:getWindow("orxonox/Display/More/FSAA") 271 local currentFSAAMode = orxonox.GraphicsManager:getInstance():getFSAAMode() 272 local fsaaChanged = (currentFSAAMode ~= fsaaCombobox:getText()) 273 274 local needRestart = themeChanged or vsyncChanged or fsaaChanged 275 276 local notice = winMgr:getWindow("orxonox/Display/Notice") 277 notice:setVisible(not needRestart) 278 local noticeRed = winMgr:getWindow("orxonox/Display/NoticeRed") 279 noticeRed:setVisible(needRestart) 280 end 281 282 --------------------- 283 -- Event callbacks -- 284 --------------------- 285 286 -- resolution 287 288 function P.callback_FullscreenCheckbox_CheckStateChanged(e) 289 P.updateApplyButton() 290 end 291 292 function P.callback_ResolutionCombobox_ListSelectionAccepted(e) 293 P.updateResolutionEditboxes() 294 end 295 296 function P.callback_ResolutionEditboxWidth_TextChanged(e) 297 P.updateApplyButton() 298 end 299 300 function P.callback_ResolutionEditboxHeight_TextChanged(e) 301 P.updateApplyButton() 302 end 303 304 -- theme 305 306 function P.callback_ThemeCombobox_ListSelectionAccepted(e) 307 P.updateRedLabel() 308 end 309 310 -- vsync 311 312 function P.callback_VSyncCheckbox_CheckStateChanged(e) 313 P.updateRedLabel() 314 end 315 316 -- fsaa 317 318 function P.callback_FSAACombobox_ListSelectionAccepted(e) 319 P.updateRedLabel() 320 end 321 322 -- buttons 323 324 function P.callback_Apply_Clicked(e) 325 -- resolution 326 local fullscreenCheckbox = winMgr:getWindow("orxonox/Display/Resolution/Fullscreen") 327 local checkedFullscreen = tostring(CEGUI.toCheckbox(fullscreenCheckbox):isSelected()) 328 329 local widthEditbox = winMgr:getWindow("orxonox/Display/Resolution/EditboxWidth") 330 local heightEditbox = winMgr:getWindow("orxonox/Display/Resolution/EditboxHeight") 331 332 P.newWidth = widthEditbox:getText() 333 P.newHeight = heightEditbox:getText() 334 P.forceResolutionEditboxes = true 335 336 -- start revert timer 337 P.oldWidth = orxonox.GraphicsManager:getInstance():getWindowWidth() 338 P.oldHeight = orxonox.GraphicsManager:getInstance():getWindowHeight() 339 P.oldFullscreen = orxonox.GraphicsManager:getInstance():isFullScreen() 340 341 P.revertTimerHandle = orxonox.CommandExecutor:query("delayreal 10 {hideGUI DecisionPopup; GraphicsManager setScreenResolution " .. P.oldWidth .. " " .. P.oldHeight .. " " .. tostring(P.oldFullscreen) .. "; config Core lastLevelTimestamp_ [expr [getConfig Core ogreConfigTimestamp_] + 1]}") 342 343 -- change settings 344 orxonox.CommandExecutor:execute("GraphicsManager setScreenResolution " .. P.newWidth .. " " .. P.newHeight .. " " .. checkedFullscreen) 345 346 P.updateApplyButton() 347 348 -- prompt for confirmation 349 openDecisionPopup("Do you want to keep these settings? (Settings will be reverted in 10 seconds if not accepted)", GraphicsMenu.callback_ApplyDecisionPopup) 350 if checkedFullscreen then 351 showCursor() 352 end 353 end 354 355 function P.callback_ApplyDecisionPopup(pressedOK) 356 orxonox.CommandExecutor:execute("killdelay " .. P.revertTimerHandle) 357 358 if not pressedOK then 359 orxonox.CommandExecutor:execute("GraphicsManager setScreenResolution " .. P.oldWidth .. " " .. P.oldHeight .. " " .. tostring(P.oldFullscreen)) 360 P:onShow() 361 end 362 363 -- update timestamp to avoid showing the ogre config dialog again after the user accepted or reverted the resolution 364 orxonox.CommandExecutor:execute("config Core lastLevelTimestamp_ [expr [getConfig Core ogreConfigTimestamp_] + 1]") 365 end 366 367 function P.callback_Ok_Clicked(e) 368 -- aspect ratio 369 local aspectRatioEditbox = winMgr:getWindow("orxonox/Display/Resolution/AspectRatio") 370 orxonox.CommandExecutor:execute("config Camera aspectRatio_ " .. aspectRatioEditbox:getText()) 371 372 -- theme 373 local themeCombobox = winMgr:getWindow("orxonox/Display/Theme/Combobox") 374 orxonox.CommandExecutor:execute("config GUIManager guiScheme_ " .. themeCombobox:getText()) 375 376 -- vsync 377 local vsyncCheckbox = winMgr:getWindow("orxonox/Display/More/VSync") 378 local hasVSync = orxonox.GraphicsManager:getInstance():hasVSyncEnabled() 379 if hasVSync ~= CEGUI.toCheckbox(vsyncCheckbox):isSelected() then 380 orxonox.CommandExecutor:execute("GraphicsManager setVSync " .. tostring(CEGUI.toCheckbox(vsyncCheckbox):isSelected())) 381 end 382 383 -- fsaa 384 local fsaaCombobox = winMgr:getWindow("orxonox/Display/More/FSAA") 385 local currentFSAAMode = orxonox.GraphicsManager:getInstance():getFSAAMode() 386 if currentFSAAMode ~= fsaaCombobox:getText() then 387 orxonox.CommandExecutor:execute("GraphicsManager setFSAA {" .. fsaaCombobox:getText() .. "}") -- enclose argument in { ... } because it can contain [brackets] (conflicts with tcl) 388 end 389 390 -- fov 391 local fovEditbox = winMgr:getWindow("orxonox/Settings/Fov") 392 orxonox.CommandExecutor:execute("config Camera fov_ " .. fovEditbox:getText()) 393 394 -- fps limit 395 local fpsEditbox = winMgr:getWindow("orxonox/Settings/FpsLimit") 396 orxonox.CommandExecutor:execute("config GraphicsSettings fpsLimit " .. fpsEditbox:getText()) 397 398 -- particle lod 399 local particleLodCombobox = winMgr:getWindow("orxonox/Settings/ParticleLodCombobox") 400 local item = particleLodCombobox:getSelectedItem() 401 if item then 402 orxonox.CommandExecutor:execute("config GraphicsSettings particlesDetailLevel " .. particleLodCombobox:getItemIndex(item)) 403 end 404 405 -- mesh lod 406 local meshLodCheckbox = winMgr:getWindow("orxonox/Settings/MeshLodCheckbox") 407 orxonox.CommandExecutor:execute("config GraphicsSettings enableMeshLoD " .. tostring(CEGUI.toCheckbox(meshLodCheckbox):isSelected())) 408 409 -- motion blur 410 local motionBlurCheckbox = winMgr:getWindow("orxonox/Settings/MotionBlurCheckbox") 411 orxonox.CommandExecutor:execute("config GraphicsSettings enableMotionBlur " .. tostring(CEGUI.toCheckbox(motionBlurCheckbox):isSelected())) 412 232 413 hideMenuSheet(P.name) 233 414 end 234 415 235 function P. onKeyPressed()236 buttonIteratorHelper(P.buttonList, code, P, 1, 1)416 function P.callback_Cancel_Clicked(e) 417 hideMenuSheet(P.name) 237 418 end 238 419 -
code/trunk/data/gui/scripts/HostMenu.lua
r7887 r8079 5 5 P.multiplayerMode = "startServer" 6 6 7 P.buttonList = {}8 7 P.levelList = {} 9 8 P.itemList = {} … … 11 10 12 11 function P.onLoad() 13 P.multiplayerMode = "startServer" 12 P.multiplayerMode = "startServer" 14 13 local window = winMgr:getWindow("orxonox/MultiplayerShowAllCheckbox") 15 14 local button = tolua.cast(window,"CEGUI::Checkbox") … … 17 16 P.createLevelList() 18 17 19 local item ={18 P:setButton(1, 1, { 20 19 ["button"] = winMgr:getWindow("orxonox/HostMenuStartButton"), 21 ["function"] = P.HostMenuStartButton_clicked 22 } 23 P.buttonList[1] = item 20 ["callback"] = P.HostMenuStartButton_clicked 21 }) 24 22 25 local item ={23 P:setButton(1, 2, { 26 24 ["button"] = winMgr:getWindow("orxonox/HostMenuBackButton"), 27 ["function"] = P.HostMenuBackButton_clicked 28 } 29 P.buttonList[2] = item 25 ["callback"] = P.HostMenuBackButton_clicked 26 }) 30 27 end 31 28 32 29 function P.onShow() 30 if P.showAll ~= orxonox.GUIManager:inDevMode() then 31 local window = winMgr:getWindow("orxonox/MultiplayerShowAllCheckbox") 32 local button = tolua.cast(window,"CEGUI::Checkbox") 33 P.showAll = not P.showAll 34 button:setSelected(P.showAll) 35 end 36 33 37 if P.multiplayerMode == "startServer" then 34 38 local window = winMgr:getWindow("orxonox/HostMenuHostButton") … … 44 48 P.createLevelList() 45 49 end 46 47 P.oldindex = -248 P.index = -149 50 50 end 51 51 … … 97 97 end 98 98 99 function P.HostMenuStartButton_clicked(e) 99 function P.HostMenuStartButton_clicked(e) 100 100 local listbox = CEGUI.toListbox(winMgr:getWindow("orxonox/HostMenuListbox")) 101 101 local choice = listbox:getFirstSelectedItem() … … 119 119 end 120 120 121 function P.onKeyPressed()122 buttonIteratorHelper(P.buttonList, code, P, 1, 2)123 end124 125 121 return P -
code/trunk/data/gui/scripts/InGameMenu.lua
r7877 r8079 4 4 P.loadAlong = { "DecisionPopup" } 5 5 6 P.buttonList = {}7 8 6 function P.onLoad() 9 P.multiplayerMode = "startClient" 7 P.multiplayerMode = "startClient" 10 8 11 9 --button are arranged in a 4x1 matrix, the left lower item is nil 12 local item ={10 P:setButton(1, 1, { 13 11 ["button"] = winMgr:getWindow("orxonox/InGameMenu_ReturnButton"), 14 ["function"] = P.button_settings_clicked 15 } 16 P.buttonList[1] = item 12 ["callback"] = P.button_return_clicked 13 }) 17 14 18 local item ={15 P:setButton(2, 1, { 19 16 ["button"] = winMgr:getWindow("orxonox/InGameMenu_MainMenuButton"), 20 ["function"] = P.button_mainmenu_clicked 21 } 22 P.buttonList[2] = item 17 ["callback"] = P.button_mainmenu_clicked 18 }) 23 19 24 local item ={20 P:setButton(3, 1, { 25 21 ["button"] = winMgr:getWindow("orxonox/InGameMenu_SettingsButton"), 26 ["function"] = P.button_settings_clicked 27 } 28 P.buttonList[3] = item 22 ["callback"] = P.button_settings_clicked 23 }) 29 24 30 local item ={25 P:setButton(4, 1, { 31 26 ["button"] = winMgr:getWindow("orxonox/InGameMenu_QuitButton"), 32 ["function"] = P.button_quit_clicked 33 } 34 P.buttonList[4] = item 35 27 ["callback"] = P.button_quit_clicked 28 }) 36 29 end 37 30 38 31 function P.onShow() 39 --indices to iterate through buttonlist 40 P.oldindex = -2 41 P.index = -1 32 if P:hasSelection() == false then 33 P:setSelection(1, 1) 34 end 35 36 orxonox.execute("setPause 1") 37 end 38 39 function P.onQuit() 40 orxonox.execute("setPause 0") 42 41 end 43 42 … … 64 63 hideMenuSheet("InGameMenu") 65 64 orxonox.execute("exit") 66 else 65 else 67 66 P.onShow() 68 67 end 69 68 end 70 69 71 function P.onKeyPressed()72 buttonIteratorHelper(P.buttonList, code, P, 4, 1)73 end74 75 70 return P 76 71 -
code/trunk/data/gui/scripts/KeyBindMenu.lua
r7403 r8079 26 26 table.insert(commandList, "NewHumanController changeMode") 27 27 table.insert(commandList, "switchCamera") 28 table.insert(commandList, " openConsole")28 table.insert(commandList, "InGameConsole openConsole") 29 29 table.insert(commandList, "OverlayGroup toggleVisibility Debug") 30 30 table.insert(commandList, "OverlayGroup toggleVisibility Stats") … … 35 35 table.insert(commandList, "mouseLook") 36 36 table.insert(commandList, "pause") 37 table.insert(commandList, "printScreen") 38 if orxonox.GUIManager:inDevMode() then 39 table.insert(commandList, "printScreenHD 3") 40 end 37 41 38 42 nameList = {} … … 65 69 table.insert(nameList, "Look Around") 66 70 table.insert(nameList, "Pause") 71 table.insert(nameList, "Screenshot") 72 if orxonox.GUIManager:inDevMode() then 73 table.insert(nameList, "HD screenshot") 74 end 67 75 68 76 linesList = {} … … 100 108 local funct = luaState:createLuaFunctor("KeyBindMenu.callback()") 101 109 orxonox.KeyBinderManager:getInstance():registerKeybindCallback(funct) 110 111 P:setButton(1, 1, { 112 ["button"] = winMgr:getWindow("orxonox/KeyBindBackButton"), 113 ["callback"] = P.KeyBindBackButton_clicked 114 }) 102 115 end 103 116 -
code/trunk/data/gui/scripts/MainMenu.lua
r7689 r8079 4 4 P.loadAlong = { "SingleplayerMenu", "MultiplayerMenu", "SettingsMenu", "CreditsMenu" } 5 5 6 P.buttonList = {}7 8 6 function P.onLoad() 9 7 --buttons are arranged in a 6x1 Matrix (list) 10 local item ={8 P:setButton(1, 1, { 11 9 ["button"] = winMgr:getWindow("orxonox/QuickGameTestButton"), 12 ["function"] = P.QuickGameTestButton_clicked 13 } 14 table.insert(P.buttonList,item) 10 ["callback"] = P.QuickGameTestButton_clicked 11 }) 15 12 16 item ={13 P:setButton(2, 1, { 17 14 ["button"] = winMgr:getWindow("orxonox/SingleplayerButton"), 18 ["function"] = P.SingleplayerButton_clicked 19 } 20 table.insert(P.buttonList,item) 15 ["callback"] = P.SingleplayerButton_clicked 16 }) 21 17 22 item ={18 P:setButton(3, 1, { 23 19 ["button"] = winMgr:getWindow("orxonox/MultiplayerButton"), 24 ["function"] = P.MultiplayerButton_clicked 25 } 26 table.insert(P.buttonList,item) 20 ["callback"] = P.MultiplayerButton_clicked 21 }) 27 22 28 item ={23 P:setButton(4, 1, { 29 24 ["button"] = winMgr:getWindow("orxonox/SettingsButton"), 30 ["function"] = P.SettingsButton_clicked 31 } 32 table.insert(P.buttonList,item) 25 ["callback"] = P.SettingsButton_clicked 26 }) 33 27 34 item ={28 P:setButton(5, 1, { 35 29 ["button"] = winMgr:getWindow("orxonox/CreditsButton"), 36 ["function"] = P.CreditsButton_clicked 37 } 38 table.insert(P.buttonList,item) 30 ["callback"] = P.CreditsButton_clicked 31 }) 39 32 40 item ={33 P:setButton(6, 1, { 41 34 ["button"] = winMgr:getWindow("orxonox/ExitButton"), 42 ["function"] = P.ExitButton_clicked 43 } 44 table.insert(P.buttonList,item) 45 end 46 47 function P.onShow() 48 --indices to iterate through buttonlist 49 P.oldindex = -2 50 P.index = -1 35 ["callback"] = P.ExitButton_clicked 36 }) 51 37 end 52 38 … … 77 63 end 78 64 79 function P.onKeyPressed()80 buttonIteratorHelper(P.buttonList, code, P, 6, 1)81 end82 83 65 return P 84 66 -
code/trunk/data/gui/scripts/MiscConfigMenu.lua
r7403 r8079 35 35 table.insert(P.commandList, "HumanPlayer nick_") 36 36 table.insert(P.commandList, "ChatOverlay displayTime_") 37 table.insert(P.commandList, "Core bDevMode_") 37 38 38 39 P.nameList = {} … … 54 55 table.insert(P.nameList, "Playername") 55 56 table.insert(P.nameList, "Chat: display time") 57 table.insert(P.nameList, "Developer's Mode") 56 58 57 59 P.linesList = {} … … 85 87 P.createLines() 86 88 89 P:setButton(1, 1, { 90 ["button"] = winMgr:getWindow("orxonox/MiscConfigMenu/MiscConfigBackButton"), 91 ["callback"] = P.MiscConfigBackButton_clicked 92 }) 87 93 end 88 94 -
code/trunk/data/gui/scripts/MouseControlsMenu.lua
r6746 r8079 32 32 invert_active = false 33 33 end 34 35 P:setButton(1, 1, { 36 ["button"] = winMgr:getWindow("orxonox/MouseControlsBackButton"), 37 ["callback"] = P.MouseControlsBackButton_clicked 38 }) 34 39 end 35 40 -
code/trunk/data/gui/scripts/MultiplayerMenu.lua
r7876 r8079 2 2 3 3 local P = createMenuSheet("MultiplayerMenu") 4 5 P.buttonList = {}6 4 7 5 --joinMode is 1 for choice "LAN" and 2 for "Internet" … … 10 8 11 9 function P.onLoad() 12 P.multiplayerMode = "startClient" 10 P.multiplayerMode = "startClient" 13 11 14 --button are arranged in a 2x2 matrix, the left lower item is nil15 local item ={12 --button are arranged in a 3x2 matrix, Join and Host buttons are in the upper left and middle, the back button in the lower right of the table 13 P:setButton(1, 1, { 16 14 ["button"] = winMgr:getWindow("orxonox/MultiplayerJoinButton"), 17 ["function"] = P.MultiplayerJoinButton_clicked 18 } 19 P.buttonList[1] = item 15 ["callback"] = P.MultiplayerJoinButton_clicked 16 }) 20 17 21 local item ={18 P:setButton(1, 2, { 22 19 ["button"] = winMgr:getWindow("orxonox/MultiplayerHostButton"), 23 ["function"] = P.MultiplayerHostButton_clicked 24 } 25 P.buttonList[2] = item 20 ["callback"] = P.MultiplayerHostButton_clicked 21 }) 26 22 27 local item ={23 P:setButton(2, 3, { 28 24 ["button"] = winMgr:getWindow("orxonox/MultiplayerBackButton"), 29 ["function"] = P.MultiplayerBackButton_clicked 30 } 31 P.buttonList[4] = item 25 ["callback"] = P.MultiplayerBackButton_clicked 26 }) 32 27 end 33 28 … … 35 30 --P.showServerList() 36 31 37 --indices to iterate through buttonlist38 P.oldindex = -239 P.index = -140 41 32 if P.joinMode == 1 then 42 33 local window = winMgr:getWindow("orxonox/MultiplayerLanButton") … … 56 47 P.joinMode = 1 57 48 if button:isSelected() == true then 58 49 P.showServerList() 59 50 end 60 51 end … … 65 56 P.joinMode = 2 66 57 if button:isSelected() == true then 67 68 58 P.showServerList() 59 end 69 60 end 70 61 … … 92 83 93 84 function P.showServerList() 94 -- LAN Discovery 95 if P.joinMode == 1 then 96 local listbox = winMgr:getWindow("orxonox/MultiplayerListbox") 97 CEGUI.toListbox(listbox):resetList() 98 local discovery = orxonox.LANDiscovery:getInstance() 99 discovery:discover() 100 P.serverList = {} 101 local index = 0 102 local servername = "" 103 local serverip = "" 104 while true do 105 servername = discovery:getServerListItemName(index) 106 if servername == "" then 107 break 108 end 109 serverip = discovery:getServerListItemIP(index) 110 if serverip == "" then 111 break 112 end 113 table.insert(P.serverList, {servername, serverip}) 114 index = index + 1 115 end 116 index = 1 117 for k,v in pairs(P.serverList) do 118 local item = CEGUI.createListboxTextItem( v[1] .. ": " .. v[2] ) 119 item:setID(index) 120 index = index + 1 121 item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush") 122 CEGUI.toListbox(listbox):addItem(item) 123 end 124 -- WAN Discovery 125 elseif P.joinMode == 2 then 126 local listbox = winMgr:getWindow("orxonox/MultiplayerListbox") 127 CEGUI.toListbox(listbox):resetList() 128 local discovery = orxonox.WANDiscovery:getInstance() 129 cout(0, "discovering.\n" ) 130 discovery:discover() 131 cout(0, "discovered.\n" ) 132 P.serverList = {} 133 local index = 0 134 local servername = "" 135 local serverip = "" 136 while true do 137 servername = discovery:getServerListItemName(index) 138 if servername == "" then 139 break 140 end 141 serverip = discovery:getServerListItemIP(index) 142 if serverip == "" then 143 break 144 end 145 table.insert(P.serverList, {servername, serverip}) 146 index = index + 1 147 end 148 index = 1 149 for k,v in pairs(P.serverList) do 150 local item = CEGUI.createListboxTextItem( v[1] .. ": " .. v[2] ) 151 item:setID(index) 152 index = index + 1 153 item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush") 154 CEGUI.toListbox(listbox):addItem(item) 155 end 156 end 157 158 end 85 -- LAN Discovery 86 if P.joinMode == 1 then 87 local listbox = winMgr:getWindow("orxonox/MultiplayerListbox") 88 CEGUI.toListbox(listbox):resetList() 89 local discovery = orxonox.LANDiscovery:getInstance() 90 discovery:discover() 91 P.serverList = {} 92 local index = 0 93 local servername = "" 94 local serverip = "" 95 while true do 96 servername = discovery:getServerListItemName(index) 97 if servername == "" then 98 break 99 end 100 serverip = discovery:getServerListItemIP(index) 101 if serverip == "" then 102 break 103 end 104 table.insert(P.serverList, {servername, serverip}) 105 index = index + 1 106 end 107 index = 1 108 for k,v in pairs(P.serverList) do 109 local item = CEGUI.createListboxTextItem( v[1] .. ": " .. v[2] ) 110 item:setID(index) 111 index = index + 1 112 item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush") 113 CEGUI.toListbox(listbox):addItem(item) 114 end 115 -- WAN Discovery 116 elseif P.joinMode == 2 then 117 local listbox = winMgr:getWindow("orxonox/MultiplayerListbox") 118 CEGUI.toListbox(listbox):resetList() 119 local discovery = orxonox.WANDiscovery:getInstance() 120 cout(0, "discovering.\n" ) 121 discovery:discover() 122 cout(0, "discovered.\n" ) 123 P.serverList = {} 124 local index = 0 125 local servername = "" 126 local serverip = "" 127 while true do 128 servername = discovery:getServerListItemName(index) 129 if servername == "" then 130 break 131 end 132 serverip = discovery:getServerListItemIP(index) 133 if serverip == "" then 134 break 135 end 136 table.insert(P.serverList, {servername, serverip}) 137 index = index + 1 138 end 139 index = 1 140 for k,v in pairs(P.serverList) do 141 local item = CEGUI.createListboxTextItem( v[1] .. ": " .. v[2] ) 142 item:setID(index) 143 index = index + 1 144 item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush") 145 CEGUI.toListbox(listbox):addItem(item) 146 end 147 end 159 148 160 function P.onKeyPressed()161 buttonIteratorHelper(P.buttonList, code, P, 2, 2)162 149 end 163 150 -
code/trunk/data/gui/scripts/NotificationLayer.lua
r7887 r8079 46 46 end 47 47 48 -- Pushes an input notification to the input queue. 48 -- Pushes an input notification to the input queue. 49 49 function P.pushNotification(queueName, notification) 50 50 local queue = P.queueList[queueName] … … 333 333 334 334 -- Is called after the sheet has been hidden. 335 function P. afterHide()335 function P.onQuit() 336 336 -- If we leave the edit mode we show the sheet again. 337 337 if P.editMode then -
code/trunk/data/gui/scripts/SettingsMenu.lua
r7689 r8079 4 4 P.loadAlong = { "ControlsMenu", "AudioMenu", "GraphicsMenu" } 5 5 6 P.buttonList = {}7 8 6 function P.onLoad() 9 7 --"Gameplay" and "Multiplayer Options" are not integrated in the list 10 --buttons are arranged in a 4x2 matrix. The lower-right element is not in the matrix!11 local item ={8 --buttons are arranged in a 4x2 matrix. 9 P:setButton(1, 2, { 12 10 ["button"] = winMgr:getWindow("orxonox/SettingsMenu/GraphicsButton"), 13 ["function"] = P.SettingsGraphicsButton_clicked 14 } 15 P.buttonList[2] = item 11 ["callback"] = P.SettingsGraphicsButton_clicked 12 }) 16 13 17 local item ={14 P:setButton(2, 2, { 18 15 ["button"] = winMgr:getWindow("orxonox/SettingsMenu/AudioButton"), 19 ["function"] = P.SettingsAudioButton_clicked 20 } 21 P.buttonList[4] = item 16 ["callback"] = P.SettingsAudioButton_clicked 17 }) 22 18 19 P:setButton(3, 1, { 20 ["button"] = winMgr:getWindow("orxonox/SettingsMenu/ControlsButton"), 21 ["callback"] = P.SettingsControlsButton_clicked 22 }) 23 23 24 local item = { 25 ["button"] = winMgr:getWindow("orxonox/SettingsMenu/ControlsButton"), 26 ["function"] = P.SettingsControlsButton_clicked 27 } 28 P.buttonList[5] = item 24 P:setButton(3, 2, { 25 ["button"] = winMgr:getWindow("orxonox/SettingsMenu/MiscellaneousButton"), 26 ["callback"] = P.SettingsMiscellaneousButton_clicked 27 }) 29 28 30 local item = { 31 ["button"] = winMgr:getWindow("orxonox/SettingsMenu/MiscellaneousButton"), 32 ["function"] = P.SettingsMiscellaneousButton_clicked 33 } 34 P.buttonList[6] = item 29 P:setButton(4, 1, { 30 ["button"] = winMgr:getWindow("orxonox/SettingsMenu/SettingsBackButton"), 31 ["callback"] = P.SettingsBackButton_clicked 32 }) 35 33 36 local item = { 37 ["button"] = winMgr:getWindow("orxonox/SettingsMenu/SettingsBackButton"), 38 ["function"] = P.SettingsBackButton_clicked 39 } 40 P.buttonList[7] = item 41 42 end 43 44 function P.onShow() 45 --indices to iterate through buttonlist 46 P.oldindex = 3 47 P.index = 2 34 P:setButton(4, 2, P:getButton(4, 1)) 48 35 end 49 36 … … 76 63 end 77 64 78 function P.onKeyPressed()79 buttonIteratorHelper(P.buttonList, code, P, 4, 2)80 end81 82 65 return P 83 66 -
code/trunk/data/gui/scripts/SheetManager.lua
r7689 r8079 8 8 local mainMenuLoaded = false 9 9 orxonox.GUIManager:subscribeEventHelper(menuSheetsRoot, "KeyDown", "keyPressed") 10 11 ----------------------- 12 --- Local functions --- 13 ----------------------- 14 15 local function hideCursor() 16 if cursor:isVisible() then 17 cursor:hide() 18 end 19 end 20 21 local function showCursor() 22 if not cursor:isVisible() and inputMgr:isMouseExclusive() then 23 cursor:show() 24 end 25 end 26 10 orxonox.GUIManager:subscribeEventHelper(menuSheetsRoot, "Sized", "windowResized") 27 11 28 12 ------------------------ 29 13 --- Global functions --- 30 14 ------------------------ 15 16 function hideCursor() 17 if cursor:isVisible() then 18 cursor:hide() 19 end 20 end 21 22 function showCursor() 23 if not cursor:isVisible() and inputMgr:isMouseExclusive() then 24 cursor:show() 25 end 26 end 31 27 32 28 -- Loads the GUI with the specified name … … 93 89 ["sheet"] = menuSheet, 94 90 ["bHidePrevious"] = bHidePrevious, 95 ["bNoInput"] = bNoInput 91 ["bNoInput"] = bNoInput, 92 ["name"] = name 96 93 } 97 94 table.insert(activeMenuSheets, sheetTuple) -- indexed array access … … 121 118 122 119 -- Hide all previous sheets if necessary 120 local previous 123 121 if bHidePrevious then 124 122 for i = 1, activeMenuSheets.size - 1 do 125 activeMenuSheets[i].sheet:hide() 126 end 127 end 128 123 previous = activeMenuSheets[i].sheet 124 previous:hide() 125 end 126 end 127 129 128 menuSheet:show() 130 129 menuSheetsRoot:activate() 130 131 -- select first button if the menu was opened with the keyboard 132 if previous and previous.pressedEnter and menuSheet:hasSelection() == false then 133 menuSheet:setSelectionNear(1, 1) 134 end 131 135 132 136 return menuSheet … … 179 183 inputMgr:leaveState(sheetTuple.sheet.inputState) 180 184 end 181 185 182 186 -- CURSOR SHOWING 183 187 local i = activeMenuSheets.size … … 200 204 end 201 205 202 sheetTuple.sheet: afterHide()206 sheetTuple.sheet:quit() 203 207 end 204 208 … … 242 246 keyESC() 243 247 elseif code == "0"then 244 orxonox.CommandExecutor:execute("openConsole") 245 end 246 end 247 sheet.sheet:onKeyPressed() 248 orxonox.CommandExecutor:execute("InGameConsole openConsole") 249 end 250 end 251 sheet.sheet:keyPressed() 252 end 253 254 function windowResized(e) 255 for name, sheet in pairs(loadedSheets) do 256 if orxonox.GraphicsManager:getInstance():isFullScreen() or sheet.tShowCursor == TriBool.False then 257 inputMgr:setMouseExclusive(sheet.inputState, TriBool.True) 258 else 259 inputMgr:setMouseExclusive(sheet.inputState, TriBool.False) 260 end 261 end 262 local sheetTuple = activeMenuSheets[activeMenuSheets.size] 263 if sheetTuple then 264 if orxonox.GraphicsManager:getInstance():isFullScreen() and sheetTuple.sheet.tShowCursor ~= TriBool.False then 265 showCursor() 266 else 267 hideCursor() 268 end 269 sheetTuple.sheet:windowResized() 270 end 248 271 end 249 272 … … 276 299 end 277 300 301 function getGUIFirstActive(name, bHidePrevious, bNoInput) 302 local sheet = activeMenuSheets.topSheetTuple 303 -- If the topmost gui sheet has the input name 304 if sheet ~= nil and sheet.name == name then 305 guiMgr:toggleGUIHelper(name, bHidePrevious, bNoInput, false); 306 else 307 guiMgr:toggleGUIHelper(name, bHidePrevious, bNoInput, true); 308 end 309 end 310 278 311 ---------------------- 279 312 --- Initialisation --- -
code/trunk/data/gui/scripts/SingleplayerMenu.lua
r7876 r8079 3 3 local P = createMenuSheet("SingleplayerMenu") 4 4 5 P.buttonList = {}6 5 P.levelList = {} 7 6 P.itemList = {} … … 15 14 16 15 --buttons are arranged in a 1x2 matrix 17 local item ={16 P:setButton(1, 1, { 18 17 ["button"] = winMgr:getWindow("orxonox/SingleplayerStartButton"), 19 ["function"] = P.SingleplayerStartButton_clicked 20 } 21 P.buttonList[1] = item 18 ["callback"] = P.SingleplayerStartButton_clicked 19 }) 22 20 23 local item ={21 P:setButton(1, 2, { 24 22 ["button"] = winMgr:getWindow("orxonox/SingleplayerBackButton"), 25 ["function"] = P.SingleplayerBackButton_clicked 26 } 27 P.buttonList[2] = item 23 ["callback"] = P.SingleplayerBackButton_clicked 24 }) 25 end 26 27 function P.onShow() 28 if P.showAll ~= orxonox.GUIManager:inDevMode() then 29 local window = winMgr:getWindow("orxonox/SingleplayerShowAllCheckbox") 30 local button = tolua.cast(window,"CEGUI::Checkbox") 31 P.showAll = not P.showAll 32 button:setSelected(P.showAll) 33 P.createLevelList() 34 end 28 35 end 29 36 … … 47 54 index = index + 1 48 55 end 49 --TODO: Reintroduce sorting, if needed. At the moment it's sorted by filename.50 --table.sort(levelList)51 56 for k,v in pairs(P.levelList) do 52 57 local item = CEGUI.createListboxTextItem(v:getName()) … … 59 64 orxonox.GUIManager:setTooltipTextHelper(P.itemList[k], v:getDescription()) 60 65 end 61 end62 63 function P.onShow()64 --indices to iterate through buttonlist65 P.oldindex = -266 P.index = -167 66 end 68 67 … … 93 92 end 94 93 95 function P.onKeyPressed()96 buttonIteratorHelper(P.buttonList, code, P, 1, 2)97 end98 99 94 return P 100 95 -
code/trunk/data/levels/FPSTest.oxw
r7679 r8079 57 57 <MovableEntity position="<?lua print(math.random() * 5000-2000) ?>,<?lua print(math.random() * 5000-2000) ?>,<?lua print(math.random() * 5000 - 2000) ?>" collisionType=dynamic linearDamping=0.8 angularDamping=0 mass=<?lua print(j * 100) ?> scale=<?lua print(j * 5) ?> rotationaxis="<?lua print(math.random()) ?>, <?lua print(math.random()) ?>, <?lua print(math.random()) ?>" rotationrate="<?lua print(math.random() * 30 + 5) ?>" > 58 58 <attached> 59 <Model position="0,0,0" scale= <?lua print(j * 10) ?>mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" />59 <Model position="0,0,0" scale="<?lua print(j * 10) ?>" mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" /> 60 60 </attached> 61 61 <collisionShapes> -
code/trunk/data/levels/asteroids.oxw
r8009 r8079 35 35 linearDamping = 0.8 36 36 angularDamping = 0 37 scale = <?lua print(j * 150)?>37 scale = "<?lua print(j * 150)?>" 38 38 collisiondamage = 1 39 39 enablecollisiondamage = true 40 40 > 41 41 <attached> 42 <Model mass= <?lua print(j * 1000) ?>mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" />42 <Model mass="<?lua print(j * 1000) ?>" mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" /> 43 43 </attached> 44 44 <collisionShapes> -
code/trunk/data/levels/dynamicMatch.oxw
r7679 r8079 80 80 ?> 81 81 82 <StaticEntity position="<?lua print(x + math.random() * 1000-500) ?>,<?lua print(y + math.random() * 1000-500) ?>,<?lua print(z + math.random() * 5000-2500) ?>" scale= <?lua print(j * 5) ?>>82 <StaticEntity position="<?lua print(x + math.random() * 1000-500) ?>,<?lua print(y + math.random() * 1000-500) ?>,<?lua print(z + math.random() * 5000-2500) ?>" scale="<?lua print(j * 5) ?>" > 83 83 <attached> 84 <Model position="0,0,0" scale= <?lua print(j * 10) ?>mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh">84 <Model position="0,0,0" scale="<?lua print(j * 10) ?>" mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh"> 85 85 <attached><!-- ---------asteroid fog----- --> 86 86 <ParticleEmitter position="0,0,0" source="Orxonox/Steam" /> -
code/trunk/data/levels/fightInOurBack.oxw
r7845 r8079 172 172 <events> 173 173 <trigger> 174 <SpaceShip position="<?lua print(3800-i*x) ?>,0,3000" lookat="<?lua print(4800-i*x) ?>,0,4000" health= <?lua print(health) ?> maxhealth=<?lua print(health) ?> initialhealth=<?lua print(health) ?>>174 <SpaceShip position="<?lua print(3800-i*x) ?>,0,3000" lookat="<?lua print(4800-i*x) ?>,0,4000" health="<?lua print(health) ?>" maxhealth="<?lua print(health) ?>" initialhealth="<?lua print(health) ?>" > 175 175 <templates> 176 176 <Template link=spaceshipTransporter /> … … 199 199 <events> 200 200 <trigger> 201 <SpaceShip position="<?lua print(2600+x) ?>,0,<?lua print(3150-z) ?>" lookat="<?lua print(3500+x) ?>,0,<?lua print(4150-z) ?>" health= <?lua print(health) ?> maxhealth=<?lua print(health) ?> initialhealth=<?lua print(health) ?>>201 <SpaceShip position="<?lua print(2600+x) ?>,0,<?lua print(3150-z) ?>" lookat="<?lua print(3500+x) ?>,0,<?lua print(4150-z) ?>" health="<?lua print(health) ?>" maxhealth="<?lua print(health) ?>" initialhealth="<?lua print(health) ?>" > 202 202 <templates> 203 203 <Template link=spaceshipTransporter /> … … 284 284 <MovableEntity collisionType=kinematic linearDamping=0.8 angularDamping=0 mass="<?lua print(scale * 5) ?>" position="<?lua print(x) ?>,<?lua print(y) ?>,<?lua print(z) ?>" rotationaxis="<?lua print(math.random()) ?>,<?lua print(math.random()) ?>,<?lua print(math.random()) ?>" rotationrate="<?lua print(math.random()*15) ?>"> 285 285 <attached> 286 <Model scale= <?lua print(scale) ?>mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" shadow=false/>286 <Model scale="<?lua print(scale) ?>" mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" shadow=false/> 287 287 </attached> 288 288 <collisionShapes> … … 303 303 <MovableEntity collisionType=kinematic linearDamping=0.8 angularDamping=0 mass="<?lua print(scale * 5) ?>" position="<?lua print(x) ?>,<?lua print(y) ?>,<?lua print(z) ?>" rotationaxis="<?lua print(math.random()) ?>,<?lua print(math.random()) ?>,<?lua print(math.random()) ?>" rotationrate="<?lua print(math.random()*15) ?>" > 304 304 <attached> 305 <Model scale= <?lua print(math.random(20,70)) ?>mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" shadow=false/>305 <Model scale="<?lua print(math.random(20,70)) ?>" mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" shadow=false/> 306 306 </attached> 307 307 <collisionShapes> -
code/trunk/data/levels/lastManStanding.oxw
r7785 r8079 76 76 <SpawnPoint team=0 position="<?lua print(y*1.4+z*0.2) ?>,0,<?lua print(z*1.4-y*0.2) ?>" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff /> 77 77 78 <StaticEntity position="<?lua print(y) ?>,0,<?lua print(z) ?>" scale= <?lua print(j * 2) ?>collisionType=static >78 <StaticEntity position="<?lua print(y) ?>,0,<?lua print(z) ?>" scale="<?lua print(j * 2) ?>" collisionType=static > 79 79 <attached> 80 80 <Model position="0,0,0" scale=15 mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh"> … … 86 86 </StaticEntity> 87 87 88 <StaticEntity position="<?lua print(y) ?>,100,<?lua print(z) ?>" scale= <?lua print(j * 2) ?>collisionType=static >88 <StaticEntity position="<?lua print(y) ?>,100,<?lua print(z) ?>" scale="<?lua print(j * 2) ?>" collisionType=static > 89 89 <attached> 90 90 <Model position="0,0,0" scale=15 mesh="ast<?lua print( math.mod(i+3,6) + 1) ?>.mesh"> … … 96 96 </StaticEntity> 97 97 98 <StaticEntity position="<?lua print(y) ?>,200,<?lua print(z) ?>" scale= <?lua print(j * 2) ?>collisionType=static >98 <StaticEntity position="<?lua print(y) ?>,200,<?lua print(z) ?>" scale="<?lua print(j * 2) ?>" collisionType=static > 99 99 <attached> 100 100 <Model position="0,0,0" scale=15 mesh="ast<?lua print( math.mod(i*5,6) + 1) ?>.mesh"> … … 106 106 </StaticEntity> 107 107 108 <StaticEntity position="<?lua print(y) ?>,-100,<?lua print(z) ?>" scale= <?lua print(j * 2) ?>collisionType=static >108 <StaticEntity position="<?lua print(y) ?>,-100,<?lua print(z) ?>" scale="<?lua print(j * 2) ?>" collisionType=static > 109 109 <attached> 110 110 <Model position="0,0,0" scale=15 mesh="ast<?lua print( math.mod(i*13+1,6) + 1) ?>.mesh"> … … 116 116 </StaticEntity> 117 117 118 <StaticEntity position="<?lua print(y) ?>,-200,<?lua print(z) ?>" scale= <?lua print(j * 2) ?>collisionType=static >118 <StaticEntity position="<?lua print(y) ?>,-200,<?lua print(z) ?>" scale="<?lua print(j * 2) ?>" collisionType=static > 119 119 <attached> 120 120 <Model position="0,0,0" scale=15 mesh="ast<?lua print( math.mod(i*17,6) + 1) ?>.mesh"> … … 127 127 128 128 <!-- ---------Top Asteroid----------- --> 129 <StaticEntity position="<?lua print(y) ?>,300,<?lua print(z) ?>" scale= <?lua print(j * 2.1) ?>pitch="90" roll="180" yaw="<?lua print(-90+i*360/max) ?>" collisionType=static >129 <StaticEntity position="<?lua print(y) ?>,300,<?lua print(z) ?>" scale="<?lua print(j * 2.1) ?>" pitch="90" roll="180" yaw="<?lua print(-90+i*360/max) ?>" collisionType=static > 130 130 <attached> 131 131 <Model position="0,0,0" scale=25 mesh="ast6.mesh"> -
code/trunk/data/levels/presentation09.oxw
r7679 r8079 1 1 <LevelInfo 2 name = "Presentation X "3 description = " 1stPresentation level for Orxonox Convention X"2 name = "Presentation X 3rd" 3 description = "3rd Presentation level for Orxonox Convention X" 4 4 tags = "presentation" 5 5 /> … … 47 47 ?> 48 48 49 <MovableEntity position="<?lua print(x + math.random() * 10000-2500) ?>,<?lua print(y + math.random() * 5000-2500) ?>,<?lua print(z + math.random() * 1000-500) ?>" <?lua if i == 5 then ?> collisionType=dynamic linearDamping=0.8 angularDamping=0 mass= <?lua print(j * 50) ?> <?lua end ?> scale=<?lua print(j * 5) ?>rotationaxis="<?lua print(math.random()) ?>, <?lua print(math.random()) ?>, <?lua print(math.random()) ?>" rotationrate="<?lua print(math.random() * 30 + 5) ?>">49 <MovableEntity position="<?lua print(x + math.random() * 10000-2500) ?>,<?lua print(y + math.random() * 5000-2500) ?>,<?lua print(z + math.random() * 1000-500) ?>" <?lua if i == 5 then ?> collisionType=dynamic linearDamping=0.8 angularDamping=0 mass="<?lua print(j * 50) ?>" <?lua end ?> scale="<?lua print(j * 5) ?>" rotationaxis="<?lua print(math.random()) ?>, <?lua print(math.random()) ?>, <?lua print(math.random()) ?>" rotationrate="<?lua print(math.random() * 30 + 5) ?>"> 50 50 <attached> 51 <Model position="0,0,0" scale= <?lua print(j * 10) ?>mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" />51 <Model position="0,0,0" scale="<?lua print(j * 10) ?>" mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" /> 52 52 </attached> 53 53 <?lua if i == 5 then ?><collisionShapes> -
code/trunk/data/levels/presentation09b.oxw
r7679 r8079 281 281 material="Examples/Flare" 282 282 colour="1.0, 0.5, 0.3" 283 phase= <?lua print(-360/8*i)?>283 phase="<?lua print(-360/8*i)?>" 284 284 amplitude=0.1 285 285 frequency=0.5 … … 291 291 material="Examples/Flare" 292 292 colour="1.0, 0.5, 0.3" 293 phase= <?lua print(-360/8*i)?>293 phase="<?lua print(-360/8*i)?>" 294 294 amplitude=0.1 295 295 frequency=0.5 … … 357 357 <MovableEntity position="<?lua print(x) ?>,<?lua print(y) ?>,<?lua print(z) ?>" linearDamping=0.8 angularDamping=0.8 rotationaxis="<?lua print(math.random()) ?>, <?lua print(math.random()) ?>, <?lua print(math.random()) ?>" rotationrate="<?lua print(math.random() * 30 - 15) ?>"> 358 358 <attached> 359 <Model position="0,0,0" scale= <?lua print(s) ?>mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" />359 <Model position="0,0,0" scale="<?lua print(s) ?>" mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" /> 360 360 </attached> 361 361 </MovableEntity> -
code/trunk/data/levels/presentationDM.oxw
r7679 r8079 46 46 j = math.random() 47 47 ?> 48 <MovableEntity position="<?lua print(math.random() * 5000-2000) ?>,<?lua print(math.random() * 5000-2000) ?>,<?lua print(math.random() * 5000 - 2000) ?>" collisionType=dynamic linearDamping=0.8 angularDamping=0 mass= <?lua print(j * 50) ?> scale=<?lua print(j * 5) ?>rotationaxis="<?lua print(math.random()) ?>, <?lua print(math.random()) ?>, <?lua print(math.random()) ?>" rotationrate="<?lua print(math.random() * 30 + 5) ?>">48 <MovableEntity position="<?lua print(math.random() * 5000-2000) ?>,<?lua print(math.random() * 5000-2000) ?>,<?lua print(math.random() * 5000 - 2000) ?>" collisionType=dynamic linearDamping=0.8 angularDamping=0 mass="<?lua print(j * 50) ?>" scale="<?lua print(j * 5) ?>" rotationaxis="<?lua print(math.random()) ?>, <?lua print(math.random()) ?>, <?lua print(math.random()) ?>" rotationrate="<?lua print(math.random() * 30 + 5) ?>"> 49 49 <attached> 50 <Model position="0,0,0" scale= <?lua print(j * 10) ?>mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" />50 <Model position="0,0,0" scale="<?lua print(j * 10) ?>" mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" /> 51 51 </attached> 52 52 <collisionShapes> -
code/trunk/data/levels/presentationFS102.oxw
r7679 r8079 1 1 <LevelInfo 2 name = "Presentation XI FPS "2 name = "Presentation XI FPS 1st" 3 3 description = "2nd Presentation level for Orxonox Convention XI, FPS" 4 4 tags = "presentation" -
code/trunk/data/levels/presentationFS10Ed.oxw
r7679 r8079 1 1 <LevelInfo 2 name = "Presentation XI FPS "2 name = "Presentation XI FPS 2nd" 3 3 description = "3rd Presentation level for Orxonox Convention XI, FPS" 4 4 tags = "presentation" -
code/trunk/data/levels/presentationHS09.oxw
r7679 r8079 1 1 <LevelInfo 2 name = "Presentation X "2 name = "Presentation X 1st" 3 3 description = "1st Presentation level for Orxonox Convention X" 4 4 tags = "presentation" … … 193 193 </templates> 194 194 <controller> 195 <WaypointPatrolController name=attacker alertnessradius= <?lua print(math.random() * 2000) ?>team=0 active=false>195 <WaypointPatrolController name=attacker alertnessradius="<?lua print(math.random() * 2000) ?>" team=0 active=false> 196 196 <waypoints> 197 197 <StaticEntity position="<?lua print(2800 + math.random() * 500 - 250) ?>,<?lua print(2500 + math.random() * 500 - 250) ?>,<?lua print(1500 + math.random() * 500 - 250) ?>" /> … … 284 284 material="Examples/Flare" 285 285 colour="1.0, 0.5, 0.3" 286 phase= <?lua print(-360/8*i)?>286 phase="<?lua print(-360/8*i)?>" 287 287 amplitude=0.1 288 288 frequency=0.5 … … 294 294 material="Examples/Flare" 295 295 colour="1.0, 0.5, 0.3" 296 phase= <?lua print(-360/8*i)?>296 phase="<?lua print(-360/8*i)?>" 297 297 amplitude=0.1 298 298 frequency=0.5 … … 368 368 <MovableEntity mass=90000 position="<?lua print(x) ?>,<?lua print(y) ?>,<?lua print(z) ?>" linearDamping=0.8 angularDamping=0.8 rotationaxis="<?lua print(math.random()) ?>, <?lua print(math.random()) ?>, <?lua print(math.random()) ?>" rotationrate="<?lua print(math.random() * 100 - 15) ?>"> 369 369 <attached> 370 <Model position="0,0,0" scale= <?lua print(s) ?>mesh="<?lua print(elements[e])?>" />370 <Model position="0,0,0" scale="<?lua print(s) ?>" mesh="<?lua print(elements[e])?>" /> 371 371 </attached> 372 372 </MovableEntity> -
code/trunk/data/levels/presentationHS09b.oxw
r7854 r8079 1 1 <LevelInfo 2 name = "Presentation X "2 name = "Presentation X 2nd" 3 3 description = "2nd Presentation level for Orxonox Convention X" 4 4 tags = "presentation" … … 46 46 s = math.random() * 100 47 47 ?> 48 <MovableEntity collisiontype=dynamic mass= <?lua print(s*10)?>position="<?lua print(x) ?>,<?lua print(y) ?>,<?lua print(z) ?>" linearDamping=0.01 angularDamping=0 rotationaxis="<?lua print(math.random()) ?>, <?lua print(math.random()) ?>, <?lua print(math.random()) ?>" rotationrate="<?lua print(math.random() * 100 - 15) ?>">48 <MovableEntity collisiontype=dynamic mass="<?lua print(s*10)?>" position="<?lua print(x) ?>,<?lua print(y) ?>,<?lua print(z) ?>" linearDamping=0.01 angularDamping=0 rotationaxis="<?lua print(math.random()) ?>, <?lua print(math.random()) ?>, <?lua print(math.random()) ?>" rotationrate="<?lua print(math.random() * 100 - 15) ?>"> 49 49 <attached> 50 <Model position="0,0,0" scale= <?lua print(s) ?>mesh="asteroid_UV.mesh" />50 <Model position="0,0,0" scale="<?lua print(s) ?>" mesh="asteroid_UV.mesh" /> 51 51 </attached> 52 52 <collisionShapes> … … 145 145 material="Examples/Flare" 146 146 colour="1.0, 0.5, 0.3" 147 phase= <?lua print(-360/8*i)?>147 phase="<?lua print(-360/8*i)?>" 148 148 amplitude=0.1 149 149 frequency=0.5 … … 155 155 material="Examples/Flare" 156 156 colour="1.0, 0.5, 0.3" 157 phase= <?lua print(-360/8*i)?>157 phase="<?lua print(-360/8*i)?>" 158 158 amplitude=0.1 159 159 frequency=0.5 … … 203 203 s = math.random() * 100 204 204 ?> 205 <MovableEntity collisiontype=dynamic mass= <?lua print(s*10)?>position="<?lua print(x) ?>,<?lua print(y) ?>,<?lua print(z) ?>" linearDamping=0.01 angularDamping=0 rotationaxis="<?lua print(math.random()) ?>, <?lua print(math.random()) ?>, <?lua print(math.random()) ?>" rotationrate="<?lua print(math.random() * 100 - 15) ?>">205 <MovableEntity collisiontype=dynamic mass="<?lua print(s*10)?>" position="<?lua print(x) ?>,<?lua print(y) ?>,<?lua print(z) ?>" linearDamping=0.01 angularDamping=0 rotationaxis="<?lua print(math.random()) ?>, <?lua print(math.random()) ?>, <?lua print(math.random()) ?>" rotationrate="<?lua print(math.random() * 100 - 15) ?>"> 206 206 <attached> 207 <Model position="0,0,0" scale= <?lua print(s) ?>mesh="asteroid_ice.mesh" />207 <Model position="0,0,0" scale="<?lua print(s) ?>" mesh="asteroid_ice.mesh" /> 208 208 </attached> 209 209 <collisionShapes> -
code/trunk/data/levels/teamBaseMatch.oxw
r7679 r8079 56 56 for i = 1, 10, 1 do 57 57 ?> 58 <ParticleSpawner position="<?lua print(math.random() * 400 - 200) ?>,<?lua print(math.random() * 200 - 100) ?>,<?lua print(math.random() * 200 - 100) ?>" startdelay= <?lua print(math.random()) ?>source="Orxonox/BigExplosion1part1" lifetime=2.0 loop=0 autostart=0>58 <ParticleSpawner position="<?lua print(math.random() * 400 - 200) ?>,<?lua print(math.random() * 200 - 100) ?>,<?lua print(math.random() * 200 - 100) ?>" startdelay="<?lua print(math.random()) ?>" source="Orxonox/BigExplosion1part1" lifetime=2.0 loop=0 autostart=0> 59 59 <events> 60 60 <spawn> … … 97 97 for i = 1, 10, 1 do 98 98 ?> 99 <ParticleSpawner position="<?lua print(math.random() * 400 - 200) ?>,<?lua print(math.random() * 200 - 100) ?>,<?lua print(math.random() * 200 - 100) ?>" startdelay= <?lua print(math.random()) ?>source="Orxonox/BigExplosion1part1" lifetime=2.0 loop=0 autostart=0>99 <ParticleSpawner position="<?lua print(math.random() * 400 - 200) ?>,<?lua print(math.random() * 200 - 100) ?>,<?lua print(math.random() * 200 - 100) ?>" startdelay="<?lua print(math.random()) ?>" source="Orxonox/BigExplosion1part1" lifetime=2.0 loop=0 autostart=0> 100 100 <events> 101 101 <spawn> … … 138 138 for i = 1, 10, 1 do 139 139 ?> 140 <ParticleSpawner position="<?lua print(math.random() * 400 - 200) ?>,<?lua print(math.random() * 200 - 100) ?>,<?lua print(math.random() * 200 - 100) ?>" startdelay= <?lua print(math.random()) ?>source="Orxonox/BigExplosion1part1" lifetime=2.0 loop=0 autostart=0>140 <ParticleSpawner position="<?lua print(math.random() * 400 - 200) ?>,<?lua print(math.random() * 200 - 100) ?>,<?lua print(math.random() * 200 - 100) ?>" startdelay="<?lua print(math.random()) ?>" source="Orxonox/BigExplosion1part1" lifetime=2.0 loop=0 autostart=0> 141 141 <events> 142 142 <spawn> … … 178 178 for i = 1, 10, 1 do 179 179 ?> 180 <ParticleSpawner position="<?lua print(math.random() * 400 - 200) ?>,<?lua print(math.random() * 200 - 100) ?>,<?lua print(math.random() * 200 - 100) ?>" startdelay= <?lua print(math.random()) ?>source="Orxonox/BigExplosion1part1" lifetime=2.0 loop=0 autostart=0>180 <ParticleSpawner position="<?lua print(math.random() * 400 - 200) ?>,<?lua print(math.random() * 200 - 100) ?>,<?lua print(math.random() * 200 - 100) ?>" startdelay="<?lua print(math.random()) ?>" source="Orxonox/BigExplosion1part1" lifetime=2.0 loop=0 autostart=0> 181 181 <events> 182 182 <spawn> … … 219 219 for i = 1, 10, 1 do 220 220 ?> 221 <ParticleSpawner position="<?lua print(math.random() * 400 - 200) ?>,<?lua print(math.random() * 200 - 100) ?>,<?lua print(math.random() * 200 - 100) ?>" startdelay= <?lua print(math.random()) ?>source="Orxonox/BigExplosion1part1" lifetime=2.0 loop=0 autostart=0>221 <ParticleSpawner position="<?lua print(math.random() * 400 - 200) ?>,<?lua print(math.random() * 200 - 100) ?>,<?lua print(math.random() * 200 - 100) ?>" startdelay="<?lua print(math.random()) ?>" source="Orxonox/BigExplosion1part1" lifetime=2.0 loop=0 autostart=0> 222 222 <events> 223 223 <spawn> -
code/trunk/data/levels/testSwallow.oxw
r7679 r8079 46 46 ?> 47 47 48 <MovableEntity position="<?lua print(x + math.random() * 10000-2500) ?>,<?lua print(y + math.random() * 5000-2500) ?>,<?lua print(z + math.random() * 1000-500) ?>" <?lua if i == 5 then ?> collisionType=dynamic linearDamping=0.8 angularDamping=0 mass= <?lua print(j * 50) ?> <?lua end ?> scale=<?lua print(j * 5) ?>rotationaxis="<?lua print(math.random()) ?>, <?lua print(math.random()) ?>, <?lua print(math.random()) ?>" rotationrate="<?lua print(math.random() * 30 + 5) ?>">48 <MovableEntity position="<?lua print(x + math.random() * 10000-2500) ?>,<?lua print(y + math.random() * 5000-2500) ?>,<?lua print(z + math.random() * 1000-500) ?>" <?lua if i == 5 then ?> collisionType=dynamic linearDamping=0.8 angularDamping=0 mass="<?lua print(j * 50) ?>" <?lua end ?> scale="<?lua print(j * 5) ?>" rotationaxis="<?lua print(math.random()) ?>, <?lua print(math.random()) ?>, <?lua print(math.random()) ?>" rotationrate="<?lua print(math.random() * 30 + 5) ?>"> 49 49 <attached> 50 <Model position="0,0,0" scale= <?lua print(j * 10) ?>mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" />50 <Model position="0,0,0" scale="<?lua print(j * 10) ?>" mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" /> 51 51 </attached> 52 52 <?lua if i == 5 then ?><collisionShapes> -
code/trunk/data/levels/underAttack.oxw
r7679 r8079 36 36 </attached> 37 37 <collisionShapes> 38 <SphereCollisionShape radius= <?lua print(x) ?>position="0,0,0" />38 <SphereCollisionShape radius="<?lua print(x) ?>" position="0,0,0" /> 39 39 </collisionShapes> 40 40 </MovableEntity> … … 99 99 material="Examples/Flare" 100 100 colour="1.0, 0.5, 0.3" 101 phase= <?lua print(-360/8*i)?>101 phase="<?lua print(-360/8*i)?>" 102 102 amplitude=0.1 103 103 frequency=0.5 … … 109 109 material="Examples/Flare" 110 110 colour="1.0, 0.5, 0.3" 111 phase= <?lua print(-360/8*i)?>111 phase="<?lua print(-360/8*i)?>" 112 112 amplitude=0.1 113 113 frequency=0.5 -
code/trunk/data/overlays/debug.oxo
r6417 r8079 66 66 /> 67 67 68 <PauseNotice 69 name = "pausenotice" 70 position = "0.5, 0.1" 71 font = "VeraMono" 72 textsize = 0.03 73 colour = "1.0, 1.0, 1.0, 1.0" 74 align = "center" 75 /> 76 68 77 <AnnounceMessage 69 78 name = "announcemessage" -
code/trunk/src/CMakeLists.txt
r7955 r8079 119 119 ADD_SUBDIRECTORY(libraries) 120 120 ADD_SUBDIRECTORY(orxonox) 121 SET(ORXONOX_MODULES CACHE INTERNAL "") 121 122 ADD_SUBDIRECTORY(modules) 122 123 -
code/trunk/src/external/enet/win32.c
r7954 r8079 11 11 #define ENET_BUILDING_LIB 1 12 12 #include "enet/enet.h" 13 #include <ws2tcpip.h> 13 14 14 15 static enet_uint32 timeBase = 0; -
code/trunk/src/libraries/core/CMakeLists.txt
r7284 r8079 35 35 OrxonoxClass.cc 36 36 Resource.cc 37 WindowEventListener.cc38 37 39 38 # hierarchy … … 49 48 Template.cc 50 49 XMLPort.cc 50 51 COMPILATION_BEGIN ListenerCompilation.cc 52 ViewportEventListener.cc 53 WindowEventListener.cc 51 54 XMLNameListener.cc 55 COMPILATION_END 52 56 53 57 COMPILATION_BEGIN FilesystemCompilation.cc … … 76 80 Game.h 77 81 GameMode.h 82 GraphicsManager.h 78 83 GUIManager.h 79 84 Loader.h -
code/trunk/src/libraries/core/Core.cc
r7872 r8079 208 208 #ifdef ORXONOX_RELEASE 209 209 const unsigned int defaultLevelLogFile = 3; 210 SetConfigValue(bDevMode_, false) 211 .description("Developer mode. If not set, hides some things from the user to not confuse him."); 210 212 #else 211 213 const unsigned int defaultLevelLogFile = 4; 214 SetConfigValue(bDevMode_, true) 215 .description("Developer mode. If not set, hides some things from the user to not confuse him."); 212 216 #endif 213 217 SetConfigValueExternal(softDebugLevelLogFile_, "OutputHandler", "softDebugLevelLogFile", defaultLevelLogFile) -
code/trunk/src/libraries/core/Core.h
r7870 r8079 91 91 { return this->ogreConfigTimestamp_; } 92 92 93 inline bool inDevMode(void) const 94 { return this->bDevMode_; } 95 93 96 private: 94 97 Core(const Core&); //!< Don't use (undefined symbol) … … 130 133 long long lastLevelTimestamp_; ///< Timestamp when the last level was started 131 134 long long ogreConfigTimestamp_; ///< Timestamp wehen the ogre config level was modified 135 bool bDevMode_; //!< Developers bit. If set to false, some options are not available as to not confuse the normal user. 132 136 133 137 static Core* singletonPtr_s; -
code/trunk/src/libraries/core/CorePrereqs.h
r7849 r8079 182 182 class Thread; 183 183 class ThreadPool; 184 class ViewportEventListener; 184 185 template <class T> 185 186 class WeakPtr; -
code/trunk/src/libraries/core/GUIManager.cc
r7876 r8079 32 32 #include <boost/bind.hpp> 33 33 #include <memory> 34 extern "C" { 35 #include <lua.h> 36 } 34 37 35 #include <CEGUIDefaultLogger.h> 38 36 #include <CEGUIExceptions.h> … … 107 105 SetConsoleCommand("showGUI", &GUIManager::showGUI).defaultValue(1, false).defaultValue(2, false); 108 106 SetConsoleCommand("hideGUI", &GUIManager::hideGUI); 107 SetConsoleCommand("toggleGUI", &GUIManager::toggleGUI).defaultValue(1, false).defaultValue(2, false); 109 108 110 109 /** … … 284 283 { 285 284 GUIManager::getInstance().executeCode("hideMenuSheet(\"" + name + "\")"); 285 } 286 287 /** 288 @brief 289 Toggles specified GUI. 290 If the GUI with the input name is already shown and on the top, it is hidden, else it is shown. 291 */ 292 /*static*/ void GUIManager::toggleGUI(const std::string& name, bool bHidePrevious, bool bNoInput) 293 { 294 GUIManager::getInstance().executeCode("getGUIFirstActive(\"" + name + "\", " + multi_cast<std::string>(bHidePrevious) + ", " + multi_cast<std::string>(bNoInput) + ")"); 295 } 296 297 /** 298 @brief 299 Helper method to toggle a specified GUI. 300 Is called by lua. 301 */ 302 void GUIManager::toggleGUIHelper(const std::string& name, bool bHidePrevious, bool bNoInput, bool show) 303 { 304 if(show) 305 GUIManager::showGUI(name, bHidePrevious, bNoInput); 306 else 307 GUIManager::hideGUI(name); 286 308 } 287 309 … … 512 534 void GUIManager::windowResized(unsigned int newWidth, unsigned int newHeight) 513 535 { 514 this->guiRenderer_->setDisplaySize(CEGUI::Size( newWidth,newHeight));515 } 516 517 /** 518 @brief Notify CEGUI if the windows loses the focus (stops hig lightof menu items, etc).536 this->guiRenderer_->setDisplaySize(CEGUI::Size((float)newWidth, (float)newHeight)); 537 } 538 539 /** 540 @brief Notify CEGUI if the windows loses the focus (stops highlighting of menu items, etc). 519 541 */ 520 542 void GUIManager::windowFocusChanged(bool bFocus) -
code/trunk/src/libraries/core/GUIManager.h
r7874 r8079 49 49 #include "util/Singleton.h" 50 50 #include "input/InputHandler.h" 51 #include "Core.h" 51 52 #include "OrxonoxClass.h" 52 53 #include "WindowEventListener.h" … … 88 89 void showGUIExtra(const std::string& name, const std::string& ptr, bool bHidePrevious = false, bool bNoInput = false); 89 90 static void hideGUI(const std::string& name); 91 static void toggleGUI(const std::string& name, bool bHidePrevious = false, bool bNoInput = false); 92 void toggleGUIHelper(const std::string& name, bool bHidePrevious, bool bNoInput, bool show); // tolua_export 90 93 void keyESC(); 91 94 void setBackgroundImage(const std::string& imageSet, const std::string imageName); // tolua_export 92 95 void setBackgroundImage(const std::string& image); 96 97 /** 98 @brief Helper method to get the developer's mode without having to export Core.h. 99 @see Core::inDevMode 100 */ 101 static bool inDevMode(void) { return Core::getInstance().inDevMode(); } // tolua_export 93 102 94 103 //! Creates a new InputState to be used with a GUI Sheet -
code/trunk/src/libraries/core/Game.cc
r7284 r8079 50 50 #include "GameMode.h" 51 51 #include "GameState.h" 52 #include "GraphicsManager.h" 52 53 #include "GUIManager.h" 53 54 #include "command/ConsoleCommand.h" … … 60 61 static void printFPS() 61 62 { COUT(0) << Game::getInstance().getAvgFPS() << std::endl; } 62 SetConsoleCommand(" printFPS", &printFPS);63 SetConsoleCommand("Stats", "printFPS", &printFPS); 63 64 static void printTickTime() 64 65 { COUT(0) << Game::getInstance().getAvgTickTime() << std::endl; } 65 SetConsoleCommand(" printTickTime", &printTickTime);66 SetConsoleCommand("Stats", "printTickTime", &printTickTime); 66 67 67 68 std::map<std::string, GameStateInfo> Game::gameStateDeclarations_s; … … 142 143 SetConfigValue(statisticsAvgLength_, 1000000) 143 144 .description("Sets the time in microseconds interval at which average fps, etc. gets calculated."); 144 SetConfigValue(fpsLimit_, 50) 145 146 SetConfigValueExternal(fpsLimit_, "GraphicsSettings", "fpsLimit", 50) 145 147 .description("Sets the desired frame rate (0 for no limit)."); 146 148 } … … 207 209 208 210 // Limit frame rate 209 this->updateFPSLimiter(); 211 static bool hasVSync = GraphicsManager::getInstance().hasVSyncEnabled(); // can be static since changes of VSync currently require a restart 212 if (this->fpsLimit_ > 0 && !hasVSync) 213 this->updateFPSLimiter(); 210 214 } 211 215 -
code/trunk/src/libraries/core/GraphicsManager.cc
r7874 r8079 49 49 #include "SpecialConfig.h" 50 50 #include "util/Clock.h" 51 #include "util/Convert.h" 51 52 #include "util/Exception.h" 52 53 #include "util/StringUtils.h" … … 57 58 #include "Game.h" 58 59 #include "GameMode.h" 60 #include "GUIManager.h" 59 61 #include "Loader.h" 60 62 #include "MemoryArchive.h" 61 63 #include "PathConfig.h" 64 #include "ViewportEventListener.h" 62 65 #include "WindowEventListener.h" 63 66 #include "XMLFile.h" 64 67 #include "command/ConsoleCommand.h" 68 #include "input/InputManager.h" 65 69 66 70 namespace orxonox 67 71 { 72 static const std::string __CC_GraphicsManager_group = "GraphicsManager"; 73 static const std::string __CC_setScreenResolution_name = "setScreenResolution"; 74 static const std::string __CC_setFSAA_name = "setFSAA"; 75 static const std::string __CC_setVSync_name = "setVSync"; 76 DeclareConsoleCommand(__CC_GraphicsManager_group, __CC_setScreenResolution_name, &prototype::string__uint_uint_bool); 77 DeclareConsoleCommand(__CC_GraphicsManager_group, __CC_setFSAA_name, &prototype::string__string); 78 DeclareConsoleCommand(__CC_GraphicsManager_group, __CC_setVSync_name, &prototype::string__bool); 79 68 80 static const std::string __CC_printScreen_name = "printScreen"; 69 81 DeclareConsoleCommand(__CC_printScreen_name, &prototype::void__void); … … 95 107 , renderWindow_(0) 96 108 , viewport_(0) 109 , lastFrameStartTime_(0.0f) 110 , lastFrameEndTime_(0.0f) 97 111 { 98 112 RegisterObject(GraphicsManager); … … 136 150 Ogre::WindowEventUtilities::removeWindowEventListener(renderWindow_, ogreWindowEventListener_.get()); 137 151 ModifyConsoleCommand(__CC_printScreen_name).resetFunction(); 152 ModifyConsoleCommand(__CC_GraphicsManager_group, __CC_setScreenResolution_name).resetFunction(); 153 ModifyConsoleCommand(__CC_GraphicsManager_group, __CC_setFSAA_name).resetFunction(); 154 ModifyConsoleCommand(__CC_GraphicsManager_group, __CC_setVSync_name).resetFunction(); 138 155 139 156 // Undeclare the resources … … 304 321 CCOUT(4) << "Configuring Renderer" << std::endl; 305 322 306 if (!ogreRoot_->restoreConfig() || Core::getInstance().getOgreConfigTimestamp() > Core::getInstance().getLastLevelTimestamp()) 323 bool updatedConfig = Core::getInstance().getOgreConfigTimestamp() > Core::getInstance().getLastLevelTimestamp(); 324 if (updatedConfig) 325 COUT(2) << "Ogre config file has changed, but no level was started since then. Displaying config dialogue again to verify the changes." << std::endl; 326 327 if (!ogreRoot_->restoreConfig() || updatedConfig) 307 328 { 308 329 if (!ogreRoot_->showConfigDialog()) … … 330 351 // add console commands 331 352 ModifyConsoleCommand(__CC_printScreen_name).setFunction(&GraphicsManager::printScreen, this); 353 ModifyConsoleCommand(__CC_GraphicsManager_group, __CC_setScreenResolution_name).setFunction(&GraphicsManager::setScreenResolution, this); 354 ModifyConsoleCommand(__CC_GraphicsManager_group, __CC_setFSAA_name).setFunction(&GraphicsManager::setFSAA, this); 355 ModifyConsoleCommand(__CC_GraphicsManager_group, __CC_setVSync_name).setFunction(&GraphicsManager::setVSync, this); 332 356 } 333 357 … … 343 367 @note 344 368 A note about the Ogre::FrameListener: Even though we don't use them, 345 they still get called. However, the delta times are not correct (except 346 for timeSinceLastFrame, which is the most important). A little research 347 as shown that there is probably only one FrameListener that doesn't even 348 need the time. So we shouldn't run into problems. 369 they still get called. 349 370 */ 350 371 void GraphicsManager::postUpdate(const Clock& time) 351 372 { 373 // Time before rendering 374 uint64_t timeBeforeTick = time.getRealMicroseconds(); 375 376 // Ogre's time keeping object 352 377 Ogre::FrameEvent evt; 353 evt.timeSinceLastFrame = time.getDeltaTime(); 354 evt.timeSinceLastEvent = time.getDeltaTime(); // note: same time, but shouldn't matter anyway 355 356 // don't forget to call _fireFrameStarted to OGRE to make sure 357 // everything goes smoothly 378 379 // Translate to Ogre float times before the update 380 float temp = lastFrameStartTime_; 381 lastFrameStartTime_ = (float)timeBeforeTick * 0.000001f; 382 evt.timeSinceLastFrame = lastFrameStartTime_ - temp; 383 evt.timeSinceLastEvent = lastFrameStartTime_ - lastFrameEndTime_; 384 385 // Ogre requires the time too 358 386 ogreRoot_->_fireFrameStarted(evt); 359 387 … … 361 389 // This calls the WindowEventListener objects. 362 390 Ogre::WindowEventUtilities::messagePump(); 363 // make sure the window stays active even when not focused391 // Make sure the window stays active even when not focused 364 392 // (probably only necessary on windows) 365 393 this->renderWindow_->setActive(true); 366 367 // Time before rendering368 uint64_t timeBeforeTick = time.getRealMicroseconds();369 394 370 395 // Render frame … … 375 400 Game::getInstance().subtractTickTime((int32_t)(timeAfterTick - timeBeforeTick)); 376 401 377 // again, just to be sure OGRE works fine 378 ogreRoot_->_fireFrameEnded(evt); // note: uses the same time as _fireFrameStarted 402 // Translate to Ogre float times after the update 403 temp = lastFrameEndTime_; 404 lastFrameEndTime_ = (float)timeBeforeTick * 0.000001f; 405 evt.timeSinceLastFrame = lastFrameEndTime_ - temp; 406 evt.timeSinceLastEvent = lastFrameEndTime_ - lastFrameStartTime_; 407 408 // Ogre also needs the time after the frame finished 409 ogreRoot_->_fireFrameEnded(evt); 379 410 } 380 411 381 412 void GraphicsManager::setCamera(Ogre::Camera* camera) 382 413 { 414 Ogre::Camera* oldCamera = this->viewport_->getCamera(); 415 383 416 this->viewport_->setCamera(camera); 417 GUIManager::getInstance().setCamera(camera); 418 419 for (ObjectList<ViewportEventListener>::iterator it = ObjectList<ViewportEventListener>::begin(); it != ObjectList<ViewportEventListener>::end(); ++it) 420 it->cameraChanged(this->viewport_, oldCamera); 384 421 } 385 422 … … 440 477 bool GraphicsManager::isFullScreen() const 441 478 { 479 return this->renderWindow_->isFullScreen(); 480 } 481 482 unsigned int GraphicsManager::getWindowWidth() const 483 { 484 return this->renderWindow_->getWidth(); 485 } 486 487 unsigned int GraphicsManager::getWindowHeight() const 488 { 489 return this->renderWindow_->getHeight(); 490 } 491 492 bool GraphicsManager::hasVSyncEnabled() const 493 { 442 494 Ogre::ConfigOptionMap& options = ogreRoot_->getRenderSystem()->getConfigOptions(); 443 if (options.find("Full Screen") != options.end()) 444 { 445 if (options["Full Screen"].currentValue == "Yes") 446 return true; 447 else 448 return false; 449 } 495 Ogre::ConfigOptionMap::iterator it = options.find("VSync"); 496 if (it != options.end()) 497 return (it->second.currentValue == "Yes"); 450 498 else 451 {452 COUT(0) << "Could not find 'Full Screen' render system option. Fix This!!!" << std::endl;453 499 return false; 454 } 500 } 501 502 std::string GraphicsManager::getFSAAMode() const 503 { 504 Ogre::ConfigOptionMap& options = ogreRoot_->getRenderSystem()->getConfigOptions(); 505 Ogre::ConfigOptionMap::iterator it = options.find("FSAA"); 506 if (it != options.end()) 507 return it->second.currentValue; 508 else 509 return ""; 510 } 511 512 std::string GraphicsManager::setScreenResolution(unsigned int width, unsigned int height, bool fullscreen) 513 { 514 // workaround to detect if the colour depth should be written to the config file 515 bool bWriteColourDepth = false; 516 Ogre::ConfigOptionMap& options = ogreRoot_->getRenderSystem()->getConfigOptions(); 517 Ogre::ConfigOptionMap::iterator it = options.find("Video Mode"); 518 if (it != options.end()) 519 bWriteColourDepth = (it->second.currentValue.find('@') != std::string::npos); 520 521 if (bWriteColourDepth) 522 { 523 this->ogreRoot_->getRenderSystem()->setConfigOption("Video Mode", multi_cast<std::string>(width) 524 + " x " + multi_cast<std::string>(height) 525 + " @ " + multi_cast<std::string>(this->getRenderWindow()->getColourDepth()) + "-bit colour"); 526 } 527 else 528 { 529 this->ogreRoot_->getRenderSystem()->setConfigOption("Video Mode", multi_cast<std::string>(width) 530 + " x " + multi_cast<std::string>(height)); 531 } 532 533 this->ogreRoot_->getRenderSystem()->setConfigOption("Full Screen", fullscreen ? "Yes" : "No"); 534 535 std::string validate = this->ogreRoot_->getRenderSystem()->validateConfigOptions(); 536 537 if (validate == "") 538 { 539 GraphicsManager::getInstance().getRenderWindow()->setFullscreen(fullscreen, width, height); 540 this->ogreRoot_->saveConfig(); 541 Core::getInstance().updateOgreConfigTimestamp(); 542 // Also reload the input devices 543 InputManager::getInstance().reload(); 544 } 545 546 return validate; 547 } 548 549 std::string GraphicsManager::setFSAA(const std::string& mode) 550 { 551 this->ogreRoot_->getRenderSystem()->setConfigOption("FSAA", mode); 552 553 std::string validate = this->ogreRoot_->getRenderSystem()->validateConfigOptions(); 554 555 if (validate == "") 556 { 557 //this->ogreRoot_->getRenderSystem()->reinitialise(); // can't use this that easily, because it recreates the render window, invalidating renderWindow_ 558 this->ogreRoot_->saveConfig(); 559 Core::getInstance().updateOgreConfigTimestamp(); 560 } 561 562 return validate; 563 } 564 565 std::string GraphicsManager::setVSync(bool vsync) 566 { 567 this->ogreRoot_->getRenderSystem()->setConfigOption("VSync", vsync ? "Yes" : "No"); 568 569 std::string validate = this->ogreRoot_->getRenderSystem()->validateConfigOptions(); 570 571 if (validate == "") 572 { 573 //this->ogreRoot_->getRenderSystem()->reinitialise(); // can't use this that easily, because it recreates the render window, invalidating renderWindow_ 574 this->ogreRoot_->saveConfig(); 575 Core::getInstance().updateOgreConfigTimestamp(); 576 } 577 578 return validate; 455 579 } 456 580 -
code/trunk/src/libraries/core/GraphicsManager.h
r7401 r8079 54 54 #include "OrxonoxClass.h" 55 55 56 // tolua_begin 56 57 namespace orxonox 57 58 { … … 60 61 Graphics engine manager class 61 62 */ 62 class _CoreExport GraphicsManager : public Singleton<GraphicsManager>, public OrxonoxClass, public Ogre::LogListener 63 { 63 class _CoreExport GraphicsManager 64 // tolua_end 65 : public Singleton<GraphicsManager>, public OrxonoxClass, public Ogre::LogListener 66 { // tolua_export 64 67 friend class Singleton<GraphicsManager>; 65 68 public: … … 74 77 Ogre::RenderWindow* getRenderWindow() { return this->renderWindow_; } 75 78 size_t getRenderWindowHandle(); 79 80 // tolua_begin 81 static GraphicsManager& getInstance() { return Singleton<GraphicsManager>::getInstance(); } // tolua_export 82 76 83 bool isFullScreen() const; 84 unsigned int getWindowWidth() const; 85 unsigned int getWindowHeight() const; 86 87 bool hasVSyncEnabled() const; 88 std::string getFSAAMode() const; 89 // tolua_end 77 90 78 91 void upgradeToGraphics(); … … 96 109 // console commands 97 110 void printScreen(); 111 std::string setScreenResolution(unsigned int width, unsigned int height, bool fullscreen); 112 std::string setFSAA(const std::string& mode); 113 std::string setVSync(bool vsync); 98 114 99 115 scoped_ptr<OgreWindowEventListener> ogreWindowEventListener_; //!< Pimpl to hide OgreWindowUtilities.h … … 105 121 Ogre::RenderWindow* renderWindow_; //!< the one and only render window 106 122 Ogre::Viewport* viewport_; //!< default full size viewport 123 float lastFrameStartTime_; //!< Time stamp of the beginning of the last frame 124 float lastFrameEndTime_; //!< Time stamp of the end of the last frame 107 125 108 126 // XML files for the resources and the debug overlay … … 121 139 122 140 static GraphicsManager* singletonPtr_s; //!< Pointer to the Singleton 141 // tolua_begin 123 142 }; 124 143 } 144 // tolua_end 125 145 126 146 #endif /* _GraphicsManager_H__ */ -
code/trunk/src/libraries/core/Loader.cc
r7648 r8079 147 147 Returns true if successful. 148 148 */ 149 bool Loader::load(const XMLFile* file, const ClassTreeMask& mask, bool verbose )149 bool Loader::load(const XMLFile* file, const ClassTreeMask& mask, bool verbose, bool bRemoveLuaTags) 150 150 { 151 151 if (!file) … … 155 155 156 156 std::string xmlInput; 157 if (file->getLuaSupport() )157 if (file->getLuaSupport() && !bRemoveLuaTags) 158 158 { 159 159 // Use the LuaState to replace the XML tags (calls our function) … … 172 172 } 173 173 xmlInput = Resource::open(file->getFilename())->getAsString(); 174 175 if (bRemoveLuaTags) 176 { 177 // Remove all Lua code. 178 // Note: we only need this to speed up parsing of level files at the 179 // start of the program. 180 // Assumption: the LevelInfo tag does not use Lua scripting 181 xmlInput = removeLuaTags(xmlInput); 182 } 174 183 } 175 184 … … 271 280 } 272 281 273 std::string Loader::replaceLuaTags(const std::string& text) 274 { 275 // create map with all Lua tags 276 std::map<size_t, bool> luaTags; 282 bool Loader::getLuaTags(const std::string& text, std::map<size_t, bool>& luaTags) 283 { 284 // fill map with all Lua tags 277 285 { 278 286 size_t pos = 0; … … 328 336 { 329 337 COUT(2) << "Warning: Error in level file" << std::endl; 330 // todo: errorhandling 331 return ""; 332 } 333 } 338 // TODO: error handling 339 return false; 340 } 341 } 342 343 return true; 344 } 345 346 std::string Loader::replaceLuaTags(const std::string& text) 347 { 348 // create a map with all lua tags 349 std::map<size_t, bool> luaTags; 350 if (!getLuaTags(text, luaTags)) 351 return ""; 334 352 335 353 // Use a stringstream object to speed up the parsing … … 421 439 return output.str(); 422 440 } 441 442 std::string Loader::removeLuaTags(const std::string& text) 443 { 444 // create a map with all lua tags 445 std::map<size_t, bool> luaTags; 446 if (!getLuaTags(text, luaTags)) 447 return ""; 448 449 // Use a stringstream object to speed up the concatenation 450 std::ostringstream output; 451 452 // cut the original string into pieces and only write the non Lua parts 453 std::map<size_t, bool>::iterator it = luaTags.begin(); 454 bool bLuaCode = false; 455 size_t start = 0; 456 size_t end = 0; 457 458 do 459 { 460 if (it != luaTags.end()) 461 end = (it++)->first; 462 else 463 end = std::string::npos; 464 465 if (!bLuaCode) 466 { 467 output << text.substr(start, end - start); 468 start = end + 5; 469 } 470 else 471 start = end + 2; 472 473 bLuaCode = !bLuaCode; 474 } 475 while (end != std::string::npos); 476 477 return output.str(); 478 } 423 479 } -
code/trunk/src/libraries/core/Loader.h
r7648 r8079 42 42 #include "CorePrereqs.h" 43 43 44 #include <map> 44 45 #include <vector> 45 46 #include "ClassTreeMask.h" … … 61 62 static bool reload(const ClassTreeMask& mask = ClassTreeMask(), bool verbose = true); 62 63 63 static bool load(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask(), bool verbose = true); 64 static bool load(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask(), 65 bool verbose = true, bool bRemoveLuaTags = false); 64 66 static void unload(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask()); 65 67 static bool reload(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask(), bool verbose = true); 66 68 67 69 static std::string replaceLuaTags(const std::string& text); 70 static std::string removeLuaTags(const std::string& text); 68 71 69 72 static ClassTreeMask currentMask_s; 70 73 71 74 private: 75 static bool getLuaTags(const std::string& text, std::map<size_t, bool>& luaTags); 76 72 77 static std::vector<std::pair<const XMLFile*, ClassTreeMask> > files_s; 73 78 }; -
code/trunk/src/libraries/core/OrxonoxClass.h
r7850 r8079 194 194 195 195 protected: 196 virtual ~DestructionListener() {} 197 196 198 inline void registerAsDestructionListener(OrxonoxClass* object) 197 199 { if (object) { object->registerDestructionListener(this); } } -
code/trunk/src/libraries/core/WeakPtr.h
r7850 r8079 129 129 130 130 /// Destructor 131 inline ~WeakPtr()131 inline virtual ~WeakPtr() 132 132 { 133 133 this->unregisterAsDestructionListener(this->base_); -
code/trunk/src/libraries/core/command/CommandEvaluation.h
r7401 r8079 70 70 71 71 @remarks execCommand_ and hintCommand_ can be different in this case: There are multiple 72 commands avaliable, let's say "tcl" , "tclexecute", and "tclquery". The user enters73 "tcl", which is already a valid command. Now execCommand_ points to the "tcl"-command,74 but hintCommand_ still points to the autocompletion command of CommandExecutor, because75 the auto-completion list must still return the three possible commands, "tcl tclexecute tclquery"76 because the user may want to execute "tclquery" and needs auto-completion.72 commands avaliable, let's say "tcl" and "TclThreadManager". The user enters "tcl", which 73 is already a valid command. Now execCommand_ points to the "tcl"-command, but hintCommand_ 74 still points to the autocompletion command of CommandExecutor, because the auto-completion 75 list must still return the two possible commands, "tcl TclThreadManager" because the user 76 may want to write "TclThreadManager ..." and needs auto-completion. 77 77 78 78 @see See @ref CommandExecutorExample "this description" for an example. -
code/trunk/src/libraries/core/command/ConsoleCommand.h
r7861 r8079 317 317 inline void void__void(void) {} 318 318 inline void void__string(const std::string&) {} 319 320 inline std::string string__bool(bool) { return ""; } 321 inline std::string string__string(const std::string&) { return ""; } 322 inline std::string string__uint_uint_bool(unsigned int, unsigned int, bool) { return ""; } 319 323 } 320 324 -
code/trunk/src/libraries/core/command/ConsoleCommandCompilation.cc
r7401 r8079 46 46 namespace orxonox 47 47 { 48 SetConsoleCommand("source", source).argumentCompleter(0, autocompletion::files()); 48 // SetConsoleCommand("source", source).argumentCompleter(0, autocompletion::files()); // disabled because we use the implementation in Tcl 49 49 SetConsoleCommand("echo", echo); 50 SetConsoleCommand("puts", puts); 51 52 SetConsoleCommand("read", read).argumentCompleter(0, autocompletion::files()); 53 SetConsoleCommand("append", append).argumentCompleter(0, autocompletion::files()); 54 SetConsoleCommand("write", write).argumentCompleter(0, autocompletion::files()); 50 // SetConsoleCommand("puts", puts); // disabled because we use the implementation in Tcl 51 52 // SetConsoleCommand("read", read).argumentCompleter(0, autocompletion::files()); // disabled because we use the implementation in Tcl 53 // SetConsoleCommand("append", append).argumentCompleter(0, autocompletion::files()); // disabled because we use the implementation in Tcl 54 // SetConsoleCommand("write", write).argumentCompleter(0, autocompletion::files()); // disabled because we use the implementation in Tcl 55 55 56 56 SetConsoleCommand("calculate", calculate); -
code/trunk/src/libraries/core/command/Shell.cc
r7401 r8079 46 46 { 47 47 SetConsoleCommand("log", OutputHandler::log ); 48 SetConsoleCommand("error", OutputHandler::error ) ;49 SetConsoleCommand("warning", OutputHandler::warning) ;50 SetConsoleCommand("info", OutputHandler::info ) ;51 SetConsoleCommand("debug", OutputHandler::debug ) ;48 SetConsoleCommand("error", OutputHandler::error ).hide(); 49 SetConsoleCommand("warning", OutputHandler::warning).hide(); 50 SetConsoleCommand("info", OutputHandler::info ).hide(); 51 SetConsoleCommand("debug", OutputHandler::debug ).hide(); 52 52 53 53 unsigned int Shell::cacheSize_s; -
code/trunk/src/libraries/core/command/TclBind.cc
r7401 r8079 45 45 { 46 46 SetConsoleCommand("tcl", &TclBind::tcl); 47 SetConsoleCommand("bgerror", &TclBind::bgerror) ;47 SetConsoleCommand("bgerror", &TclBind::bgerror).hide(); 48 48 49 49 TclBind* TclBind::singletonPtr_s = 0; … … 91 91 92 92 this->interpreter_->def("::orxonox::query", TclBind::tcl_query, Tcl::variadic()); 93 this->interpreter_->def("::orxonox::execute", TclBind::tcl_execute, Tcl::variadic()); 93 94 this->interpreter_->def("::orxonox::crossquery", TclThreadManager::tcl_crossquery, Tcl::variadic()); 94 this->interpreter_->def("execute", TclBind::tcl_execute, Tcl::variadic());95 95 this->interpreter_->def("::orxonox::crossexecute", TclThreadManager::tcl_crossexecute, Tcl::variadic()); 96 96 97 97 try 98 98 { 99 this->interpreter_->eval("proc query {args} { ::orxonox::query $args }"); 99 this->interpreter_->def("query", TclBind::tcl_query, Tcl::variadic()); 100 this->interpreter_->def("execute", TclBind::tcl_execute, Tcl::variadic()); 100 101 this->interpreter_->eval("proc crossquery {id args} { ::orxonox::crossquery 0 $id $args }"); 101 this->interpreter_->eval("proc crossexecute {id args} { ::orxonox::cross query0 $id $args }");102 this->interpreter_->eval("proc crossexecute {id args} { ::orxonox::crossexecute 0 $id $args }"); 102 103 this->interpreter_->eval("proc running {} { return 1 }"); 103 104 this->interpreter_->eval("set id 0"); … … 154 155 { 155 156 COUT(4) << "Tcl_query: " << args.get() << std::endl; 156 157 return TclBind::tcl_helper(args, true); 158 } 159 160 /** 161 @brief Callback: Used to send an Orxonox-command from Tcl to the CommandExecutor. 162 */ 163 void TclBind::tcl_execute(Tcl::object const &args) 164 { 165 COUT(4) << "Tcl_execute: " << args.get() << std::endl; 166 TclBind::tcl_helper(args, false); 167 } 168 169 /** 170 @brief Helper function, used by tcl_query() and tcl_execute(). 171 */ 172 std::string TclBind::tcl_helper(Tcl::object const &args, bool bQuery) 173 { 157 174 const std::string& command = stripEnclosingBraces(args.get()); 158 175 159 176 int error; 177 std::string result; 178 160 179 CommandEvaluation evaluation = CommandExecutor::evaluate(command); 161 const std::string& result = evaluation.query(&error); 180 181 if (bQuery) 182 result = evaluation.query(&error).getString(); 183 else 184 error = evaluation.execute(); 185 162 186 switch (error) 163 187 { … … 175 199 176 200 /** 177 @brief Callback: Used to send an Orxonox-command from Tcl to the CommandExecutor.178 */179 void TclBind::tcl_execute(Tcl::object const &args)180 {181 COUT(4) << "Tcl_execute: " << args.get() << std::endl;182 const std::string& command = stripEnclosingBraces(args.get());183 184 if (CommandExecutor::execute(command, false))185 {186 COUT(1) << "Error: Can't execute command \"" << command << "\"!" << std::endl;187 }188 }189 190 /**191 201 @brief Console command, executes Tcl code. Can be used to bind Tcl-commands to a key, because native 192 202 Tcl-commands can not be evaluated and are thus not supported by the key-binder. … … 198 208 try 199 209 { 200 const std::string& output = TclBind::getInstance().interpreter_->eval("uplevel #0 " + tclcode); 201 if (!output.empty()) 202 { 203 COUT(0) << "tcl> " << output << std::endl; 204 } 205 return output; 210 return TclBind::getInstance().interpreter_->eval("uplevel #0 " + tclcode); 206 211 } 207 212 catch (Tcl::tcl_error const &e) 208 { COUT(1) << " tcl> Error: " << e.what() << std::endl; }213 { COUT(1) << "Tcl error: " << e.what() << std::endl; } 209 214 } 210 215 -
code/trunk/src/libraries/core/command/TclBind.h
r7401 r8079 126 126 TclBind(const TclBind& other); ///< Copy-constructor, not implemented 127 127 128 static std::string tcl_helper(Tcl::object const &args, bool bQuery); 129 128 130 Tcl::interpreter* interpreter_; ///< The wrapped Tcl interpreter 129 131 std::string tclDataPath_; ///< The path to the directory that contains the Orxonox-specific Tcl-files -
code/trunk/src/libraries/core/command/TclThreadManager.cc
r7401 r8079 55 55 const float TCLTHREADMANAGER_MAX_CPU_USAGE = 0.50f; 56 56 57 SetConsoleCommand("tclexecute", &TclThreadManager::execute).argumentCompleter(0, autocompletion::tclthreads());58 SetConsoleCommand("tclquery", &TclThreadManager::query ).argumentCompleter(0, autocompletion::tclthreads());59 57 SetConsoleCommand("TclThreadManager", "create", &TclThreadManager::create); 60 58 SetConsoleCommand("TclThreadManager", "destroy", &TclThreadManager::destroy).argumentCompleter(0, autocompletion::tclthreads()); -
code/trunk/src/libraries/core/input/InputManager.cc
r7874 r8079 641 641 state->destroy(); 642 642 } 643 644 bool InputManager::setMouseExclusive(const std::string& name, TriBool::Value value) 645 { 646 if (name == "empty") 647 { 648 COUT(2) << "InputManager: Changing the empty state is not allowed!" << std::endl; 649 return false; 650 } 651 std::map<std::string, InputState*>::iterator it = statesByName_.find(name); 652 if (it != statesByName_.end()) 653 { 654 it->second->setMouseExclusive(value); 655 return true; 656 } 657 return false; 658 } 643 659 } -
code/trunk/src/libraries/core/input/InputManager.h
r7874 r8079 163 163 */ 164 164 bool destroyState(const std::string& name); // tolua_export 165 /** 166 @brief 167 Changes the mouse mode of an input state. 168 @return 169 True if the call was successful, fals if the name was not found 170 */ 171 bool setMouseExclusive(const std::string& name, TriBool::Value value); // tolua_export 165 172 166 173 //------------------------------- -
code/trunk/src/libraries/core/input/KeyBinder.cc
r7958 r8079 431 431 // decrease counter 432 432 button->nCommands_[mode_index]--; 433 // note: we don't replace the old array - it's not one element too large, but no one cares since nCommands_ defines the size 433 // old array would not get deleted if nCommands_ is now 0 434 // otherwise: nobody cares about an array that is one element too large - nCommands_ defines the size 435 if (button->nCommands_[mode_index] == 0) 436 { 437 delete[] button->commands_[mode_index]; 438 button->commands_[mode_index] = 0; 439 } 434 440 435 441 // decrement the index since we shifted the array and continue searching for more occurrences of the command -
code/trunk/src/libraries/core/input/Keyboard.cc
r6422 r8079 36 36 { 37 37 // update modifiers 38 if (arg.key == OIS::KC_RMENU || arg.key == OIS::KC_LMENU) 39 modifiers_ |= KeyboardModifier::Alt; // alt key 40 if (arg.key == OIS::KC_RCONTROL || arg.key == OIS::KC_LCONTROL) 41 modifiers_ |= KeyboardModifier::Ctrl; // ctrl key 42 if (arg.key == OIS::KC_RSHIFT || arg.key == OIS::KC_LSHIFT) 43 modifiers_ |= KeyboardModifier::Shift; // shift key 38 switch (arg.key) 39 { 40 case OIS::KC_RMENU: 41 case OIS::KC_LMENU: 42 modifiers_ |= KeyboardModifier::Alt; // alt key 43 break; 44 case OIS::KC_RCONTROL: 45 case OIS::KC_LCONTROL: 46 modifiers_ |= KeyboardModifier::Ctrl; // ctrl key 47 break; 48 case OIS::KC_RSHIFT: 49 case OIS::KC_LSHIFT: 50 modifiers_ |= KeyboardModifier::Shift; // shift key 51 break; 52 case OIS::KC_TAB: 53 // Do not distribute the alt+tab event (messes with the operating system) 54 if ((modifiers_ & KeyboardModifier::Alt) != 0) 55 return true; 56 default:; 57 } 44 58 45 // Do not distribute the alt+tab event (messes with the operating system) 46 if ((modifiers_ & KeyboardModifier::Alt) != 0 && arg.key == OIS::KC_TAB) 47 return true; 48 49 KeyEvent evt(arg); 59 KeyEvent evt(static_cast<KeyCode::ByEnum>(arg.key), Keyboard::getKeyText(arg), 0); 50 60 super::buttonPressed(evt); 51 61 return true; … … 56 66 { 57 67 // update modifiers 58 if (arg.key == OIS::KC_RMENU || arg.key == OIS::KC_LMENU) 59 modifiers_ &= ~KeyboardModifier::Alt; // alt key 60 if (arg.key == OIS::KC_RCONTROL || arg.key == OIS::KC_LCONTROL) 61 modifiers_ &= ~KeyboardModifier::Ctrl; // ctrl key 62 if (arg.key == OIS::KC_RSHIFT || arg.key == OIS::KC_LSHIFT) 63 modifiers_ &= ~KeyboardModifier::Shift; // shift key 68 switch (arg.key) 69 { 70 case OIS::KC_RMENU: 71 case OIS::KC_LMENU: 72 modifiers_ &= ~KeyboardModifier::Alt; // alt key 73 break; 74 case OIS::KC_RCONTROL: 75 case OIS::KC_LCONTROL: 76 modifiers_ &= ~KeyboardModifier::Ctrl; // ctrl key 77 break; 78 case OIS::KC_RSHIFT: 79 case OIS::KC_LSHIFT: 80 modifiers_ &= ~KeyboardModifier::Shift; // shift key 81 break; 82 default:; 83 } 64 84 65 KeyEvent evt( arg);85 KeyEvent evt(static_cast<KeyCode::ByEnum>(arg.key), Keyboard::getKeyText(arg), 0); 66 86 super::buttonReleased(evt); 67 87 return true; 68 88 } 89 90 /// A map which returns the corresponding chars for some key codes 91 unsigned int Keyboard::getKeyText(const OIS::KeyEvent& arg) 92 { 93 switch (arg.key) 94 { 95 case OIS::KC_NUMPAD0: return static_cast<unsigned int>('0'); 96 case OIS::KC_NUMPAD1: return static_cast<unsigned int>('1'); 97 case OIS::KC_NUMPAD2: return static_cast<unsigned int>('2'); 98 case OIS::KC_NUMPAD3: return static_cast<unsigned int>('3'); 99 case OIS::KC_NUMPAD4: return static_cast<unsigned int>('4'); 100 case OIS::KC_NUMPAD5: return static_cast<unsigned int>('5'); 101 case OIS::KC_NUMPAD6: return static_cast<unsigned int>('6'); 102 case OIS::KC_NUMPAD7: return static_cast<unsigned int>('7'); 103 case OIS::KC_NUMPAD8: return static_cast<unsigned int>('8'); 104 case OIS::KC_NUMPAD9: return static_cast<unsigned int>('9'); 105 case OIS::KC_DECIMAL: return static_cast<unsigned int>('.'); 106 case OIS::KC_DIVIDE: return static_cast<unsigned int>('/'); 107 case OIS::KC_NUMPADENTER: return static_cast<unsigned int>('\n'); 108 default: return arg.text; 109 } 110 } 69 111 } -
code/trunk/src/libraries/core/input/Keyboard.h
r7809 r8079 83 83 static std::string getClassNameImpl() { return "Keyboard"; } 84 84 85 static unsigned int getKeyText(const OIS::KeyEvent& arg); 86 85 87 //! Bit mask representing keyboard modifiers 86 88 int modifiers_; -
code/trunk/src/libraries/network/Host.cc
r7801 r8079 38 38 namespace orxonox { 39 39 40 static const std::string __CC_printRTT_group = "Stats"; 40 41 static const std::string __CC_printRTT_name = "printRTT"; 41 42 42 43 SetConsoleCommand("chat", &Host::Chat); 43 SetConsoleCommand(__CC_printRTT_ name, &Host::printRTT);44 SetConsoleCommand(__CC_printRTT_group, __CC_printRTT_name, &Host::printRTT); 44 45 45 46 // Host* Host::instance_=0; … … 55 56 // assert(instance_==0); 56 57 instances_s.push_back(this); 57 ModifyConsoleCommand(__CC_printRTT_ name).setObject(this);58 ModifyConsoleCommand(__CC_printRTT_group, __CC_printRTT_name).setObject(this); 58 59 this->bIsActive_ = false; 59 60 } … … 67 68 assert( std::find( instances_s.begin(), instances_s.end(), this )!=instances_s.end() ); 68 69 instances_s.erase(std::find( instances_s.begin(), instances_s.end(), this )); 69 ModifyConsoleCommand(__CC_printRTT_ name).setObject(0);70 ModifyConsoleCommand(__CC_printRTT_group, __CC_printRTT_name).setObject(0); 70 71 } 71 72 -
code/trunk/src/libraries/tools/ResourceLocation.cc
r7709 r8079 30 30 31 31 #include <OgreResourceGroupManager.h> 32 #include <OgreException.h> 32 33 #include <boost/filesystem.hpp> 33 34 -
code/trunk/src/libraries/tools/Shader.cc
r6417 r8079 30 30 31 31 #include <OgreCompositorManager.h> 32 #include <OgreCompositorInstance.h>33 #include <OgreSceneManager.h>34 32 #include <OgreRoot.h> 35 33 #include <OgrePlugin.h> 36 #include <OgreMaterial.h>37 #include <OgreTechnique.h>38 #include <OgrePass.h>39 #include <OgreMaterialManager.h>40 34 41 35 #include "core/CoreIncludes.h" … … 45 39 namespace orxonox 46 40 { 47 bool Shader::bLoadedCgPlugin_s = false;48 Shader::MaterialMap Shader::parameters_s;49 41 /** 42 @brief Initializes the values and sets the scene manager. 43 */ 50 44 Shader::Shader(Ogre::SceneManager* scenemanager) : compositorInstance_(0) 51 45 { … … 53 47 54 48 this->scenemanager_ = scenemanager; 55 this->compositorInstance_ = 0;56 49 this->bVisible_ = true; 57 50 this->bLoadCompositor_ = GameMode::showsGraphics(); 58 this->bViewportInitialized_ = false; 59 60 if (this->bLoadCompositor_ && Ogre::Root::getSingletonPtr()) 61 { 62 Shader::bLoadedCgPlugin_s = false; 51 this->registeredAsListener_ = false; 52 53 static bool hasCgProgramManager = Shader::hasCgProgramManager(); 54 55 this->bLoadCompositor_ &= hasCgProgramManager; 56 } 57 58 /** 59 @brief Removes the compositor and frees the resources. 60 */ 61 Shader::~Shader() 62 { 63 if (this->compositorInstance_ && GraphicsManager::getInstance().getViewport()) 64 Ogre::CompositorManager::getSingleton().removeCompositor(GraphicsManager::getInstance().getViewport(), this->compositorName_); 65 } 66 67 /** 68 @brief Inherited from ViewportEventListener - called if the camera changes. 69 70 Since the new camera could be in a different scene, the shader has to make sure 71 it deactivates or activates itself accordingly. 72 73 Additionally the shader has to be turned off and on even if the camera stays in 74 the same scene to fix a weird behavior of Ogre. 75 */ 76 void Shader::cameraChanged(Ogre::Viewport* viewport, Ogre::Camera* oldCamera) 77 { 78 if (!this->bLoadCompositor_ || !this->scenemanager_) 79 return; 80 81 // load the compositor if not already done 82 if (!this->compositorName_.empty() && !this->compositorInstance_) 83 this->changedCompositorName(viewport); 84 85 // update compositor in viewport (shader should only be active if the current camera is in the same scene as the shader) 86 87 // Note: 88 // The shader needs also to be switched off and on after changing the camera in the 89 // same scene to avoid weird behaviour with active compositors while switching the 90 // camera (like freezing the image) 91 // 92 // Last known Ogre version needing this workaround: 93 // 1.4.8 94 // 1.7.2 95 96 if (oldCamera && this->scenemanager_ == oldCamera->getSceneManager()) 97 Ogre::CompositorManager::getSingleton().setCompositorEnabled(viewport, this->compositorName_, false); 98 99 if (viewport->getCamera() && this->scenemanager_ == viewport->getCamera()->getSceneManager()) 100 Ogre::CompositorManager::getSingleton().setCompositorEnabled(viewport, this->compositorName_, this->isVisible()); 101 } 102 103 /** 104 @brief Changes the compositor - default viewport. 105 */ 106 void Shader::changedCompositorName() 107 { 108 // For the moment, we get the viewport always from the graphics manager 109 // TODO: Try to support multiple viewports - note however that scenemanager_->getCurrentViewport() returns NULL 110 // after switching to a camera in a different scene (only for the first time this scene is displayed though) 111 this->changedCompositorName(GraphicsManager::getInstance().getViewport()); 112 } 113 114 /** 115 @brief Changes the compositor. 116 */ 117 void Shader::changedCompositorName(Ogre::Viewport* viewport) 118 { 119 if (this->bLoadCompositor_) 120 { 121 assert(viewport); 122 if (this->compositorInstance_) 123 { 124 // remove the old compositor, remove the listener 125 Ogre::CompositorManager::getSingleton().removeCompositor(viewport, this->oldcompositorName_); 126 this->compositorInstance_->removeListener(this); 127 this->compositorInstance_ = 0; 128 } 129 if (!this->compositorName_.empty()) 130 { 131 // add the new compositor 132 this->compositorInstance_ = Ogre::CompositorManager::getSingleton().addCompositor(viewport, this->compositorName_); 133 if (this->compositorInstance_) 134 { 135 // register as listener if required 136 if (this->registeredAsListener_) 137 this->compositorInstance_->addListener(this); 138 // set visibility according to the isVisible() and the camera/viewport 139 if (viewport->getCamera()) 140 Ogre::CompositorManager::getSingleton().setCompositorEnabled(viewport, this->compositorName_, this->isVisible() && viewport->getCamera() && this->scenemanager_ == viewport->getCamera()->getSceneManager()); 141 } 142 else 143 COUT(2) << "Warning: Couldn't load compositor with name \"" << this->compositorName_ << "\"." << std::endl; 144 } 145 this->oldcompositorName_ = this->compositorName_; 146 } 147 } 148 149 /** 150 @brief Changes the visibility of the shader. Doesn't free any resources if set to invisible. 151 */ 152 void Shader::updateVisibility() 153 { 154 if (this->compositorInstance_) 155 Ogre::CompositorManager::getSingleton().setCompositorEnabled(GraphicsManager::getInstance().getViewport(), this->compositorName_, this->isVisible()); 156 } 157 158 /** 159 @brief Defines a new integer value for a given parameter. The parameter will be updated if the compositor is rendered the next time. 160 */ 161 void Shader::setParameter(size_t technique, size_t pass, const std::string& parameter, int value) 162 { 163 ParameterContainer container = {technique, pass, parameter, value, 0.0f, MT_Type::Int}; 164 this->parameters_.push_back(container); 165 this->addAsListener(); 166 } 167 168 /** 169 @brief Defines a new float value for a given parameter. The parameter will be updated if the compositor is rendered the next time. 170 */ 171 void Shader::setParameter(size_t technique, size_t pass, const std::string& parameter, float value) 172 { 173 ParameterContainer container = {technique, pass, parameter, 0, value, MT_Type::Float}; 174 this->parameters_.push_back(container); 175 this->addAsListener(); 176 } 177 178 /** 179 @brief Registers the shader as CompositorInstance::Listener at the compositor. Used to change parameters. 180 */ 181 void Shader::addAsListener() 182 { 183 if (!this->registeredAsListener_) 184 { 185 this->registeredAsListener_ = true; 186 if (this->compositorInstance_) 187 this->compositorInstance_->addListener(this); 188 } 189 } 190 191 /** 192 @brief Inherited by Ogre::CompositorInstance::Listener, called whenever the material is rendered. Used to change parameters. 193 */ 194 void Shader::notifyMaterialRender(Ogre::uint32 pass_id, Ogre::MaterialPtr& materialPtr) 195 { 196 // iterate through the list of parameters 197 for (std::list<ParameterContainer>::iterator it = this->parameters_.begin(); it != this->parameters_.end(); ++it) 198 { 199 Ogre::Technique* techniquePtr = materialPtr->getTechnique(it->technique_); 200 if (techniquePtr) 201 { 202 Ogre::Pass* passPtr = techniquePtr->getPass(it->pass_); 203 if (passPtr) 204 { 205 // change the value of the parameter depending on its type 206 switch (it->valueType_) 207 { 208 case MT_Type::Int: 209 passPtr->getFragmentProgramParameters()->setNamedConstant(it->parameter_, it->valueInt_); 210 break; 211 case MT_Type::Float: 212 passPtr->getFragmentProgramParameters()->setNamedConstant(it->parameter_, it->valueFloat_); 213 break; 214 default: 215 break; 216 } 217 } 218 else 219 COUT(2) << "Warning: No pass " << it->pass_ << " in technique " << it->technique_ << " in compositor \"" << this->compositorName_ << "\" or pass has no shader." << std::endl; 220 } 221 else 222 COUT(2) << "Warning: No technique " << it->technique_ << " in compositor \"" << this->compositorName_ << "\" or technique has no pass with shader." << std::endl; 223 } 224 this->parameters_.clear(); 225 } 226 227 /** 228 @brief Detects if the Cg program manager plugin is active. 229 */ 230 /* static */ bool Shader::hasCgProgramManager() 231 { 232 if (Ogre::Root::getSingletonPtr()) 233 { 63 234 const Ogre::Root::PluginInstanceList& plugins = Ogre::Root::getSingleton().getInstalledPlugins(); 64 235 for (size_t i = 0; i < plugins.size(); ++i) 65 {66 236 if (plugins[i]->getName() == "Cg Program Manager") 67 {68 Shader::bLoadedCgPlugin_s = true;69 break;70 }71 }72 }73 74 this->bLoadCompositor_ &= Shader::bLoadedCgPlugin_s;75 }76 77 Shader::~Shader()78 {79 if (this->compositorInstance_ && this->bLoadCompositor_)80 {81 Ogre::Viewport* viewport = GraphicsManager::getInstance().getViewport();82 assert(viewport);83 Ogre::CompositorManager::getSingleton().removeCompositor(viewport, this->compositor_);84 }85 86 }87 88 void Shader::setSceneManager(Ogre::SceneManager* scenemanager)89 {90 this->scenemanager_ = scenemanager;91 this->bViewportInitialized_ = false;92 }93 94 void Shader::tick(float dt)95 {96 SUPER(Shader, tick, dt);97 98 if (this->bLoadCompositor_ && !this->bViewportInitialized_ && this->scenemanager_ && this->scenemanager_->getCurrentViewport())99 {100 this->bViewportInitialized_ = true;101 this->updateVisibility();102 }103 }104 105 void Shader::changedCompositor()106 {107 if (this->bLoadCompositor_)108 {109 Ogre::Viewport* viewport = GraphicsManager::getInstance().getViewport();110 assert(viewport);111 if (!this->oldcompositor_.empty())112 {113 Ogre::CompositorManager::getSingleton().removeCompositor(viewport, this->oldcompositor_);114 this->compositorInstance_ = 0;115 }116 if (!this->compositor_.empty())117 {118 this->compositorInstance_ = Ogre::CompositorManager::getSingleton().addCompositor(viewport, this->compositor_);119 if (!this->compositorInstance_)120 COUT(2) << "Warning: Couldn't load compositor with name \"" << this->compositor_ << "\"." << std::endl;121 Ogre::CompositorManager::getSingleton().setCompositorEnabled(viewport, this->compositor_, this->bViewportInitialized_ && this->isVisible());122 }123 this->oldcompositor_ = this->compositor_;124 }125 }126 127 void Shader::updateVisibility()128 {129 if (this->compositorInstance_ && this->scenemanager_)130 this->compositorInstance_->setEnabled(this->scenemanager_->getCurrentViewport() && this->isVisible());131 }132 133 void Shader::setParameter(const std::string& material, size_t technique, size_t pass, const std::string& parameter, float value)134 {135 if (Shader::_setParameter(material, technique, pass, parameter, value))136 {137 if (this->bViewportInitialized_ && this->compositorInstance_ && this->isVisible())138 {139 this->compositorInstance_->setEnabled(false);140 this->compositorInstance_->setEnabled(true);141 }142 }143 }144 145 void Shader::setParameter(const std::string& material, size_t technique, size_t pass, const std::string& parameter, int value)146 {147 if (Shader::_setParameter(material, technique, pass, parameter, value))148 {149 if (this->bViewportInitialized_ && this->compositorInstance_ && this->isVisible())150 {151 this->compositorInstance_->setEnabled(false);152 this->compositorInstance_->setEnabled(true);153 }154 }155 }156 157 bool Shader::_setParameter(const std::string& material, size_t technique, size_t pass, const std::string& parameter, float value)158 {159 ParameterPointer* pointer = Shader::getParameterPointer(material, technique, pass, parameter);160 if (pointer)161 {162 if (pointer->first)163 {164 if ((*static_cast<float*>(pointer->second)) != value)165 {166 (*static_cast<float*>(pointer->second)) = value;167 237 return true; 168 }169 }170 else171 {172 if ((*static_cast<int*>(pointer->second)) != static_cast<int>(value))173 {174 (*static_cast<int*>(pointer->second)) = static_cast<int>(value);175 return true;176 }177 }178 238 } 179 239 return false; 180 240 } 181 182 bool Shader::_setParameter(const std::string& material, size_t technique, size_t pass, const std::string& parameter, int value)183 {184 ParameterPointer* pointer = Shader::getParameterPointer(material, technique, pass, parameter);185 if (pointer)186 {187 if (pointer->first)188 {189 if ((*static_cast<float*>(pointer->second)) != static_cast<float>(value))190 {191 (*static_cast<float*>(pointer->second)) = static_cast<float>(value);192 return true;193 }194 }195 else196 {197 if ((*static_cast<int*>(pointer->second)) != value)198 {199 (*static_cast<int*>(pointer->second)) = value;200 return true;201 }202 }203 }204 return false;205 }206 207 float Shader::getParameter(const std::string& material, size_t technique, size_t pass, const std::string& parameter)208 {209 ParameterPointer* pointer = Shader::getParameterPointer(material, technique, pass, parameter);210 if (pointer)211 {212 if (pointer->first)213 return (*static_cast<float*>(pointer->second));214 else215 return static_cast<float>(*static_cast<int*>(pointer->second));216 }217 else218 return 0;219 }220 221 bool Shader::getParameterIsFloat(const std::string& material, size_t technique, size_t pass, const std::string& parameter)222 {223 ParameterPointer* pointer = Shader::getParameterPointer(material, technique, pass, parameter);224 if (pointer)225 return pointer->first;226 else227 return false;228 }229 230 bool Shader::getParameterIsInt(const std::string& material, size_t technique, size_t pass, const std::string& parameter)231 {232 ParameterPointer* pointer = Shader::getParameterPointer(material, technique, pass, parameter);233 if (pointer)234 return (!pointer->first);235 else236 return false;237 }238 239 Shader::ParameterPointer* Shader::getParameterPointer(const std::string& material, size_t technique, size_t pass, const std::string& parameter)240 {241 if (!GameMode::showsGraphics() || !Shader::bLoadedCgPlugin_s)242 return 0;243 244 MaterialMap::iterator material_iterator = Shader::parameters_s.find(material);245 if (material_iterator != Shader::parameters_s.end())246 {247 TechniqueVector& technique_vector = material_iterator->second;248 if (technique < technique_vector.size())249 {250 PassVector& pass_vector = technique_vector[technique];251 if (pass < pass_vector.size())252 {253 ParameterMap& parameter_map = pass_vector[pass];254 ParameterMap::iterator parameter_iterator = parameter_map.find(parameter);255 256 if (parameter_iterator != parameter_map.end())257 return (¶meter_iterator->second);258 else259 COUT(2) << "Warning: No shader parameter \"" << parameter << "\" in pass " << pass << " in technique " << technique << " in material \"" << material << "\"." << std::endl;260 }261 else262 COUT(2) << "Warning: No pass " << pass << " in technique " << technique << " in material \"" << material << "\" or pass has no shader." << std::endl;263 }264 else265 COUT(2) << "Warning: No technique " << technique << " in material \"" << material << "\" or technique has no pass with shader." << std::endl;266 }267 else268 {269 bool foundAtLeastOneShaderParameter = false;270 Ogre::MaterialManager::ResourceMapIterator iterator = Ogre::MaterialManager::getSingleton().getResourceIterator();271 Ogre::Material* material_pointer = 0;272 273 while (iterator.hasMoreElements())274 {275 Ogre::Resource* resource = iterator.getNext().get();276 if (resource->getName() == material)277 material_pointer = (Ogre::Material*)resource;278 }279 280 if (!material_pointer)281 {282 COUT(2) << "Warning: No material with name \"" << material << "\" found." << std::endl;283 return 0;284 }285 286 for (unsigned int t = 0; t < material_pointer->getNumTechniques(); ++t)287 {288 Ogre::Technique* technique_pointer = material_pointer->getTechnique(t);289 if (!technique_pointer)290 continue;291 292 for (unsigned int p = 0; p < technique_pointer->getNumPasses(); ++p)293 {294 Ogre::Pass* pass_pointer = technique_pointer->getPass(p);295 if (!pass_pointer)296 continue;297 298 if (!pass_pointer->getFragmentProgramName().empty())299 {300 Ogre::GpuProgramParameters* parameter_pointer = pass_pointer->getFragmentProgramParameters().get();301 if (!parameter_pointer)302 continue;303 304 const Ogre::GpuConstantDefinitionMap& constant_definitions = parameter_pointer->getConstantDefinitions().map;305 for (Ogre::GpuConstantDefinitionMap::const_iterator definition_iterator = constant_definitions.begin(); definition_iterator != constant_definitions.end(); ++definition_iterator)306 {307 void* temp = (definition_iterator->second.isFloat())308 ? static_cast<void*>(parameter_pointer->getFloatPointer(definition_iterator->second.physicalIndex))309 : static_cast<void*>(parameter_pointer->getIntPointer(definition_iterator->second.physicalIndex));310 ParameterPointer parameter_pointer = ParameterPointer(definition_iterator->second.isFloat(), temp);311 312 TechniqueVector& technique_vector = Shader::parameters_s[material];313 technique_vector.resize(technique + 1);314 PassVector& pass_vector = technique_vector[technique];315 pass_vector.resize(pass + 1);316 pass_vector[pass][definition_iterator->first] = parameter_pointer;317 foundAtLeastOneShaderParameter = true;318 }319 }320 }321 }322 323 // recursive call if the material was added to the map324 if (foundAtLeastOneShaderParameter)325 return Shader::getParameterPointer(material, technique, pass, parameter);326 }327 return 0;328 }329 241 } -
code/trunk/src/libraries/tools/Shader.h
r5781 r8079 36 36 #include <vector> 37 37 38 #include <OgreCompositorInstance.h> 39 40 #include "util/MultiType.h" 38 41 #include "util/OgreForwardRefs.h" 39 #include " tools/interfaces/Tickable.h"42 #include "core/ViewportEventListener.h" 40 43 41 44 namespace orxonox 42 45 { 43 class _ToolsExport Shader : public Tickable 46 /** 47 @brief Shader is a wrapper class around Ogre::CompositorInstance. It provides some 48 functions to easily change the visibility and parameters for shader programs. 49 */ 50 class _ToolsExport Shader : public ViewportEventListener, public Ogre::CompositorInstance::Listener 44 51 { 45 typedef std::pair<bool, void*> ParameterPointer;46 typedef std::map<std::string, ParameterPointer> ParameterMap;47 typedef std::vector<ParameterMap> PassVector;48 typedef std::vector<PassVector> TechniqueVector;49 typedef std::map<std::string, TechniqueVector> MaterialMap;50 51 52 public: 52 53 Shader(Ogre::SceneManager* scenemanager = 0); 53 54 virtual ~Shader(); 54 55 55 virtual void tick(float dt); 56 56 /// Defines if the shader is visible or not. 57 57 inline void setVisible(bool bVisible) 58 58 { … … 63 63 } 64 64 } 65 /// Returns whether or not the shader is visible. 65 66 inline bool isVisible() const 66 67 { return this->bVisible_; } 67 68 void updateVisibility(); 68 69 69 inline void setCompositor(const std::string& compositor) 70 /// Defines the compositor's name (located in a .compositor file). 71 inline void setCompositorName(const std::string& name) 70 72 { 71 if (this->compositor _ != compositor)73 if (this->compositorName_ != name) 72 74 { 73 this->compositor _ = compositor;74 this->changedCompositor ();75 this->compositorName_ = name; 76 this->changedCompositorName(); 75 77 } 76 78 } 77 inline const std::string& getCompositor() const 78 { return this->compositor_; } 79 void changedCompositor(); 79 /// Returns the compositor's name. 80 inline const std::string& getCompositorName() const 81 { return this->compositorName_; } 82 void changedCompositorName(); 83 void changedCompositorName(Ogre::Viewport* viewport); 80 84 81 void setSceneManager(Ogre::SceneManager* scenemanager); 85 /// Sets the scenemanager (usually provided in the constructor, but can be set later). Shouldn't be changed once it's set. 86 inline void setSceneManager(Ogre::SceneManager* scenemanager) 87 { this->scenemanager_ = scenemanager; } 88 /// Returns the scene manager. 82 89 inline Ogre::SceneManager* getSceneManager() const 83 90 { return this->scenemanager_; } 84 91 85 void setParameter(const std::string& material, size_t technique, size_t pass, const std::string& parameter, float value); 86 void setParameter(const std::string& material, size_t technique, size_t pass, const std::string& parameter, int value); 92 virtual void cameraChanged(Ogre::Viewport* viewport, Ogre::Camera* oldCamera); 87 93 88 static bool _setParameter(const std::string& material, size_t technique, size_t pass, const std::string& parameter, float value); 89 static bool _setParameter(const std::string& material, size_t technique, size_t pass, const std::string& parameter, int value); 90 static float getParameter(const std::string& material, size_t technique, size_t pass, const std::string& parameter); 91 static bool getParameterIsFloat(const std::string& material, size_t technique, size_t pass, const std::string& parameter); 92 static bool getParameterIsInt (const std::string& material, size_t technique, size_t pass, const std::string& parameter); 93 static ParameterPointer* getParameterPointer(const std::string& material, size_t technique, size_t pass, const std::string& parameter); 94 void setParameter(size_t technique, size_t pass, const std::string& parameter, float value); 95 void setParameter(size_t technique, size_t pass, const std::string& parameter, int value); 96 97 virtual void notifyMaterialRender(Ogre::uint32 pass_id, Ogre::MaterialPtr& materialPtr); 94 98 95 99 private: 96 Ogre::SceneManager* scenemanager_; 97 Ogre::CompositorInstance* compositorInstance_; 98 bool bVisible_; 99 bool bLoadCompositor_; 100 bool bViewportInitialized_; 101 std::string compositor_; 102 std::string oldcompositor_; 100 static bool hasCgProgramManager(); 103 101 104 static MaterialMap parameters_s; 105 static bool bLoadedCgPlugin_s; 102 Ogre::SceneManager* scenemanager_; ///< The scenemanager for which the shader is active 103 Ogre::CompositorInstance* compositorInstance_; ///< The compositor instance representing the wrapped compositor 104 bool bVisible_; ///< True if the shader should be visible 105 bool bLoadCompositor_; ///< True if the compositor should be loaded (usually false if no graphics) 106 std::string compositorName_; ///< The name of the current compositor 107 std::string oldcompositorName_; ///< The name of the previous compositor (used to unregister) 108 109 private: 110 void addAsListener(); 111 112 /// Helper struct to store parameters for shader programs. 113 struct ParameterContainer 114 { 115 size_t technique_; ///< The ID of the technique 116 size_t pass_; ///< The ID of the pass 117 std::string parameter_; ///< The name of the parameter 118 119 int valueInt_; ///< The desired int value of the parameter 120 float valueFloat_; ///< The desired float value of the parameter 121 122 MT_Type::Value valueType_; ///< The type of the parameter (currently only int or float) 123 }; 124 125 std::list<ParameterContainer> parameters_; ///< The list of parameters that should be set on the next update 126 bool registeredAsListener_; ///< True if the shader should register itself as listener at the compositor 106 127 }; 107 128 } -
code/trunk/src/libraries/tools/Timer.cc
r7401 r8079 35 35 36 36 #include <set> 37 38 #include <boost/bimap.hpp> 37 39 38 40 #include "util/Clock.h" … … 41 43 #include "core/command/CommandExecutor.h" 42 44 #include "core/command/Functor.h" 45 #include "tools/interfaces/TimeFactorListener.h" 43 46 44 47 namespace orxonox 45 48 { 46 49 SetConsoleCommand("delay", &delay).argumentCompleter(1, autocompletion::command()); 50 SetConsoleCommand("delayreal", &delayreal).argumentCompleter(1, autocompletion::command()); 51 SetConsoleCommand("killdelay", &killdelay); 47 52 SetConsoleCommand("killdelays", &killdelays); 48 53 49 static std::set<Timer*> delaytimerset; 50 51 /** 52 @brief Console-command: Calls another console command after @a delay seconds. 54 static boost::bimap<unsigned int, Timer*> delaytimers; 55 static unsigned int delayHandleCounter = 0; 56 57 /** 58 @brief Console-command: Calls another console command after @a delay seconds (game time). 53 59 @param delay The delay in seconds 54 60 @param command The console command 55 */ 56 void delay(float delay, const std::string& command) 57 { 58 Timer* delaytimer = new Timer(); 59 delaytimerset.insert(delaytimer); 61 @return The handle of the delayed command, can be used as argument for killdelay() 62 */ 63 unsigned int delay(float delay, const std::string& command) 64 { 65 return addDelayedCommand(new Timer(), delay, command); 66 } 67 68 /** 69 @brief Console-command: Calls another console command after @a delay seconds (real time) 70 @param delay The delay in seconds 71 @param command The console command 72 @return The handle of the delayed command, can be used as argument for killdelay() 73 */ 74 unsigned int delayreal(float delay, const std::string& command) 75 { 76 return addDelayedCommand(new RealTimer(), delay, command); 77 } 78 79 /** 80 @brief Helper function, used by delay() and delayreal() to add a delayed command. 81 @param timer The timer which will execute the command 82 @param delay The delay in seconds 83 @param command The console command 84 @return The handle of the delayed command, can be used as argument for killdelay() 85 */ 86 unsigned int addDelayedCommand(Timer* timer, float delay, const std::string& command) 87 { 88 delaytimers.insert(boost::bimap<unsigned int, Timer*>::value_type(++delayHandleCounter, timer)); 60 89 61 90 const ExecutorStaticPtr& delayexecutor = createExecutor(createFunctor(&executeDelayedCommand)); 62 delayexecutor->setDefaultValues(delaytimer, command); 63 delaytimer->setTimer(delay, false, delayexecutor); 91 delayexecutor->setDefaultValues(timer, command); 92 timer->setTimer(delay, false, delayexecutor); 93 94 return delayHandleCounter; 64 95 } 65 96 … … 73 104 CommandExecutor::execute(command); 74 105 timer->destroy(); 75 delaytimers et.erase(timer);106 delaytimers.right.erase(timer); 76 107 } 77 108 … … 81 112 void killdelays() 82 113 { 83 for (std::set<Timer*>::iterator it = delaytimerset.begin(); it != delaytimerset.end(); ++it) 84 (*it)->destroy(); 85 86 delaytimerset.clear(); 114 for (boost::bimap<unsigned int, Timer*>::left_map::iterator it = delaytimers.left.begin(); it != delaytimers.left.end(); ++it) 115 it->second->destroy(); 116 117 delaytimers.clear(); 118 } 119 120 /** 121 @brief Console-command: Kills a delayed command with given handle. 122 */ 123 void killdelay(unsigned int handle) 124 { 125 boost::bimap<unsigned int, Timer*>::left_map::iterator it = delaytimers.left.find(handle); 126 if (it != delaytimers.left.end()) 127 { 128 it->second->destroy(); 129 delaytimers.left.erase(it); 130 } 87 131 } 88 132 … … 93 137 { 94 138 this->init(); 95 Register Object(Timer);139 RegisterRootObject(Timer); 96 140 } 97 141 … … 106 150 { 107 151 this->init(); 108 Register Object(Timer);152 RegisterRootObject(Timer); 109 153 110 154 this->setTimer(interval, bLoop, executor, bKillAfterCall); … … 123 167 124 168 this->time_ = 0; 169 } 170 171 /** 172 @brief Returns the current time factor of the game. 173 */ 174 float Timer::getTimeFactor() 175 { 176 return TimeFactorListener::getTimeFactor(); 125 177 } 126 178 … … 168 220 } 169 221 } 222 223 /////////////// 224 // RealTimer // 225 /////////////// 226 /// @copydoc Timer::Timer 227 RealTimer::RealTimer() 228 { 229 RegisterObject(RealTimer); 230 } 231 232 /// @copydoc Timer::Timer(float, bool, const ExecutorPtr&, bool) 233 RealTimer::RealTimer(float interval, bool bLoop, const ExecutorPtr& executor, bool bKillAfterCall) : Timer(interval, bLoop, executor, bKillAfterCall) 234 { 235 RegisterObject(RealTimer); 236 } 237 238 /// Returns always 1 because RealTimer doesn't depend on the game time. 239 float RealTimer::getTimeFactor() 240 { 241 return 1; 242 } 170 243 } -
code/trunk/src/libraries/tools/Timer.h
r7851 r8079 81 81 #include "core/OrxonoxClass.h" 82 82 #include "core/command/Executor.h" 83 #include "tools/interfaces/TimeFactorListener.h"84 83 85 84 namespace orxonox 86 85 { 87 void delay(float delay, const std::string& command); 88 void killdelays(); 86 unsigned int delay(float delay, const std::string& command); 87 unsigned int delayreal(float delay, const std::string& command); 88 89 unsigned int addDelayedCommand(Timer* timer, float delay, const std::string& command); 89 90 void executeDelayedCommand(Timer* timer, const std::string& command); 90 91 92 void killdelay(unsigned int handle); 93 void killdelays(); 94 91 95 /** 92 @brief Timer is a helper class that executes a function after a given amount of time.96 @brief Timer is a helper class that executes a function after a given amount of seconds in game-time. 93 97 94 98 @see See @ref TimerExample "Timer.h" for an example. 99 100 The time interval of Timer depends on the game time, hence it stops if the game is paused or runs 101 slower/faster if the game-speed is modified. See RealTimer for a timer class which doesn't depend 102 on the game time. 95 103 */ 96 class _ToolsExport Timer : public TimeFactorListener104 class _ToolsExport Timer : virtual public OrxonoxClass 97 105 { 98 106 public: … … 123 131 void run(); 124 132 125 /// Re-starts the Timer: The executor will be called after @a interval seconds.133 /// Re-starts the timer: The executor will be called after @a interval seconds. 126 134 inline void startTimer() 127 135 { this->bActive_ = true; this->time_ = this->interval_; } 128 /// Stops the Timer.136 /// Stops the timer. 129 137 inline void stopTimer() 130 138 { this->bActive_ = false; this->time_ = this->interval_; } 131 /// Pauses the Timer - it will continue with the actual state if you call unpauseTimer().139 /// Pauses the timer - it will continue with the actual state if you call unpauseTimer(). 132 140 inline void pauseTimer() 133 141 { this->bActive_ = false; } 134 /// Unpauses the Timer - continues with the given state.142 /// Unpauses the timer - continues with the given state. 135 143 inline void unpauseTimer() 136 144 { this->bActive_ = true; } 137 /// Returns true if the Timer is active (neither stopped nor paused).145 /// Returns true if the timer is active (neither stopped nor paused). 138 146 inline bool isActive() const 139 147 { return this->bActive_; } 140 /// Returns the remaining time until the Timer calls the executor.148 /// Returns the remaining time until the timer calls the executor. 141 149 inline float getRemainingTime() const 142 150 { return static_cast<float>(this->time_ / 1000000.0f); } 143 /// Increases the remaining time of the Timer by the given amount of time (in seconds).151 /// Increases the remaining time of the timer by the given amount of time (in seconds). 144 152 inline void addTime(float time) 145 153 { if (time > 0.0f) this->time_ += static_cast<long long>(time * 1000000.0f); } 146 /// Decreases the remaining time of the Timer by the given amount of time (in seconds)154 /// Decreases the remaining time of the timer by the given amount of time (in seconds) 147 155 inline void removeTime(float time) 148 156 { if (time > 0.0f) this->time_ -= static_cast<long long>(time * 1000000.0f); } … … 156 164 void tick(const Clock& time); 157 165 166 protected: 167 virtual float getTimeFactor(); 168 158 169 private: 159 170 void init(); … … 163 174 long long interval_; //!< The time-interval in micro seconds 164 175 bool bLoop_; //!< If true, the executor gets called every @a interval seconds 165 bool bActive_; //!< If true, the Timer ticks and calls the executor if the time's up176 bool bActive_; //!< If true, the timer ticks and calls the executor if the time's up 166 177 bool bKillAfterCall_; //!< If true the timer gets deleted after it expired and called the executor 167 178 168 179 long long time_; //!< Internal variable, counting the time untill the next executor-call 169 180 }; 181 182 /** 183 @brief RealTimer is a helper class that executes a function after a given amount of seconds in real-time. 184 185 The time interval of RealTimer doesn't depend on the game time, it will also call the function 186 if the game is paused. See Timer for a timer class that depends on the game time. 187 */ 188 class _ToolsExport RealTimer : public Timer 189 { 190 public: 191 RealTimer(); 192 RealTimer(float interval, bool bLoop, const ExecutorPtr& executor, bool bKillAfterCall = false); 193 194 protected: 195 virtual float getTimeFactor(); 196 }; 170 197 } 171 198 -
code/trunk/src/libraries/tools/ToolsPrereqs.h
r7163 r8079 85 85 class Mesh; 86 86 class ParticleInterface; 87 class RealTimer; 87 88 class ResourceCollection; 88 89 class ResourceLocation; -
code/trunk/src/modules/designtools/ScreenshotManager.cc
r7284 r8079 25 25 { 26 26 Ogre::RenderWindow* pRenderWindow = GraphicsManager::getInstance().getRenderWindow(); 27 int gridSize = 3;28 std::string fileExtension = ".png";29 bool overlayFlag = true;30 27 31 28 //set file extension for the Screenshot files 32 mFileExtension = fileExtension;29 this->mFileExtension_ = ".png"; 33 30 // the gridsize 34 mGridSize = gridSize;31 this->mGridSize_ = 3; 35 32 // flag for overlay rendering 36 mDisableOverlays = overlayFlag;33 this->mDisableOverlays_ = true; 37 34 //get current window size 38 mWindowWidth= pRenderWindow->getWidth();39 mWindowHeight= pRenderWindow->getHeight();35 this->mWindowWidth_ = pRenderWindow->getWidth(); 36 this->mWindowHeight_ = pRenderWindow->getHeight(); 40 37 //create temporary texture 41 mTempTex = Ogre::TextureManager::getSingleton().createManual("ScreenShotTex", 42 Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, 43 mWindowWidth, mWindowHeight,0, Ogre::PF_B8G8R8, Ogre::TU_RENDERTARGET); 38 this->mTempTex_ = Ogre::TextureManager::getSingleton().createManual("ScreenShotTex", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, this->mWindowWidth_, this->mWindowHeight_, 0, Ogre::PF_B8G8R8, Ogre::TU_RENDERTARGET); 44 39 45 40 //get The current Render Target of the temp Texture 46 mRT = mTempTex->getBuffer()->getRenderTarget();41 this->mRT_ = this->mTempTex_->getBuffer()->getRenderTarget(); 47 42 48 43 //HardwarePixelBufferSharedPtr to the Buffer of the temp Texture 49 mBuffer = mTempTex->getBuffer();44 this->mBuffer_ = this->mTempTex_->getBuffer(); 50 45 51 46 //create PixelBox 52 uint8_t* data_ = new uint8_t[(mWindowWidth * mGridSize) * (mWindowHeight * mGridSize) * 3];53 mFinalPicturePB = Ogre::PixelBox(mWindowWidth * mGridSize,mWindowHeight * mGridSize,1,Ogre::PF_B8G8R8,data_);47 uint8_t* data_ = new uint8_t[(this->mWindowWidth_ * this->mGridSize_) * (this->mWindowHeight_ * this->mGridSize_) * 3]; 48 this->mFinalPicturePB_ = Ogre::PixelBox(this->mWindowWidth_ * this->mGridSize_, this->mWindowHeight_ * this->mGridSize_, 1, Ogre::PF_B8G8R8, data_); 54 49 55 50 } … … 63 58 64 59 65 /* Creates a screenshot with the given camera. 66 * @param camera Pointer to the camera "looking at" the scene of interest 67 * @param fileName the filename of the screenshot file. 60 /** 61 @brief 62 Creates a screenshot with the given camera. 63 @param camera 64 Pointer to the camera "looking at" the scene of interest 65 @param fileName 66 the filename of the screenshot file. 68 67 */ 69 68 void ScreenshotManager::makeScreenshot() const … … 73 72 74 73 //Remove all viewports, so the added Viewport(camera) ist the only 75 mRT ->removeAllViewports();76 mRT ->addViewport(camera);74 mRT_->removeAllViewports(); 75 mRT_->addViewport(camera); 77 76 78 77 //set the viewport settings 79 Ogre::Viewport *vp = mRT ->getViewport(0);78 Ogre::Viewport *vp = mRT_->getViewport(0); 80 79 vp->setClearEveryFrame(true); 81 80 vp->setOverlaysEnabled(false); … … 85 84 86 85 // we disable overlay rendering if it is set in config file and the viewport setting is enabled 87 if(mDisableOverlays && enableOverlayFlag)86 if(mDisableOverlays_ && enableOverlayFlag) 88 87 GraphicsManager::getInstance().getViewport()->setOverlaysEnabled(false); 89 88 90 if(mGridSize <= 1)89 if(mGridSize_ <= 1) 91 90 { 92 91 // Simple case where the contents of the screen are taken directly 93 92 // Also used when an invalid value is passed within gridSize (zero or negative grid size) 94 mRT ->update(); //render93 mRT_->update(); //render 95 94 96 95 //write the file on the Harddisk 97 mRT ->writeContentsToFile(fileName + "." + mFileExtension);96 mRT_->writeContentsToFile(fileName + "." + mFileExtension_); 98 97 } 99 98 else … … 105 104 106 105 // compute the Stepsize for the drid 107 Ogre::Real frustumGridStepHorizontal = (originalFrustumRight * 2) / mGridSize ;108 Ogre::Real frustumGridStepVertical = (originalFrustumTop * 2) / mGridSize ;106 Ogre::Real frustumGridStepHorizontal = (originalFrustumRight * 2) / mGridSize_; 107 Ogre::Real frustumGridStepVertical = (originalFrustumTop * 2) / mGridSize_; 109 108 110 109 // process each grid 111 110 Ogre::Real frustumLeft, frustumRight, frustumTop, frustumBottom; 112 for (unsigned int nbScreenshots = 0; nbScreenshots < mGridSize * mGridSize; nbScreenshots++)111 for (unsigned int nbScreenshots = 0; nbScreenshots < mGridSize_ * mGridSize_; nbScreenshots++) 113 112 { 114 int y = nbScreenshots / mGridSize ;115 int x = nbScreenshots - y * mGridSize ;113 int y = nbScreenshots / mGridSize_; 114 int x = nbScreenshots - y * mGridSize_; 116 115 117 116 // Shoggoth frustum extents setting … … 127 126 // ignore time duration between frames 128 127 Ogre::Root::getSingletonPtr()->clearEventTimes(); 129 mRT ->update(); //render128 mRT_->update(); //render 130 129 131 130 //define the current 132 Ogre::Box subBox = Ogre::Box(x* mWindowWidth ,y * mWindowHeight,x * mWindowWidth + mWindowWidth, y * mWindowHeight + mWindowHeight);131 Ogre::Box subBox = Ogre::Box(x* mWindowWidth_,y * mWindowHeight_,x * mWindowWidth_ + mWindowWidth_, y * mWindowHeight_ + mWindowHeight_); 133 132 //copy the content from the temp buffer into the final picture PixelBox 134 133 //Place the tempBuffer content at the right position 135 mBuffer ->blitToMemory(mFinalPicturePB.getSubVolume(subBox));134 mBuffer_->blitToMemory(mFinalPicturePB_.getSubVolume(subBox)); 136 135 137 136 } … … 142 141 Ogre::Image finalImage; //declare the final Image Object 143 142 //insert the PixelBox data into the Image Object 144 finalImage = finalImage.loadDynamicImage(static_cast<unsigned char*>(mFinalPicturePB .data), mFinalPicturePB.getWidth(),mFinalPicturePB.getHeight(),Ogre::PF_B8G8R8);143 finalImage = finalImage.loadDynamicImage(static_cast<unsigned char*>(mFinalPicturePB_.data), mFinalPicturePB_.getWidth(), mFinalPicturePB_.getHeight(),Ogre::PF_B8G8R8); 145 144 // Save the Final image to a file 146 finalImage.save(fileName + "." + mFileExtension );145 finalImage.save(fileName + "." + mFileExtension_); 147 146 148 147 } … … 157 156 } 158 157 158 /** 159 @brief 160 Set the size of the grid. 161 @param size 162 The size of the grid. 163 */ 164 void ScreenshotManager::setGridSize(unsigned int size) 165 { 166 if(size == this->mGridSize_) 167 return; 168 169 this->mGridSize_ = size; 170 // New PixelBox for the changed size. 171 uint8_t* data_ = new uint8_t[(this->mWindowWidth_ * this->mGridSize_) * (this->mWindowHeight_ * this->mGridSize_) * 3]; 172 this->mFinalPicturePB_ = Ogre::PixelBox(this->mWindowWidth_ * this->mGridSize_, this->mWindowHeight_ * this->mGridSize_, 1, Ogre::PF_B8G8R8, data_); 173 } 174 175 /** 176 @brief 177 Get a timestamp for the curent time instant. 178 @return 179 Returns a string with the timestamp. 180 */ 159 181 std::string ScreenshotManager::getTimestamp() 160 182 { -
code/trunk/src/modules/designtools/ScreenshotManager.h
r7163 r8079 20 20 { 21 21 22 23 /* Class encapsulates Screenshot functionality and provides a method for making multi grid screenshots. 24 * pRenderWindow: Pointer to the render window. This could be "mWindow" from the ExampleApplication, 25 * the window automatically created obtained when calling 26 * Ogre::Root::getSingletonPtr()->initialise(false) and retrieved by calling 27 * "Ogre::Root::getSingletonPtr()->getAutoCreatedWindow()", or the manually created 28 * window from calling "mRoot->createRenderWindow()". 29 * gridSize: The magnification factor. A 2 will create a 2x2 grid, doubling the size of the 30 screenshot. A 3 will create a 3x3 grid, tripling the size of the screenshot. 31 * fileExtension: The extension of the screenshot file name, hence the type of graphics file to generate. 32 * To generate "MyScreenshot.png" this parameter would contain ".png". 22 /** 23 @brief 24 Class encapsulates Screenshot functionality and provides a method for making multi grid screenshots. 33 25 */ 34 26 class ScreenshotManager : public OrxonoxClass, public Singleton<ScreenshotManager> … … 36 28 friend class Singleton<ScreenshotManager>; 37 29 38 public:39 ScreenshotManager();40 ~ScreenshotManager();30 public: 31 ScreenshotManager(); 32 virtual ~ScreenshotManager(); 41 33 42 /* Creates a screenshot with the given camera. 43 * @param camera Pointer to the camera "looking at" the scene of interest 44 * @param fileName the filename of the screenshot file. 45 */ 46 void makeScreenshot() const; 34 void makeScreenshot() const; //!< Creates a screenshot with the given camera. 47 35 48 static void makeScreenshot_s() 49 { getInstance().makeScreenshot(); } 36 /** 37 @brief Creates a screenshot with a given size. 38 @param size Size is factor by which the current screen size is scaled. 39 */ 40 static void makeScreenshot_s(unsigned int size) 41 { getInstance().setGridSize(size); getInstance().makeScreenshot(); } 50 42 51 protected: 52 static std::string getTimestamp(); 43 void setGridSize(unsigned int size); //!< Set the size of the grid. 53 44 54 std::string mFileExtension; 55 unsigned int mGridSize, mWindowWidth, mWindowHeight; 56 bool mDisableOverlays; 57 //temp texture with current screensize 58 Ogre::TexturePtr mTempTex; 59 Ogre::RenderTexture* mRT; 60 Ogre::HardwarePixelBufferSharedPtr mBuffer; 61 //PixelBox for a large Screenshot, if grid size is > 1 62 Ogre::PixelBox mFinalPicturePB; 63 uint8_t* data_; 45 protected: 46 static std::string getTimestamp(); 64 47 65 static ScreenshotManager* singletonPtr_s; 48 std::string mFileExtension_; 49 unsigned int mGridSize_; //!< The magnification factor. A 2 will create a 2x2 grid, doubling the size of the screenshot. A 3 will create a 3x3 grid, tripling the size of the screenshot. 50 unsigned int mWindowWidth_, mWindowHeight_; 51 bool mDisableOverlays_; 52 //! temp texture with current screensize 53 Ogre::TexturePtr mTempTex_; 54 Ogre::RenderTexture* mRT_; 55 Ogre::HardwarePixelBufferSharedPtr mBuffer_; 56 //! PixelBox for a large Screenshot, if grid size is > 1 57 Ogre::PixelBox mFinalPicturePB_; 58 uint8_t* data_; 59 60 static ScreenshotManager* singletonPtr_s; 66 61 }; 67 62 -
code/trunk/src/modules/designtools/SkyboxGenerator.cc
r7284 r8079 59 59 60 60 this->setConfigValues(); 61 t akeScreenshot_ = false;61 this->takeScreenshot_ = false; 62 62 this->captionsRemoved_ = false; 63 63 } -
code/trunk/src/modules/notifications/NotificationManager.cc
r7552 r8079 103 103 { 104 104 // Destroys all NotificationQueues that have been registered with the NotificationManager. 105 for(std::map<const std::string, NotificationQueue*>::iterator it = this->queues_.begin(); it != this->queues_.end(); it++) 105 std::map<const std::string, NotificationQueue*>::iterator it = this->queues_.begin(); 106 while(it != this->queues_.end()) 107 { 106 108 it->second->destroy(true); 109 it = this->queues_.begin(); 110 } 107 111 108 112 this->queues_.clear(); … … 298 302 } 299 303 304 COUT(4) << "NotificationListener '" << identifier << "' unregistered with the NotificationManager." << std::endl; 305 300 306 // Remove the NotificationListener from the list of NotificationListeners. 301 307 this->listenerList_.erase(listener); 302 308 // Remove the Notifications list that was associated with the input NotificationListener. 303 309 this->notificationLists_.erase(identifier); 304 305 COUT(4) << "NotificationListener unregistered with the NotificationManager." << std::endl;306 310 } 307 311 … … 361 365 bool NotificationManager::registerQueue(NotificationQueue* queue) 362 366 { 367 COUT(4) << "NotificationQueue '" << queue->getName() << "' registered with the NotificationManager." << std::endl; 363 368 return this->queues_.insert(std::pair<const std::string, NotificationQueue*>(queue->getName(), queue)).second; 364 369 } … … 372 377 void NotificationManager::unregisterQueue(NotificationQueue* queue) 373 378 { 379 COUT(4) << "NotificationQueue '" << queue->getName() << "' unregistered with the NotificationManager." << std::endl; 374 380 this->queues_.erase(queue->getName()); 375 381 } -
code/trunk/src/modules/notifications/NotificationQueue.cc
r7489 r8079 137 137 GUIManager::getInstance().getLuaState()->doString("NotificationLayer.removeQueue(\"" + this->getName() + "\")"); 138 138 139 COUT(3) << "NotificationQueue '" << this->getName() << "' destroyed." << std::endl; 140 139 141 this->OrxonoxClass::destroy(); 140 142 } … … 167 169 while(it != this->ordering_.upper_bound(&this->timeLimit_)) 168 170 { 169 std::multiset<NotificationContainer*, NotificationContainerCompare>::iterator temp = it; 170 it++; 171 this->remove(temp); // Remove the Notifications that have expired. 171 this->remove(it); // Remove the Notifications that have expired. 172 it = this->ordering_.begin(); 172 173 } 173 174 … … 248 249 if(GameMode::showsGraphics()) 249 250 GUIManager::getInstance().getLuaState()->doString("NotificationLayer.pushNotification(\"" + this->getName() + "\", \"" + notification->getMessage() + "\")"); 251 252 COUT(5) << "Notification \"" << notification->getMessage() << "\" pushed to NotificationQueue '" << this->getName() << "'" << endl; 250 253 } 251 254 … … 259 262 // Get all the NotificationContainers that were sent the same time the NotificationContainer we want to pop was sent. 260 263 std::pair<std::multiset<NotificationContainer*, NotificationContainerCompare>::iterator, std::multiset<NotificationContainer*, NotificationContainerCompare>::iterator> iterators = this->ordering_.equal_range(container); 264 261 265 // Iterate through all suspects and remove the container as soon as we find it. 262 266 for(std::multiset<NotificationContainer*, NotificationContainerCompare>::iterator it = iterators.first; it != iterators.second; it++) … … 264 268 if(container == *it) 265 269 { 270 COUT(5) << "Notification \"" << (*it)->notification->getMessage() << "\" popped from NotificationQueue '" << this->getName() << "'" << endl; 266 271 this->ordering_.erase(it); 267 272 break; … … 290 295 // Get the index at which the Notification is. 291 296 std::vector<NotificationContainer*>::difference_type index = it - this->notifications_.begin (); 297 298 COUT(5) << "Notification \"" << (*it)->notification->getMessage() << "\" removed from NotificationQueue '" << this->getName() << "'" << endl; 299 292 300 this->ordering_.erase(containerIterator); 293 301 this->notifications_.erase(it); … … 310 318 void NotificationQueue::clear(bool noGraphics) 311 319 { 320 COUT(4) << "Clearing NotificationQueue " << this->getName() << "." << endl; 312 321 this->ordering_.clear(); 313 322 // Delete all NotificationContainers in the list. … … 372 381 /** 373 382 @brief 374 Produces all targets of the NotificationQueue concatinated as string, with kommas (',') as seperators.383 Produces all targets of the NotificationQueue concatinated as string, with commas (',') as seperators. 375 384 @return 376 385 Returns the targets as a string. -
code/trunk/src/modules/objects/triggers/DistanceMultiTrigger.cc
r7601 r8079 54 54 55 55 this->distance_ = 100.0f; 56 this->targetName_ = BLANKSTRING;56 this->targetName_ = ""; 57 57 this->singleTargetMode_ = false; 58 58 } … … 181 181 { 182 182 // If the targetname is no blank string single-target mode is enabled. 183 if(targetname .compare(BLANKSTRING) != 0)183 if(targetname != "") 184 184 this->singleTargetMode_ = true; 185 185 else -
code/trunk/src/modules/objects/triggers/DistanceTrigger.cc
r7601 r8079 50 50 this->distance_ = 100; 51 51 this->targetMask_.exclude(Class(BaseObject)); 52 this->targetName_ = BLANKSTRING;52 this->targetName_ = ""; 53 53 this->singleTargetMode_ = false; 54 54 } -
code/trunk/src/modules/objects/triggers/DistanceTrigger.h
r7601 r8079 70 70 71 71 inline void setTargetName(const std::string& targetname) 72 { if(targetname .compare(BLANKSTRING) != 0) this->singleTargetMode_ = true; else this->singleTargetMode_ = false; this->targetName_ = targetname; }72 { if(targetname != "") this->singleTargetMode_ = true; else this->singleTargetMode_ = false; this->targetName_ = targetname; } 73 73 inline const std::string& getTargetName(void) 74 74 { return this->targetName_; } -
code/trunk/src/modules/overlays/OverlaysPrereqs.h
r7655 r8079 89 89 class KillMessage; 90 90 class LastManStandingInfos; 91 class PauseNotice; 91 92 class TeamBaseMatchScore; 92 93 class UnderAttackHealthBar; -
code/trunk/src/modules/overlays/hud/CMakeLists.txt
r7655 r8079 16 16 GametypeFadingMessage.cc 17 17 LastManStandingInfos.cc 18 PauseNotice.cc 18 19 ) -
code/trunk/src/modules/pickup/PickupRepresentation.cc
r7548 r8079 156 156 { 157 157 COUT(4) << "PickupRepresentation: No spawner representation found." << std::endl; 158 if(this->spawnerTemplate_ == BLANKSTRING)158 if(this->spawnerTemplate_ == "") 159 159 { 160 160 COUT(4) << "PickupRepresentation: Spawner template is empty." << std::endl; -
code/trunk/src/modules/questsystem/QuestItem.cc
r7456 r8079 87 87 void QuestItem::setId(const std::string & id) 88 88 { 89 if(id .compare(BLANKSTRING) == 0) // Checks whether the id is a valid id.89 if(id == "") // Checks whether the id is a valid id. 90 90 { 91 91 COUT(2) << "Invalid id. QuestItem id {" << id << "} could not be set." << std::endl; -
code/trunk/src/modules/questsystem/QuestManager.cc
r7552 r8079 91 91 /** 92 92 @brief 93 Registers a Quest with the QuestManager to make it globally access able.93 Registers a Quest with the QuestManager to make it globally accessible. 94 94 Uses it's id to make sure to be able to be identify and retrieve it later. 95 95 @param quest … … 129 129 /** 130 130 @brief 131 Registers a QuestHint with the QuestManager to make it globally access able.131 Registers a QuestHint with the QuestManager to make it globally accessible. 132 132 Uses it's id to make sure to be able to be identify and retrieve it later. 133 133 @param hint … … 178 178 Quest* QuestManager::findQuest(const std::string & questId) 179 179 { 180 if(questId .compare(BLANKSTRING) == 1) // Check vor validity of the given id.180 if(questId == "") // Check for validity of the given id. 181 181 ThrowException(Argument, "Invalid questId."); 182 182 … … 207 207 QuestHint* QuestManager::findHint(const std::string & hintId) 208 208 { 209 if(hintId .compare(BLANKSTRING) == 1) // Check vor validity of the given id.209 if(hintId == "") // Check for validity of the given id. 210 210 ThrowException(Argument, "Invalid hintId."); 211 211 -
code/trunk/src/modules/questsystem/effects/AddQuestHint.cc
r7552 r8079 86 86 bool AddQuestHint::setHintId(const std::string & id) 87 87 { 88 if(id .compare(BLANKSTRING) == 0)88 if(id == "") 89 89 { 90 90 COUT(2) << "Invalid id. QuestItem id {" << id << "} could not be set." << std::endl; -
code/trunk/src/modules/questsystem/effects/ChangeQuestStatus.cc
r7456 r8079 81 81 bool ChangeQuestStatus::setQuestId(const std::string & id) 82 82 { 83 if(id .compare(BLANKSTRING) == 0)83 if(id == "") 84 84 { 85 85 COUT(2) << "Invalid id. QuestItem id {" << id << "} could not be set." << std::endl; -
code/trunk/src/orxonox/CameraManager.cc
r7879 r8079 29 29 #include "CameraManager.h" 30 30 31 #include <cassert> 32 31 33 #include <OgreSceneManager.h> 32 34 #include <OgreViewport.h> 33 35 #include <OgreCompositorManager.h> 34 36 35 #include "util/StringUtils.h"36 37 #include "util/ScopedSingletonManager.h" 37 38 #include "core/GameMode.h" 38 39 #include "core/GraphicsManager.h" 39 #include "core/GUIManager.h"40 40 #include "core/ObjectList.h" 41 41 #include "tools/Shader.h" 42 42 #include "graphics/Camera.h" 43 #include "Scene.h"44 43 45 44 namespace orxonox … … 48 47 49 48 CameraManager::CameraManager() 50 : viewport_(GraphicsManager::getInstance().getViewport())51 49 { 52 50 assert(GameMode::showsGraphics()); … … 55 53 CameraManager::~CameraManager() 56 54 { 57 GUIManager::getInstance().setCamera(0);58 55 } 59 56 … … 95 92 if (!this->cameraList_.empty()) 96 93 this->cameraList_.front()->setFocus(); 94 else 95 this->useCamera(NULL); 97 96 } 98 97 else … … 102 101 void CameraManager::useCamera(Ogre::Camera* camera) 103 102 { 104 // This workaround is needed to avoid weird behaviour with active compositors while 105 // switching the camera (like freezing the image) 106 // 107 // Last known Ogre version needing this workaround: 108 // 1.4.8 109 // 1.7.2 110 111 // deactivate all compositors 112 { 113 Ogre::ResourceManager::ResourceMapIterator iterator = Ogre::CompositorManager::getSingleton().getResourceIterator(); 114 while (iterator.hasMoreElements()) 115 Ogre::CompositorManager::getSingleton().setCompositorEnabled(this->viewport_, iterator.getNext()->getName(), false); 116 } 117 118 this->viewport_->setCamera(camera); 119 GUIManager::getInstance().setCamera(camera); 120 121 // reactivate all visible compositors 122 { 123 for (ObjectList<Shader>::iterator it = ObjectList<Shader>::begin(); it != ObjectList<Shader>::end(); ++it) 124 it->updateVisibility(); 125 } 103 GraphicsManager::getInstance().setCamera(camera); 126 104 } 127 105 } -
code/trunk/src/orxonox/CameraManager.h
r6746 r8079 38 38 #include "OrxonoxPrereqs.h" 39 39 40 #include <cassert>41 40 #include <list> 42 41 #include "util/OgreForwardRefs.h" 43 42 #include "util/Singleton.h" 44 43 #include "core/OrxonoxClass.h" 45 #include "core/SmartPtr.h"46 44 47 45 namespace orxonox … … 65 63 66 64 std::list<Camera*> cameraList_; 67 Ogre::Viewport* viewport_;68 65 69 66 static CameraManager* singletonPtr_s; -
code/trunk/src/orxonox/ChatInputHandler.cc
r7284 r8079 28 28 29 29 #include "ChatInputHandler.h" 30 31 #include <cassert> 32 #include <string> 33 #include <CEGUIWindow.h> 34 #include <CEGUIWindowManager.h> 35 #include <elements/CEGUIListbox.h> 36 #include <elements/CEGUIListboxItem.h> 37 #include <elements/CEGUIListboxTextItem.h> 38 30 39 #include "util/ScopedSingletonManager.h" 31 40 #include "core/CoreIncludes.h" 32 41 #include "core/GUIManager.h" 33 #include "core/CorePrereqs.h"34 42 #include "core/command/ConsoleCommand.h" 35 #include <CEGUIWindow.h> 36 #include <elements/CEGUIListbox.h> 37 #include <elements/CEGUIListboxItem.h> 38 #include <elements/CEGUIListboxTextItem.h> 39 #include <CEGUIWindowManager.h> 40 #include <string> 43 #include "core/input/InputBuffer.h" 44 #include "core/input/InputManager.h" 45 #include "core/input/InputState.h" 46 #include "network/Host.h" 47 48 #include "PlayerManager.h" 49 #include "infos/PlayerInfo.h" 41 50 42 51 namespace orxonox … … 72 81 this->inputState = InputManager::getInstance().createInputState( "chatinput", false, false, InputStatePriority::Dynamic ); 73 82 this->inputState->setKeyHandler(this->inpbuf); 83 } 84 85 ChatInputHandler::~ChatInputHandler() 86 { 87 /* Clean up */ 88 InputManager::getInstance().destroyState("chatinput"); 89 delete this->inpbuf; 74 90 } 75 91 … … 125 141 // reds 126 142 for( i = 0; i < NumberOfColors/3; ++i ) 127 { this->text_colors[ i ] = new CEGUI::colour( red, green, blue ); 128 assert( this->text_colors[ i ] ); 143 { this->text_colors[ i ] = CEGUI::colour( red, green, blue ); 129 144 green += 0.2f, blue += 0.2f; 130 145 } … … 133 148 red = 0.5, green = 1, blue = 0.5; 134 149 for( ; i < NumberOfColors*2/3; ++i ) 135 { this->text_colors[ i ] = new CEGUI::colour( red, green, blue ); 136 assert( this->text_colors[ i ] ); 150 { this->text_colors[ i ] = CEGUI::colour( red, green, blue ); 137 151 red += 0.2f, blue += 0.2f; 138 152 } … … 141 155 red = 0.5, green = 0.5, blue = 1; 142 156 for( ; i < NumberOfColors; ++i ) 143 { this->text_colors[ i ] = new CEGUI::colour( red, green, blue ); 144 assert( this->text_colors[ i ] ); 157 { this->text_colors[ i ] = CEGUI::colour( red, green, blue ); 145 158 red += 0.2f, green += 0.2f; 146 159 } … … 196 209 197 210 /* set the color according to the hash */ 198 tocolor->setTextColours( *(this->text_colors[ hash ]));211 tocolor->setTextColours( this->text_colors[ hash ] ); 199 212 } 200 213 -
code/trunk/src/orxonox/ChatInputHandler.h
r7163 r8079 30 30 #define _ChatInputHandler_H__ 31 31 32 /* std includes */ 33 #include <deque> 32 #include <OrxonoxPrereqs.h> 33 34 34 #include <string> 35 #include <fstream>36 #include <iostream>37 #include <cassert>38 35 #include <CEGUIForwardRefs.h> 36 #include <CEGUIcolour.h> 39 37 40 /* project includes */ 41 #include <OrxonoxPrereqs.h> 42 #include <core/BaseObject.h> 43 #include <core/PathConfig.h> 44 45 #include "core/input/InputBuffer.h" 46 #include "core/input/InputManager.h" 47 #include "core/input/InputState.h" 48 49 #include <network/ChatListener.h> 50 #include <PlayerManager.h> 51 #include <infos/PlayerInfo.h> 52 53 #include "../libraries/network/Host.h" 54 #include <util/Singleton.h> 38 #include "util/Singleton.h" 39 #include "network/ChatListener.h" 55 40 56 41 namespace orxonox // tolua_export … … 70 55 /* colors for nickname coloring */ 71 56 static const int NumberOfColors = 10; 72 CEGUI::colour *text_colors[ NumberOfColors ];57 CEGUI::colour text_colors[ NumberOfColors ]; 73 58 74 59 /** input state */ … … 110 95 /** constructor */ 111 96 ChatInputHandler(); 97 ~ChatInputHandler(); 112 98 friend class Singleton<ChatInputHandler>; 113 99 -
code/trunk/src/orxonox/LevelInfo.h
r7804 r8079 109 109 @return Returns the XML-filename (including *.oxw extension) of the Level. 110 110 */ 111 inline const std::string& getXMLFilename(void) { return this->xmlfilename_; } // tolua_export111 inline const std::string& getXMLFilename(void) const { return this->xmlfilename_; } // tolua_export 112 112 113 113 protected: … … 212 212 { 213 213 bool operator() (const LevelInfoItem* lhs, const LevelInfoItem* rhs) const 214 { return getLowercase(lhs->getName()).compare(getLowercase(rhs->getName())) < 0; } 214 { 215 if(getLowercase(lhs->getName()).compare(getLowercase(rhs->getName())) == 0) 216 return getLowercase(lhs->getXMLFilename()).compare(getLowercase(rhs->getXMLFilename())) < 0; 217 return getLowercase(lhs->getName()).compare(getLowercase(rhs->getName())) < 0; 218 } 215 219 }; 216 220 -
code/trunk/src/orxonox/LevelManager.cc
r7839 r8079 75 75 LevelManager::~LevelManager() 76 76 { 77 // Delete all the LevelInfoItem objects because the LevelManager created them 78 std::set<LevelInfoItem*, LevelInfoCompare>::iterator it = availableLevels_.begin(); 79 for (; it != availableLevels_.end(); ++it) 80 delete *it; 77 81 } 78 82 … … 237 241 void LevelManager::compileAvailableLevelList() 238 242 { 243 // Get all files matching the level criteria 239 244 Ogre::StringVectorPtr levels = Resource::findResourceNames("*.oxw"); 240 // Iterate over all *.oxw level files. 245 246 // We only want to load as little as possible 247 ClassTreeMask mask; 248 mask.exclude(Class(BaseObject)); 249 mask.include(Class(LevelInfo)); 250 251 // Iterate over all the found *.oxw files 241 252 COUT(3) << "Loading LevelInfos..." << std::endl; 253 std::set<std::string> names; 242 254 for (Ogre::StringVector::const_iterator it = levels->begin(); it != levels->end(); ++it) 243 255 { 244 // TODO: Replace with tag?256 // TODO: Replace with tag? 245 257 if (it->find("old/") != 0) 246 258 { 247 size_t pos = it->find(".oxw");259 LevelInfoItem* info = NULL; 248 260 249 261 // Load the LevelInfo object from the level file. 250 bool infoExists = false;251 262 XMLFile file = XMLFile(*it); 252 ClassTreeMask mask = ClassTreeMask(); 253 mask.exclude(ClassIdentifier<BaseObject>::getIdentifier()); 254 mask.include(ClassIdentifier<LevelInfo>::getIdentifier()); 255 Loader::load(&file, mask, false); 256 // Iterate over all LevelInfos. 263 Loader::load(&file, mask, false, true); 264 265 // Find the LevelInfo object we've just loaded (if there was one) 257 266 for(ObjectList<LevelInfo>::iterator item = ObjectList<LevelInfo>::begin(); item != ObjectList<LevelInfo>::end(); ++item) 267 if(item->getXMLFilename() == *it) 268 info = item->copy(); 269 270 // We don't need the loaded stuff anymore 271 Loader::unload(&file); 272 273 if(info == NULL) 258 274 { 259 LevelInfoItem* info = item->copy(); 260 if(info->getXMLFilename() == *it) // If the LevelInfo for this level exists we insert it into the list of available levels. 261 { 262 this->availableLevels_.insert(info); 263 infoExists = true; 264 } 275 // Create a default LevelInfoItem object that merely contains the name 276 std::string filenameWOExtension = it->substr(0, it->find(".oxw")); 277 info = new LevelInfoItem(filenameWOExtension, *it); 265 278 } 266 Loader::unload(&file, mask); 267 if(!infoExists) // If the LevelInfo for this level doesn't exist, we create a new one and insert it into the list of available levels. 268 this->availableLevels_.insert(new LevelInfoItem(it->substr(0, pos), *it)); 279 280 // Warn about levels with the same name. 281 if(!names.insert(info->getName()).second) 282 COUT(2) << "Warning: Multiple levels (" << info->getXMLFilename() << ") with name '" << info->getName() << "' found!" << std::endl; 283 284 // Warn about multiple items so that it gets fixed quickly 285 if(availableLevels_.find(info) != availableLevels_.end()) 286 { 287 COUT(2) << "Warning: Multiple levels (" << info->getXMLFilename() << ") with same name '" << info->getName() << "' and filename found! Exluding..." << std::endl; 288 // Delete LevelInfoItem to avoid a dangling pointer 289 delete info; 290 } 291 else 292 this->availableLevels_.insert(info); 269 293 } 270 294 } -
code/trunk/src/orxonox/LevelManager.h
r7804 r8079 112 112 // Helpers to allow fast access to the availableLevels list. 113 113 unsigned int nextIndex_; //! The next expected index to be accessed. 114 std::set<LevelInfoItem*, LevelInfoCompare>::iterator nextLevel_; //! The nex expected Level to be accessed.114 std::set<LevelInfoItem*, LevelInfoCompare>::iterator nextLevel_; //! The next expected Level to be accessed. 115 115 116 116 // config values -
code/trunk/src/orxonox/controllers/HumanController.cc
r7863 r8079 61 61 SetConsoleCommand("HumanController", "cycleNavigationFocus", &HumanController::cycleNavigationFocus).addShortcut(); 62 62 SetConsoleCommand("HumanController", "releaseNavigationFocus", &HumanController::releaseNavigationFocus).addShortcut(); 63 SetConsoleCommand("HumanController", "myposition", &HumanController::myposition ).addShortcut(); 63 64 64 65 CreateUnloadableFactory(HumanController); … … 200 201 void HumanController::toggleGodMode() 201 202 { 202 HumanController::getLocalControllerSingleton()->setGodMode( !HumanController::getLocalControllerSingleton()->getGodMode() ); 203 if (HumanController::localController_s) 204 HumanController::localController_s->setGodMode(!HumanController::localController_s->getGodMode()); 205 } 206 207 void HumanController::myposition() 208 { 209 if (HumanController::localController_s && HumanController::localController_s->controllableEntity_) 210 { 211 const Vector3& position = HumanController::localController_s->controllableEntity_->getPosition(); 212 const Quaternion& orientation = HumanController::localController_s->controllableEntity_->getOrientation(); 213 214 COUT(0) << "position=\"" << position.x << ", " << position.y << ", " << position.z << "\" "; 215 COUT(0) << "orientation=\"" << orientation.w << ", " << orientation.x << ", " << orientation.y << ", " << orientation.z << "\"" << std::endl; 216 } 203 217 } 204 218 -
code/trunk/src/orxonox/controllers/HumanController.h
r7533 r8079 73 73 static void suicide(); 74 74 static void toggleGodMode(); 75 static void myposition(); 75 76 76 77 static void addBots(unsigned int amount); -
code/trunk/src/orxonox/gamestates/GSLevel.cc
r7879 r8079 46 46 #include "LevelManager.h" 47 47 #include "PlayerManager.h" 48 #include "GSRoot.h" 48 49 49 50 namespace orxonox … … 55 56 56 57 SetConsoleCommand(__CC_startMainMenu_name, &GSLevel::startMainMenu).deactivate(); 57 SetConsoleCommand(__CC_changeGame_name, &GSLevel::changeGame).defaultValues( BLANKSTRING).deactivate();58 SetConsoleCommand(__CC_changeGame_name, &GSLevel::changeGame).defaultValues("").deactivate(); 58 59 59 60 GSLevel::GSLevel(const GameStateInfo& info) … … 156 157 COUT(0) << "Loading level..." << std::endl; 157 158 startFile_ = new XMLFile(LevelManager::getInstance().getDefaultLevel()); 158 Loader::open(startFile_);159 bool loaded = Loader::open(startFile_); 159 160 160 161 Core::getInstance().updateLastLevelTimestamp(); 162 if(!loaded) 163 GSRoot::delayedStartMainMenu(); 161 164 } 162 165 … … 202 205 /*static*/ void GSLevel::changeGame(const std::string& level) 203 206 { 204 if(level != BLANKSTRING)207 if(level != "") 205 208 LevelManager::getInstance().setDefaultLevel(level); 206 209 -
code/trunk/src/orxonox/gamestates/GSMainMenu.cc
r7876 r8079 57 57 static const std::string __CC_setMainMenuSoundPath_name = "setMMSoundPath"; 58 58 59 SetConsoleCommand(__CC_startStandalone_name, &GSMainMenu::startStandalone).defaultValues( BLANKSTRING).deactivate();60 SetConsoleCommand(__CC_startServer_name, &GSMainMenu::startServer ).defaultValues( BLANKSTRING).deactivate();61 SetConsoleCommand(__CC_startClient_name, &GSMainMenu::startClient ).defaultValues( BLANKSTRING).deactivate();62 SetConsoleCommand(__CC_startDedicated_name, &GSMainMenu::startDedicated ).defaultValues( BLANKSTRING).deactivate();59 SetConsoleCommand(__CC_startStandalone_name, &GSMainMenu::startStandalone).defaultValues("").deactivate(); 60 SetConsoleCommand(__CC_startServer_name, &GSMainMenu::startServer ).defaultValues("").deactivate(); 61 SetConsoleCommand(__CC_startClient_name, &GSMainMenu::startClient ).defaultValues("").deactivate(); 62 SetConsoleCommand(__CC_startDedicated_name, &GSMainMenu::startDedicated ).defaultValues("").deactivate(); 63 63 SetConsoleCommand(__CC_setMainMenuSoundPath_name, &GSMainMenu::setMainMenuSoundPath).hide(); 64 64 … … 96 96 { 97 97 // show main menu 98 GraphicsManager::getInstance().setCamera(this->camera_); 98 99 GUIManager::getInstance().showGUI("MainMenu", true); 99 GUIManager::getInstance().setCamera(this->camera_);100 100 GUIManager::getInstance().setBackgroundImage("MainMenuBackground", "Background"); 101 GraphicsManager::getInstance().setCamera(this->camera_);102 101 103 102 InputManager::getInstance().enterState("MainMenuHackery"); … … 129 128 InputManager::getInstance().leaveState("MainMenuHackery"); 130 129 131 G UIManager::getInstance().setCamera(0);130 GraphicsManager::getInstance().setCamera(0); 132 131 GUIManager::getInstance().setBackgroundImage(""); 133 132 GUIManager::hideGUI("MainMenu"); 134 GraphicsManager::getInstance().setCamera(0);135 133 136 134 ModifyConsoleCommand(__CC_startStandalone_name).deactivate(); … … 178 176 void GSMainMenu::startStandalone(const std::string& level) 179 177 { 180 if(level != BLANKSTRING)178 if(level != "") 181 179 LevelManager::getInstance().setDefaultLevel(level); 182 180 … … 194 192 void GSMainMenu::startServer(const std::string& level) 195 193 { 196 if(level != BLANKSTRING)194 if(level != "") 197 195 LevelManager::getInstance().setDefaultLevel(level); 198 196 … … 210 208 void GSMainMenu::startClient(const std::string& destination) 211 209 { 212 if(destination != BLANKSTRING)210 if(destination != "") 213 211 Client::getInstance()->setDestination(destination, NETWORK_PORT); 214 212 … … 226 224 void GSMainMenu::startDedicated(const std::string& level) 227 225 { 228 if(level != BLANKSTRING)226 if(level != "") 229 227 LevelManager::getInstance().setDefaultLevel(level); 230 228 -
code/trunk/src/orxonox/gamestates/GSMainMenu.h
r7876 r8079 53 53 void setMainMenuSoundPath(const std::string& path); 54 54 55 static void startStandalone(const std::string& level = BLANKSTRING); //!< Start a level in standalone mode.56 static void startServer(const std::string& level = BLANKSTRING); //!< Start a level in server mode.57 static void startClient(const std::string& destination = BLANKSTRING); //!< Connect to a game as client.58 static void startDedicated(const std::string& level = BLANKSTRING); //!< Start a level in dedicated mode.55 static void startStandalone(const std::string& level = ""); //!< Start a level in standalone mode. 56 static void startServer(const std::string& level = ""); //!< Start a level in server mode. 57 static void startClient(const std::string& destination = ""); //!< Connect to a game as client. 58 static void startDedicated(const std::string& level = ""); //!< Start a level in dedicated mode. 59 59 static void startIOConsole(); 60 60 -
code/trunk/src/orxonox/gamestates/GSRoot.cc
r7284 r8079 38 38 #include "tools/interfaces/Tickable.h" 39 39 40 #include "GSLevel.h" 41 40 42 namespace orxonox 41 43 { … … 43 45 44 46 static const std::string __CC_setTimeFactor_name = "setTimeFactor"; 47 static const std::string __CC_setPause_name = "setPause"; 45 48 static const std::string __CC_pause_name = "pause"; 49 50 /*static*/ bool GSRoot::startMainMenu_s = false; 46 51 47 52 SetConsoleCommand("printObjects", &GSRoot::printObjects).hide(); 48 53 SetConsoleCommand(__CC_setTimeFactor_name, &GSRoot::setTimeFactor).accessLevel(AccessLevel::Master).defaultValues(1.0); 54 SetConsoleCommand(__CC_setPause_name, &GSRoot::setPause ).accessLevel(AccessLevel::Master).hide(); 49 55 SetConsoleCommand(__CC_pause_name, &GSRoot::pause ).accessLevel(AccessLevel::Master); 50 56 … … 83 89 84 90 ModifyConsoleCommand(__CC_setTimeFactor_name).setObject(this); 91 ModifyConsoleCommand(__CC_setPause_name).setObject(this); 85 92 ModifyConsoleCommand(__CC_pause_name).setObject(this); 86 93 } … … 89 96 { 90 97 ModifyConsoleCommand(__CC_setTimeFactor_name).setObject(0); 98 ModifyConsoleCommand(__CC_setPause_name).setObject(0); 91 99 ModifyConsoleCommand(__CC_pause_name).setObject(0); 92 100 } … … 94 102 void GSRoot::update(const Clock& time) 95 103 { 104 if(startMainMenu_s) 105 { 106 delayedStartMainMenu(); 107 startMainMenu_s = false; 108 } 109 96 110 for (ObjectList<Timer>::iterator it = ObjectList<Timer>::begin(); it; ) 97 111 { … … 157 171 } 158 172 173 void GSRoot::setPause(bool pause) 174 { 175 if (GameMode::isMaster()) 176 { 177 if (pause != this->bPaused_) 178 this->pause(); 179 } 180 } 181 159 182 void GSRoot::changedTimeFactor(float factor_new, float factor_old) 160 183 { … … 162 185 callStaticNetworkFunction(&TimeFactorListener::setTimeFactor, CLIENTID_UNKNOWN, factor_new); 163 186 } 187 188 /*static*/ void GSRoot::delayedStartMainMenu(void) 189 { 190 if(!startMainMenu_s) 191 startMainMenu_s = true; 192 else 193 GSLevel::startMainMenu(); 194 } 195 164 196 } -
code/trunk/src/orxonox/gamestates/GSRoot.h
r7172 r8079 51 51 // when taking the function address. 52 52 void setTimeFactor(float factor); 53 void setPause(bool pause); 53 54 void pause(); 55 56 static void delayedStartMainMenu(void); 54 57 55 58 protected: … … 59 62 bool bPaused_; 60 63 float timeFactorPauseBackup_; 64 static bool startMainMenu_s; 61 65 }; 62 66 } -
code/trunk/src/orxonox/gametypes/Gametype.cc
r7801 r8079 30 30 31 31 #include "util/Math.h" 32 #include "core/Core.h" 32 33 #include "core/CoreIncludes.h" 33 34 #include "core/ConfigValueIncludes.h" … … 386 387 if (allplayersready && hashumanplayers) 387 388 { 388 this->gtinfo_->startCountdown_ = this->initialStartCountdown_; 389 // If in developer's mode, there is no start countdown. 390 if(Core::getInstance().inDevMode()) 391 this->gtinfo_->startCountdown_ = 0; 392 else 393 this->gtinfo_->startCountdown_ = this->initialStartCountdown_; 389 394 this->gtinfo_->bStartCountdownRunning_ = true; 390 395 } -
code/trunk/src/orxonox/graphics/Camera.cc
r7163 r8079 69 69 this->bHasFocus_ = false; 70 70 this->bDrag_ = false; 71 this->nearClipDistance_ = 1;72 71 this->lastDtLagged_ = false; 73 72 … … 75 74 76 75 this->setConfigValues(); 76 77 this->configvaluecallback_changedFovAndAspectRatio(); 77 78 this->configvaluecallback_changedNearClipDistance(); 78 79 } … … 82 83 if (this->isInitialized()) 83 84 { 84 if (GUIManager::getInstance().getCamera() == this->camera_)85 GUIManager::getInstance().setCamera(NULL);86 85 this->releaseFocus(); 87 86 … … 99 98 void Camera::setConfigValues() 100 99 { 101 SetConfigValue(nearClipDistance_, 1.0f).callback(this, &Camera::configvaluecallback_changedNearClipDistance); 100 SetConfigValue(fov_, 80.0f) 101 .description("Horizontal field of view in degrees") 102 .callback(this, &Camera::configvaluecallback_changedFovAndAspectRatio); 103 SetConfigValue(aspectRatio_, 1.0f) 104 .description("Aspect ratio of pixels (width / height)") 105 .callback(this, &Camera::configvaluecallback_changedFovAndAspectRatio); 106 SetConfigValue(nearClipDistance_, 1.0f) 107 .description("Distance from the camera where close objects will be clipped") 108 .callback(this, &Camera::configvaluecallback_changedNearClipDistance); 109 } 110 111 /** 112 @brief Update FOV and the aspect ratio of the camera after the config values or the window's size have changed. 113 */ 114 void Camera::configvaluecallback_changedFovAndAspectRatio() 115 { 116 // the aspect ratio of the window (width / height) has to be multiplied with the pixels aspect ratio (this->aspectRatio_) 117 float aspectRatio = this->aspectRatio_ * this->getWindowWidth() / this->getWindowHeight(); 118 this->camera_->setAspectRatio(aspectRatio); 119 120 // Since we use horizontal FOV, we have to calculate FOVy by dividing by the aspect ratio and using some tangents 121 Radian fovy(2 * atan(tan(Degree(this->fov_).valueRadians() / 2) / aspectRatio)); 122 this->camera_->setFOVy(fovy); 102 123 } 103 124 … … 105 126 { 106 127 this->camera_->setNearClipDistance(this->nearClipDistance_); 128 } 129 130 /** 131 @brief Inherited from WindowEventListener. 132 */ 133 void Camera::windowResized(unsigned int newWidth, unsigned int newHeight) 134 { 135 this->configvaluecallback_changedFovAndAspectRatio(); 107 136 } 108 137 -
code/trunk/src/orxonox/graphics/Camera.h
r6417 r8079 33 33 34 34 #include "util/OgreForwardRefs.h" 35 #include "core/WindowEventListener.h" 35 36 #include "tools/interfaces/Tickable.h" 36 37 #include "tools/interfaces/TimeFactorListener.h" … … 39 40 namespace orxonox 40 41 { 41 class _OrxonoxExport Camera : public StaticEntity, public Tickable, public TimeFactorListener 42 class _OrxonoxExport Camera : public StaticEntity, public Tickable, public TimeFactorListener, public WindowEventListener 42 43 { 43 44 friend class CameraManager; … … 66 67 void removeFocus(); 67 68 void setFocus(); 69 70 void configvaluecallback_changedFovAndAspectRatio(); 68 71 void configvaluecallback_changedNearClipDistance(); 72 73 void windowResized(unsigned int newWidth, unsigned int newHeight); 69 74 70 75 Ogre::Camera* camera_; … … 74 79 bool bDrag_; 75 80 bool lastDtLagged_; 81 float fov_; 82 float aspectRatio_; 76 83 }; 77 84 } -
code/trunk/src/orxonox/graphics/GlobalShader.cc
r5781 r8079 61 61 SUPER(GlobalShader, XMLPort, xmlelement, mode); 62 62 63 XMLPortParamExtern(GlobalShader, Shader, &this->shader_, "compositor", setCompositor , getCompositor, xmlelement, mode);63 XMLPortParamExtern(GlobalShader, Shader, &this->shader_, "compositor", setCompositorName, getCompositorName, xmlelement, mode); 64 64 } 65 65 … … 67 67 { 68 68 registerVariable(this->bVisible_, VariableDirection::ToClient, new NetworkCallback<GlobalShader>(this, &GlobalShader::changedVisibility)); 69 registerVariable(const_cast<std::string&>(this->shader_.getCompositor ()), VariableDirection::ToClient, new NetworkCallback<Shader>(&this->shader_, &Shader::changedCompositor));69 registerVariable(const_cast<std::string&>(this->shader_.getCompositorName()), VariableDirection::ToClient, new NetworkCallback<Shader>(&this->shader_, &Shader::changedCompositorName)); 70 70 } 71 71 -
code/trunk/src/orxonox/graphics/GlobalShader.h
r7163 r8079 53 53 private: 54 54 void registerVariables(); 55 void changedCompositor();56 55 57 56 Shader shader_; -
code/trunk/src/orxonox/graphics/Model.cc
r7183 r8079 60 60 void Model::setConfigValues() 61 61 { 62 SetConfigValueExternal(bGlobalEnableLod_, "GraphicsSettings", "enableM odelLoD", true)62 SetConfigValueExternal(bGlobalEnableLod_, "GraphicsSettings", "enableMeshLoD", true) 63 63 .description("Enable level of detail for models"); 64 64 } -
code/trunk/src/orxonox/items/Engine.cc
r7547 r8079 102 102 void Engine::setConfigValues() 103 103 { 104 SetConfigValue(blurStrength_, 3.0f); 104 SetConfigValueExternal(bEnableMotionBlur_, "GraphicsSettings", "enableMotionBlur", true) 105 .description("Enable or disable the motion blur effect when moving very fast") 106 .callback(this, &Engine::changedEnableMotionBlur); 107 SetConfigValueExternal(blurStrength_, "GraphicsSettings", "blurStrength", 3.0f) 108 .description("Defines the strength of the motion blur effect"); 105 109 } 106 110 … … 204 208 this->ship_->setSteeringDirection(Vector3::ZERO); 205 209 206 if ( !this->boostBlur_ && this->ship_->hasLocalController() && this->ship_->hasHumanController())210 if (this->bEnableMotionBlur_ && !this->boostBlur_ && this->ship_->hasLocalController() && this->ship_->hasHumanController()) 207 211 { 208 212 this->boostBlur_ = new Shader(this->ship_->getScene()->getSceneManager()); 209 this->boostBlur_->setCompositor ("Radial Blur");213 this->boostBlur_->setCompositorName("Radial Blur"); 210 214 } 211 215 212 216 if (this->boostBlur_ && this->maxSpeedFront_ != 0 && this->boostFactor_ != 1) 213 this->boostBlur_->setParameter("Ogre/Compositor/Radial_Blur", 0, 0, "sampleStrength", this->blurStrength_ * clamp((-velocity.z - this->maxSpeedFront_) / ((this->boostFactor_ - 1) * this->maxSpeedFront_), 0.0f, 1.0f)); 217 { 218 float blur = this->blurStrength_ * clamp((-velocity.z - this->maxSpeedFront_) / ((this->boostFactor_ - 1) * this->maxSpeedFront_), 0.0f, 1.0f); 219 220 this->boostBlur_->setVisible(blur > 0); 221 this->boostBlur_->setParameter(0, 0, "sampleStrength", blur); 222 } 214 223 } 215 224 … … 257 266 return this->ship_->getWorldPosition(); 258 267 } 268 269 void Engine::changedEnableMotionBlur() 270 { 271 if (!this->bEnableMotionBlur_) 272 { 273 this->boostBlur_->destroy(); 274 this->boostBlur_ = 0; 275 } 276 } 259 277 } -
code/trunk/src/orxonox/items/Engine.h
r7552 r8079 127 127 void registerVariables(); 128 128 void networkcallback_shipID(); 129 void changedEnableMotionBlur(); 129 130 130 131 SpaceShip* ship_; … … 150 151 Shader* boostBlur_; 151 152 float blurStrength_; 153 bool bEnableMotionBlur_; 152 154 }; 153 155 } -
code/trunk/src/orxonox/overlays/InGameConsole.cc
r7689 r8079 60 60 const float CHAR_WIDTH = 7.45f; // fix this please - determine the char-width dynamically 61 61 62 SetConsoleCommand("InGameConsole", "openConsole", &InGameConsole::openConsole) .addShortcut();63 SetConsoleCommand("InGameConsole", "closeConsole", &InGameConsole::closeConsole) .addShortcut();62 SetConsoleCommand("InGameConsole", "openConsole", &InGameConsole::openConsole); 63 SetConsoleCommand("InGameConsole", "closeConsole", &InGameConsole::closeConsole); 64 64 65 65 ManageScopedSingleton(InGameConsole, ScopeID::Graphics, false); -
code/trunk/src/orxonox/sound/AmbientSound.cc
r7856 r8079 29 29 #include "AmbientSound.h" 30 30 31 #include "core/CoreIncludes.h" 31 32 #include "core/GameMode.h" 32 33 #include "core/Resource.h" … … 38 39 : bPlayOnLoad_(false) 39 40 { 41 RegisterObject(AmbientSound); 42 40 43 // Ambient sounds always fade in 41 44 this->setVolume(0);
Note: See TracChangeset
for help on using the changeset viewer.