mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-19 21:23:52 +00:00
- moved the windows to use layouts
- various gui-work - begun binding the GUI into Monster script - updated to latest Monster source (0.11 alpha) git-svn-id: https://openmw.svn.sourceforge.net/svnroot/openmw/trunk@87 ea6a568a-9f4f-0410-981a-c910a81bb256
This commit is contained in:
parent
9530ae0526
commit
2995f8b99f
74 changed files with 1331 additions and 267 deletions
6
Makefile
6
Makefile
|
@ -65,13 +65,13 @@ all: openmw esmtool niftool bsatool bored
|
||||||
cpp: cpp_ogre.o cpp_avcodec.o cpp_bullet.o
|
cpp: cpp_ogre.o cpp_avcodec.o cpp_bullet.o
|
||||||
|
|
||||||
cpp_ogre.o: $(ogre_cpp_files)
|
cpp_ogre.o: $(ogre_cpp_files)
|
||||||
$(OGCC) -c $<
|
$(OGCC) -o $@ -c $<
|
||||||
|
|
||||||
cpp_avcodec.o: $(avcodec_cpp_files)
|
cpp_avcodec.o: $(avcodec_cpp_files)
|
||||||
$(AVGCC) -c $<
|
$(AVGCC) -o $@ -c $<
|
||||||
|
|
||||||
cpp_bullet.o: $(bullet_cpp_files)
|
cpp_bullet.o: $(bullet_cpp_files)
|
||||||
$(BGCC) -c $<
|
$(BGCC) -o $@ -c $<
|
||||||
|
|
||||||
objs/%.o: %.d
|
objs/%.o: %.d
|
||||||
dirname $@ | xargs mkdir -p
|
dirname $@ | xargs mkdir -p
|
||||||
|
|
|
@ -150,7 +150,7 @@ extern "C" int32_t bullet_init()
|
||||||
// ------- SET UP THE PLAYER -------
|
// ------- SET UP THE PLAYER -------
|
||||||
|
|
||||||
// Create the player collision shape.
|
// Create the player collision shape.
|
||||||
float width = 50;
|
float width = 30;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
float height = 50;
|
float height = 50;
|
||||||
|
|
BIN
media_mygui/bigbars.png
Normal file
BIN
media_mygui/bigbars.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 387 B |
|
@ -10,7 +10,7 @@
|
||||||
<Property key="FontName" value = "MyGUI_CoreFont.18" />
|
<Property key="FontName" value = "MyGUI_CoreFont.18" />
|
||||||
<Property key="FontHeight" value = "18" />
|
<Property key="FontHeight" value = "18" />
|
||||||
<Property key="AlignText" value = "ALIGN_DEFAULT" />
|
<Property key="AlignText" value = "ALIGN_DEFAULT" />
|
||||||
<Property key="Colour" value = "0 0 0" />
|
<Property key="Colour" value = "0.7 0.7 0.7" />
|
||||||
|
|
||||||
<BasisSkin type="SimpleText" offset = "0 0 16 16" align = "ALIGN_STRETCH"/>
|
<BasisSkin type="SimpleText" offset = "0 0 16 16" align = "ALIGN_STRETCH"/>
|
||||||
</Skin>
|
</Skin>
|
||||||
|
|
|
@ -14,8 +14,11 @@
|
||||||
<List file="openmw_text.skin.xml" group="General"/>
|
<List file="openmw_text.skin.xml" group="General"/>
|
||||||
<List file="openmw_windows.skin.xml" group="General"/>
|
<List file="openmw_windows.skin.xml" group="General"/>
|
||||||
<List file="openmw_button.skin.xml" group="General"/>
|
<List file="openmw_button.skin.xml" group="General"/>
|
||||||
|
<List file="openmw_box.skin.xml" group="General"/>
|
||||||
|
<List file="openmw_progress.skin.xml" group="General"/>
|
||||||
<List file="openmw_hud_energybar.skin.xml" group="General"/>
|
<List file="openmw_hud_energybar.skin.xml" group="General"/>
|
||||||
<List file="openmw_hud_box.skin.xml" group="General"/>
|
<List file="openmw_hud_box.skin.xml" group="General"/>
|
||||||
|
<List file="openmw_mainmenu_skin.xml" group="General"/>
|
||||||
</MyGUI>
|
</MyGUI>
|
||||||
|
|
||||||
</MyGUI>
|
</MyGUI>
|
||||||
|
|
|
@ -24,6 +24,14 @@
|
||||||
<Code hide="1104"/>
|
<Code hide="1104"/>
|
||||||
</Font>
|
</Font>
|
||||||
|
|
||||||
|
<Font name="daedric36" source="daedric.ttf" size="36" resolution="72" antialias_colour="false" space_width="4" tab_count="4" spacer="5">
|
||||||
|
<Code range="33 98"/>
|
||||||
|
</Font>
|
||||||
|
|
||||||
|
<Font name="daedric_orig36" source="daedric_orig.ttf" size="36" resolution="72" antialias_colour="false" space_width="4" tab_count="4" spacer="5">
|
||||||
|
<Code range="33 98"/>
|
||||||
|
</Font>
|
||||||
|
|
||||||
<Font name="cards" default_height="17" source="magiccards.ttf" size="18" resolution="50" antialias_colour="false" space_width="4" tab_width="8" cursor_width="2" distance="5" offset_height="0">
|
<Font name="cards" default_height="17" source="magiccards.ttf" size="18" resolution="50" antialias_colour="false" space_width="4" tab_width="8" cursor_width="2" distance="5" offset_height="0">
|
||||||
<Code range="33 98"/>
|
<Code range="33 98"/>
|
||||||
</Font>
|
</Font>
|
||||||
|
|
60
media_mygui/openmw_box.skin.xml
Normal file
60
media_mygui/openmw_box.skin.xml
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!-- This file defines the box you see around many GUI elements, such
|
||||||
|
as around the sections of the stats window, or around popup info windows -->
|
||||||
|
|
||||||
|
<MyGUI type="Skin">
|
||||||
|
<!-- Box borders -->
|
||||||
|
<Skin name="IB_T" size="512 2" texture="menu_thin_border_top.dds">
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 512 2">
|
||||||
|
<State name="normal" offset = "0 0 512 2"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
<Skin name="IB_B" size="512 2" texture="menu_thin_border_bottom.dds">
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 512 2">
|
||||||
|
<State name="normal" offset = "0 0 512 2"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
<Skin name="IB_L" size="2 512" texture="menu_thin_border_left.dds">
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 2 512">
|
||||||
|
<State name="normal" offset = "0 0 2 512"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
<Skin name="IB_R" size="2 512" texture="menu_thin_border_right.dds">
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 2 512">
|
||||||
|
<State name="normal" offset = "0 0 2 512"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
<Skin name="IB_TL" size="2 2" texture="menu_thin_border_top_left_corner.dds">
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 2 2">
|
||||||
|
<State name="normal" offset = "0 0 2 2"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
<Skin name="IB_TR" size="2 2" texture="menu_thin_border_top_right_corner.dds">
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 2 2">
|
||||||
|
<State name="normal" offset = "0 0 2 2"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
<Skin name="IB_BL" size="2 2" texture="menu_thin_border_bottom_left_corner.dds">
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 2 2">
|
||||||
|
<State name="normal" offset = "0 0 2 2"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
<Skin name="IB_BR" size="2 2" texture="menu_thin_border_bottom_right_corner.dds">
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 2 2">
|
||||||
|
<State name="normal" offset = "0 0 2 2"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
|
||||||
|
<!-- Main box definition -->
|
||||||
|
<Skin name="MW_Box" size="516 516">
|
||||||
|
<Child type="Widget" skin="IB_T" offset="2 0 512 2" align="ALIGN_TOP ALIGN_HSTRETCH"/>
|
||||||
|
<Child type="Widget" skin="IB_B" offset="2 514 512 2" align="ALIGN_BOTTOM ALIGN_HSTRETCH"/>
|
||||||
|
<Child type="Widget" skin="IB_L" offset="0 2 2 512" align="ALIGN_LEFT ALIGN_VSTRETCH"/>
|
||||||
|
<Child type="Widget" skin="IB_R" offset="514 2 2 512" align="ALIGN_RIGHT ALIGN_VSTRETCH"/>
|
||||||
|
<Child type="Widget" skin="IB_TL" offset="0 0 2 2" align="ALIGN_TOP ALIGN_LEFT"/>
|
||||||
|
<Child type="Widget" skin="IB_TR" offset="514 0 2 2" align="ALIGN_TOP ALIGN_RIGHT"/>
|
||||||
|
<Child type="Widget" skin="IB_BL" offset="0 514 2 2" align="ALIGN_BOTTOM ALIGN_LEFT"/>
|
||||||
|
<Child type="Widget" skin="IB_BR" offset="514 514 2 2" align="ALIGN_BOTTOM ALIGN_RIGHT"/>
|
||||||
|
</Skin>
|
||||||
|
</MyGUI>
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<MyGUI type="Skin">
|
<MyGUI type="Skin">
|
||||||
<!-- The 'box' frame that surrounds various HUD items -->
|
<!-- The 'box' frame that surrounds various HUD items and other elements -->
|
||||||
<Skin name="HUD_Box" size="40 40" texture="menu_icon_equip.dds">
|
<Skin name="HUD_Box" size="40 40" texture="menu_icon_equip.dds">
|
||||||
<BasisSkin type="SubSkin" offset="0 0 40 2" align= "ALIGN_TOP ALIGN_HSTRETCH">
|
<BasisSkin type="SubSkin" offset="0 0 40 2" align= "ALIGN_TOP ALIGN_HSTRETCH">
|
||||||
<State name="normal" offset="2 2 40 2"/>
|
<State name="normal" offset="2 2 40 2"/>
|
||||||
|
@ -15,7 +15,6 @@
|
||||||
<BasisSkin type="SubSkin" offset="38 2 2 36" align= "ALIGN_RIGHT ALIGN_VSTRETCH">
|
<BasisSkin type="SubSkin" offset="38 2 2 36" align= "ALIGN_RIGHT ALIGN_VSTRETCH">
|
||||||
<State name="normal" offset="40 4 2 36"/>
|
<State name="normal" offset="40 4 2 36"/>
|
||||||
</BasisSkin>
|
</BasisSkin>
|
||||||
|
|
||||||
<!-- The interior of the box -->
|
<!-- The interior of the box -->
|
||||||
<Child type="Widget" skin="BlackBG" offset="2 2 36 36" align="ALIGN_STRETCH" name="Client"/>
|
<Child type="Widget" skin="BlackBG" offset="2 2 36 36" align="ALIGN_STRETCH" name="Client"/>
|
||||||
</Skin>
|
</Skin>
|
||||||
|
|
|
@ -27,24 +27,19 @@
|
||||||
</Skin>
|
</Skin>
|
||||||
|
|
||||||
<!-- Progress bar track, various colors -->
|
<!-- Progress bar track, various colors -->
|
||||||
<Skin name = "MW_BarTrack_Red" size = "16 8" texture = "menu_bar_red.dds" >
|
<Skin name = "MW_BarTrack_Red" size = "4 8" texture = "smallbars.png" >
|
||||||
<BasisSkin type="MainSkin" offset = "0 0 16 8" align = "ALIGN_STRETCH">
|
<BasisSkin type="MainSkin" offset = "0 0 4 8" align = "ALIGN_STRETCH">
|
||||||
<State name="normal" offset = "0 8 16 8"/>
|
<State name="normal" offset = "0 0 4 8"/>
|
||||||
</BasisSkin>
|
</BasisSkin>
|
||||||
</Skin>
|
</Skin>
|
||||||
<Skin name = "MW_BarTrack_Green" size = "16 8" texture = "menu_bar_green.dds" >
|
<Skin name = "MW_BarTrack_Green" size = "4 8" texture = "smallbars.png" >
|
||||||
<BasisSkin type="MainSkin" offset = "0 0 16 8" align = "ALIGN_STRETCH">
|
<BasisSkin type="MainSkin" offset = "0 0 4 8" align = "ALIGN_STRETCH">
|
||||||
<State name="normal" offset = "0 8 16 8"/>
|
<State name="normal" offset = "0 16 4 8"/>
|
||||||
</BasisSkin>
|
</BasisSkin>
|
||||||
</Skin>
|
</Skin>
|
||||||
<Skin name = "MW_BarTrack_Blue" size = "16 8" texture = "menu_bar_blue.dds" >
|
<Skin name = "MW_BarTrack_Blue" size = "4 8" texture = "smallbars.png" >
|
||||||
<BasisSkin type="MainSkin" offset = "0 0 16 8" align = "ALIGN_STRETCH">
|
<BasisSkin type="MainSkin" offset = "0 0 4 8" align = "ALIGN_STRETCH">
|
||||||
<State name="normal" offset = "0 8 16 8"/>
|
<State name="normal" offset = "0 8 4 8"/>
|
||||||
</BasisSkin>
|
|
||||||
</Skin>
|
|
||||||
<Skin name = "MW_BarTrack_Gray" size = "16 8" texture = "menu_bar_gray.dds" >
|
|
||||||
<BasisSkin type="MainSkin" offset = "0 0 16 8" align = "ALIGN_STRETCH">
|
|
||||||
<State name="normal" offset = "0 8 16 8"/>
|
|
||||||
</BasisSkin>
|
</BasisSkin>
|
||||||
</Skin>
|
</Skin>
|
||||||
|
|
||||||
|
@ -74,12 +69,4 @@
|
||||||
<Child type="Widget" skin="BlackBG" offset = "2 2 60 8" align = "ALIGN_STRETCH" name="Client"/>
|
<Child type="Widget" skin="BlackBG" offset = "2 2 60 8" align = "ALIGN_STRETCH" name="Client"/>
|
||||||
</Skin>
|
</Skin>
|
||||||
|
|
||||||
<Skin name="MW_EnergyBar_Gray" size="64 12">
|
|
||||||
<Property key="TrackSkin" value = "MW_BarTrack_Gray" />
|
|
||||||
<Property key="TrackWidth" value = "1" />
|
|
||||||
|
|
||||||
<Child type="Widget" skin="MW_BarFrame" offset="0 0 64 12" align="ALIGN_STRETCH"/>
|
|
||||||
<Child type="Widget" skin="BlackBG" offset = "2 2 60 8" align = "ALIGN_STRETCH" name="Client"/>
|
|
||||||
</Skin>
|
|
||||||
|
|
||||||
</MyGUI>
|
</MyGUI>
|
||||||
|
|
17
media_mygui/openmw_mainmenu_layout.xml
Normal file
17
media_mygui/openmw_mainmenu_layout.xml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<MyGUI type="Layout">
|
||||||
|
<!-- The entire screen -->
|
||||||
|
<Widget type="Widget" layer="MainMenu" position="0 0 300 300" name="_Main">
|
||||||
|
<!-- Centered box containing the buttons -->
|
||||||
|
<Widget type="Widget" position="86 12 128 276" align="Center">
|
||||||
|
<!-- Menu boxes -->
|
||||||
|
<Widget type="Button" skin="ReturnButton" position="0 0 128 64" align="Top Left" name="Return"/>
|
||||||
|
<Widget type="Button" skin="NewButton" position="0 46 128 64" align="Top Left" name="New"/>
|
||||||
|
<Widget type="Button" skin="SaveButton" position="0 92 128 64" align="Top Left" name="Save"/>
|
||||||
|
<Widget type="Button" skin="LoadButton" position="0 138 128 64" align="Top Left" name="Load"/>
|
||||||
|
<Widget type="Button" skin="OptionsButton" position="0 184 128 64" align="Top Left" name="Options"/>
|
||||||
|
<Widget type="Button" skin="ExitButton" position="0 230 128 64" align="Top Left" name="Exit"/>
|
||||||
|
</Widget>
|
||||||
|
</Widget>
|
||||||
|
</MyGUI>
|
34
media_mygui/openmw_mainmenu_skin.xml
Normal file
34
media_mygui/openmw_mainmenu_skin.xml
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<MyGUI type="Skin">
|
||||||
|
<Skin name="ReturnButton" size="128 64" texture="menu_return.dds">
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 128 64">
|
||||||
|
<State name="normal" offset = "0 0 128 64"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
<Skin name="NewButton" size="128 64" texture="menu_newgame.dds">
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 128 64">
|
||||||
|
<State name="normal" offset = "0 0 128 64"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
<Skin name="SaveButton" size="128 64" texture="menu_savegame.dds">
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 128 64">
|
||||||
|
<State name="normal" offset = "0 0 128 64"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
<Skin name="LoadButton" size="128 64" texture="menu_loadgame.dds">
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 128 64">
|
||||||
|
<State name="normal" offset = "0 0 128 64"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
<Skin name="OptionsButton" size="128 64" texture="menu_options.dds">
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 128 64">
|
||||||
|
<State name="normal" offset = "0 0 128 64"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
<Skin name="ExitButton" size="128 64" texture="menu_exitgame.dds">
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 128 64">
|
||||||
|
<State name="normal" offset = "0 0 128 64"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
</MyGUI>
|
9
media_mygui/openmw_map_window_layout.xml
Normal file
9
media_mygui/openmw_map_window_layout.xml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<MyGUI type="Layout">
|
||||||
|
<Widget type="Window" skin="MW_Window" layer="Windows" position="0 0 300 300" name="_Main">
|
||||||
|
<Widget type="StaticImage" skin="StaticImage" position="0 0 284 264" align="ALIGN_STRETCH" name="Map"/>
|
||||||
|
<Widget type="StaticImage" skin="StaticImage" position="126 116 32 32" align="Center" name="Compass"/>
|
||||||
|
<Widget type="Button" skin="MW_Button" position="213 233 61 22" align="ALIGN_BOTTOM ALIGN_RIGHT" name="WorldButton"/>
|
||||||
|
</Widget>
|
||||||
|
</MyGUI>
|
55
media_mygui/openmw_progress.skin.xml
Normal file
55
media_mygui/openmw_progress.skin.xml
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<MyGUI type="Skin">
|
||||||
|
<!-- Progress bar track, various colors -->
|
||||||
|
<Skin name = "MW_BigTrack_Red" size = "2 14" texture = "bigbars.png" >
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 2 14" align = "ALIGN_STRETCH">
|
||||||
|
<State name="normal" offset = "0 0 2 14"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
<Skin name = "MW_BigTrack_Green" size = "2 14" texture = "bigbars.png" >
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 2 14" align = "ALIGN_STRETCH">
|
||||||
|
<State name="normal" offset = "0 14 2 14"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
<Skin name = "MW_BigTrack_Blue" size = "2 14" texture = "bigbars.png" >
|
||||||
|
<BasisSkin type="MainSkin" offset = "0 0 2 14" align = "ALIGN_STRETCH">
|
||||||
|
<State name="normal" offset = "0 28 2 14"/>
|
||||||
|
</BasisSkin>
|
||||||
|
</Skin>
|
||||||
|
|
||||||
|
<Skin name = "ProgressText" size = "16 16">
|
||||||
|
<Property key="FontName" value = "MyGUI_CoreFont.18" />
|
||||||
|
<Property key="FontHeight" value = "18" />
|
||||||
|
<Property key="AlignText" value = "ALIGN_CENTER" />
|
||||||
|
<Property key="Colour" value = "0.35 0.6 0.75" />
|
||||||
|
|
||||||
|
<BasisSkin type="SimpleText" offset = "0 0 16 16" align = "ALIGN_STRETCH"/>
|
||||||
|
</Skin>
|
||||||
|
|
||||||
|
<!-- Main energy bar widget definitions. There's one for each color.-->
|
||||||
|
|
||||||
|
<Skin name="MW_Progress_Red" size="64 12">
|
||||||
|
<Property key="TrackSkin" value = "MW_BigTrack_Red" />
|
||||||
|
<Property key="TrackWidth" value = "1" />
|
||||||
|
|
||||||
|
<Child type="Widget" skin="MW_Box" offset="0 0 64 12" align="ALIGN_STRETCH"/>
|
||||||
|
<Child type="Widget" skin="BlackBG" offset = "2 2 60 8" align = "ALIGN_STRETCH" name="Client"/>
|
||||||
|
</Skin>
|
||||||
|
|
||||||
|
<Skin name="MW_Progress_Green" size="64 12">
|
||||||
|
<Property key="TrackSkin" value = "MW_BigTrack_Green" />
|
||||||
|
<Property key="TrackWidth" value = "1" />
|
||||||
|
|
||||||
|
<Child type="Widget" skin="MW_Box" offset="0 0 64 12" align="ALIGN_STRETCH"/>
|
||||||
|
<Child type="Widget" skin="BlackBG" offset = "2 2 60 8" align = "ALIGN_STRETCH" name="Client"/>
|
||||||
|
</Skin>
|
||||||
|
|
||||||
|
<Skin name="MW_Progress_Blue" size="64 12">
|
||||||
|
<Property key="TrackSkin" value = "MW_BigTrack_Blue" />
|
||||||
|
<Property key="TrackWidth" value = "1" />
|
||||||
|
|
||||||
|
<Child type="Widget" skin="MW_Box" offset="0 0 64 12" align="ALIGN_STRETCH"/>
|
||||||
|
<Child type="Widget" skin="BlackBG" offset = "2 2 60 8" align = "ALIGN_STRETCH" name="Client"/>
|
||||||
|
</Skin>
|
||||||
|
</MyGUI>
|
58
media_mygui/openmw_stats_window_layout.xml
Normal file
58
media_mygui/openmw_stats_window_layout.xml
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<MyGUI type="Layout">
|
||||||
|
<Widget type="Window" skin="MW_Window" layer="Windows" position="0 0 500 342" name="_Main">
|
||||||
|
|
||||||
|
<!-- Player health stats -->
|
||||||
|
<Widget type="Widget" skin="MW_Box" position="8 8 212 62">
|
||||||
|
<Widget type="StaticText" skin="NormalText" position="4 4 70 18" name="Health_str"/>
|
||||||
|
<Widget type="StaticText" skin="NormalText" position="4 22 70 18" name="Magicka_str"/>
|
||||||
|
<Widget type="StaticText" skin="NormalText" position="4 40 70 18" name="Fatigue_str"/>
|
||||||
|
<Widget type="Progress" skin="MW_Progress_Red" position="78 4 130 18" name="HBar"/>
|
||||||
|
<Widget type="Progress" skin="MW_Progress_Blue" position="78 22 130 18" name="MBar"/>
|
||||||
|
<Widget type="Progress" skin="MW_Progress_Green" position="78 40 130 18" name="FBar"/>
|
||||||
|
<Widget type="StaticText" skin="ProgressText" position="78 4 130 18" align="Center" name="HBarT"/>
|
||||||
|
<Widget type="StaticText" skin="ProgressText" position="78 22 130 18" align="Center" name="MBarT"/>
|
||||||
|
<Widget type="StaticText" skin="ProgressText" position="78 40 130 18" align="Center" name="FBarT"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<!-- Player level, race and class -->
|
||||||
|
<Widget type="Widget" skin="MW_Box" position="8 78 212 62">
|
||||||
|
<Widget type="StaticText" skin="NormalText" position="4 4 100 18" name="Level_str"/>
|
||||||
|
<Widget type="StaticText" skin="NormalText" position="4 22 100 18" name="Race_str"/>
|
||||||
|
<Widget type="StaticText" skin="NormalText" position="4 40 100 18" name="Class_str"/>
|
||||||
|
<Widget type="StaticText" skin="SandTextRight" position="104 4 104 18" name="LevelText"/>
|
||||||
|
<Widget type="StaticText" skin="SandTextRight" position="104 22 104 18" name="RaceText"/>
|
||||||
|
<Widget type="StaticText" skin="SandTextRight" position="104 40 104 18" name="ClassText"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="Widget" skin="MW_Box" position="8 148 212 152">
|
||||||
|
<Widget type="StaticText" skin="SandText" position="4 4 100 18" name="Attrib1"/>
|
||||||
|
<Widget type="StaticText" skin="SandTextRight" position="104 4 104 18" name="AttribVal1"/>
|
||||||
|
|
||||||
|
<Widget type="StaticText" skin="SandText" position="4 22 100 18" name="Attrib2"/>
|
||||||
|
<Widget type="StaticText" skin="SandTextRight" position="104 22 104 18" name="AttribVal2"/>
|
||||||
|
|
||||||
|
<Widget type="StaticText" skin="SandText" position="4 40 100 18" name="Attrib3"/>
|
||||||
|
<Widget type="StaticText" skin="SandTextRight" position="104 40 104 18" name="AttribVal3"/>
|
||||||
|
|
||||||
|
<Widget type="StaticText" skin="SandText" position="4 58 100 18" name="Attrib4"/>
|
||||||
|
<Widget type="StaticText" skin="SandTextRight" position="104 58 104 18" name="AttribVal4"/>
|
||||||
|
|
||||||
|
<Widget type="StaticText" skin="SandText" position="4 76 100 18" name="Attrib5"/>
|
||||||
|
<Widget type="StaticText" skin="SandTextRight" position="104 76 104 18" name="AttribVal5"/>
|
||||||
|
|
||||||
|
<Widget type="StaticText" skin="SandText" position="4 94 100 18" name="Attrib6"/>
|
||||||
|
<Widget type="StaticText" skin="SandTextRight" position="104 94 104 18" name="AttribVal6"/>
|
||||||
|
|
||||||
|
<Widget type="StaticText" skin="SandText" position="4 112 100 18" name="Attrib7"/>
|
||||||
|
<Widget type="StaticText" skin="SandTextRight" position="104 112 104 18" name="AttribVal7"/>
|
||||||
|
|
||||||
|
<Widget type="StaticText" skin="SandText" position="4 130 100 18" name="Attrib8"/>
|
||||||
|
<Widget type="StaticText" skin="SandTextRight" position="104 130 104 18" name="AttribVal8"/>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="Widget" skin="MW_Box" position="228 8 248 292" align="ALIGN_LEFT ALIGN_VSTRETCH">
|
||||||
|
</Widget>
|
||||||
|
</Widget>
|
||||||
|
</MyGUI>
|
|
@ -1,17 +1,41 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<MyGUI type="Skin">
|
<MyGUI type="Skin">
|
||||||
<Skin name = "DaedricText" size = "16 16">
|
<Skin name = "NormalText" size = "16 16">
|
||||||
<Property key="FontName" value = "daedric" />
|
<Property key="FontName" value = "MyGUI_CoreFont.18" />
|
||||||
<Property key="FontHeight" value = "18" />
|
<Property key="FontHeight" value = "18" />
|
||||||
|
<Property key="AlignText" value = "ALIGN_LEFT ALIGN_BOTTOM" />
|
||||||
|
<Property key="Colour" value = "0.62 0.78 0.87" />
|
||||||
|
<BasisSkin type="SimpleText" offset = "0 0 16 16" align = "ALIGN_STRETCH"/>
|
||||||
|
</Skin>
|
||||||
|
|
||||||
|
<Skin name = "SandText" size = "16 16">
|
||||||
|
<Property key="FontName" value = "MyGUI_CoreFont.18" />
|
||||||
|
<Property key="FontHeight" value = "18" />
|
||||||
|
<Property key="AlignText" value = "ALIGN_LEFT ALIGN_BOTTOM" />
|
||||||
|
<Property key="Colour" value = "0.35 0.6 0.75" />
|
||||||
|
<BasisSkin type="SimpleText" offset = "0 0 16 16" align = "ALIGN_STRETCH"/>
|
||||||
|
</Skin>
|
||||||
|
|
||||||
|
<Skin name = "SandTextRight" size = "16 16">
|
||||||
|
<Property key="FontName" value = "MyGUI_CoreFont.18" />
|
||||||
|
<Property key="FontHeight" value = "18" />
|
||||||
|
<Property key="AlignText" value = "ALIGN_RIGHT ALIGN_BOTTOM" />
|
||||||
|
<Property key="Colour" value = "0.35 0.6 0.75" />
|
||||||
|
<BasisSkin type="SimpleText" offset = "0 0 16 16" align = "ALIGN_STRETCH"/>
|
||||||
|
</Skin>
|
||||||
|
|
||||||
|
<Skin name = "DaedricText" size = "16 16">
|
||||||
|
<Property key="FontName" value = "daedric36" />
|
||||||
|
<Property key="FontHeight" value = "36" />
|
||||||
<Property key="AlignText" value = "ALIGN_DEFAULT" />
|
<Property key="AlignText" value = "ALIGN_DEFAULT" />
|
||||||
<Property key="Colour" value = "1 1 1" />
|
<Property key="Colour" value = "1 1 1" />
|
||||||
<BasisSkin type="SimpleText" offset = "0 0 16 16" align = "ALIGN_STRETCH"/>
|
<BasisSkin type="SimpleText" offset = "0 0 16 16" align = "ALIGN_STRETCH"/>
|
||||||
</Skin>
|
</Skin>
|
||||||
|
|
||||||
<Skin name = "DaedricText_orig" size = "16 16">
|
<Skin name = "DaedricText_orig" size = "16 16">
|
||||||
<Property key="FontName" value = "daedric_orig" />
|
<Property key="FontName" value = "daedric_orig36" />
|
||||||
<Property key="FontHeight" value = "18" />
|
<Property key="FontHeight" value = "36" />
|
||||||
<Property key="AlignText" value = "ALIGN_DEFAULT" />
|
<Property key="AlignText" value = "ALIGN_DEFAULT" />
|
||||||
<Property key="Colour" value = "1 1 1" />
|
<Property key="Colour" value = "1 1 1" />
|
||||||
<BasisSkin type="SimpleText" offset = "0 0 16 16" align = "ALIGN_STRETCH"/>
|
<BasisSkin type="SimpleText" offset = "0 0 16 16" align = "ALIGN_STRETCH"/>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<MyGUI type="Skin">
|
<MyGUI type="Skin">
|
||||||
<!-- Defines a pure black background -->
|
<!-- Defines a pure black background -->
|
||||||
<Skin name = "BlackBG" size = "8 8" texture = "black.png">
|
<Skin name = "BlackBG" size = "8 8" texture = "transparent.png">
|
||||||
<BasisSkin type="MainSkin" offset = "0 0 8 8">
|
<BasisSkin type="MainSkin" offset = "0 0 8 8">
|
||||||
<State name="normal" offset = "0 0 8 8"/>
|
<State name="normal" offset = "0 0 8 8"/>
|
||||||
</BasisSkin>
|
</BasisSkin>
|
||||||
|
@ -63,49 +63,6 @@
|
||||||
</BasisSkin>
|
</BasisSkin>
|
||||||
</Skin>
|
</Skin>
|
||||||
|
|
||||||
<!-- Inner borders -->
|
|
||||||
|
|
||||||
<Skin name="IB_T" size="512 2" texture="menu_thin_border_top.dds">
|
|
||||||
<BasisSkin type="MainSkin" offset = "0 0 512 2">
|
|
||||||
<State name="normal" offset = "0 0 512 2"/>
|
|
||||||
</BasisSkin>
|
|
||||||
</Skin>
|
|
||||||
<Skin name="IB_B" size="512 2" texture="menu_thin_border_bottom.dds">
|
|
||||||
<BasisSkin type="MainSkin" offset = "0 0 512 2">
|
|
||||||
<State name="normal" offset = "0 0 512 2"/>
|
|
||||||
</BasisSkin>
|
|
||||||
</Skin>
|
|
||||||
<Skin name="IB_L" size="2 512" texture="menu_thin_border_left.dds">
|
|
||||||
<BasisSkin type="MainSkin" offset = "0 0 2 512">
|
|
||||||
<State name="normal" offset = "0 0 2 512"/>
|
|
||||||
</BasisSkin>
|
|
||||||
</Skin>
|
|
||||||
<Skin name="IB_R" size="2 512" texture="menu_thin_border_right.dds">
|
|
||||||
<BasisSkin type="MainSkin" offset = "0 0 2 512">
|
|
||||||
<State name="normal" offset = "0 0 2 512"/>
|
|
||||||
</BasisSkin>
|
|
||||||
</Skin>
|
|
||||||
<Skin name="IB_TL" size="2 2" texture="menu_thin_border_top_left_corner.dds">
|
|
||||||
<BasisSkin type="MainSkin" offset = "0 0 2 2">
|
|
||||||
<State name="normal" offset = "0 0 2 2"/>
|
|
||||||
</BasisSkin>
|
|
||||||
</Skin>
|
|
||||||
<Skin name="IB_TR" size="2 2" texture="menu_thin_border_top_right_corner.dds">
|
|
||||||
<BasisSkin type="MainSkin" offset = "0 0 2 2">
|
|
||||||
<State name="normal" offset = "0 0 2 2"/>
|
|
||||||
</BasisSkin>
|
|
||||||
</Skin>
|
|
||||||
<Skin name="IB_BL" size="2 2" texture="menu_thin_border_bottom_left_corner.dds">
|
|
||||||
<BasisSkin type="MainSkin" offset = "0 0 2 2">
|
|
||||||
<State name="normal" offset = "0 0 2 2"/>
|
|
||||||
</BasisSkin>
|
|
||||||
</Skin>
|
|
||||||
<Skin name="IB_BR" size="2 2" texture="menu_thin_border_bottom_right_corner.dds">
|
|
||||||
<BasisSkin type="MainSkin" offset = "0 0 2 2">
|
|
||||||
<State name="normal" offset = "0 0 2 2"/>
|
|
||||||
</BasisSkin>
|
|
||||||
</Skin>
|
|
||||||
|
|
||||||
<!-- These parts defines the 'blocks' to the left and right of the caption -->
|
<!-- These parts defines the 'blocks' to the left and right of the caption -->
|
||||||
<Skin name="HB_MID" size="256 16" texture="menu_head_block_middle.dds">
|
<Skin name="HB_MID" size="256 16" texture="menu_head_block_middle.dds">
|
||||||
<BasisSkin type="MainSkin" offset = "0 0 256 16">
|
<BasisSkin type="MainSkin" offset = "0 0 256 16">
|
||||||
|
@ -213,7 +170,7 @@
|
||||||
<Property key="Colour" value = "0.8 0.8 0.8" />
|
<Property key="Colour" value = "0.8 0.8 0.8" />
|
||||||
<Property key="ToStick" value = "true" />
|
<Property key="ToStick" value = "true" />
|
||||||
|
|
||||||
<Child type="Widget" skin="BlackBG" offset = "6 26 244 22" align = "ALIGN_STRETCH" name = "Client"/>
|
<Child type="Widget" skin="BlackBG" offset = "8 28 240 18" align = "ALIGN_STRETCH" name = "Client"/>
|
||||||
|
|
||||||
<!-- Outer orders -->
|
<!-- Outer orders -->
|
||||||
<Child type="Widget" skin="TB_T" offset="4 0 248 4" align="ALIGN_TOP ALIGN_HSTRETCH" name="Action">
|
<Child type="Widget" skin="TB_T" offset="4 0 248 4" align="ALIGN_TOP ALIGN_HSTRETCH" name="Action">
|
||||||
|
@ -243,14 +200,30 @@
|
||||||
</Child>
|
</Child>
|
||||||
|
|
||||||
<!-- Inner borders -->
|
<!-- Inner borders -->
|
||||||
<Child type="Widget" skin="IB_T" offset="6 24 244 2" align="ALIGN_TOP ALIGN_HSTRETCH"/>
|
<Child type="Widget" skin="TB_T" offset="8 24 240 4" align="ALIGN_TOP ALIGN_HSTRETCH" name="Action">
|
||||||
<Child type="Widget" skin="IB_B" offset="6 48 244 2" align="ALIGN_BOTTOM ALIGN_HSTRETCH"/>
|
<Property key="Scale" value = "0 1 0 -1"/>
|
||||||
<Child type="Widget" skin="IB_L" offset="4 26 2 22" align="ALIGN_LEFT ALIGN_VSTRETCH"/>
|
</Child>
|
||||||
<Child type="Widget" skin="IB_R" offset="250 26 2 22" align="ALIGN_RIGHT ALIGN_VSTRETCH"/>
|
<Child type="Widget" skin="TB_L" offset="4 28 4 18" align="ALIGN_LEFT ALIGN_VSTRETCH" name="Action">
|
||||||
<Child type="Widget" skin="IB_TL" offset="4 24 2 2" align="ALIGN_TOP ALIGN_LEFT"/>
|
<Property key="Scale" value = "1 0 -1 0"/>
|
||||||
<Child type="Widget" skin="IB_TR" offset="250 24 2 2" align="ALIGN_TOP ALIGN_RIGHT"/>
|
</Child>
|
||||||
<Child type="Widget" skin="IB_BL" offset="4 48 2 2" align="ALIGN_BOTTOM ALIGN_LEFT"/>
|
<Child type="Widget" skin="TB_B" offset="8 46 240 4" align="ALIGN_BOTTOM ALIGN_HSTRETCH" name="Action">
|
||||||
<Child type="Widget" skin="IB_BR" offset="250 48 2 2" align="ALIGN_BOTTOM ALIGN_RIGHT"/>
|
<Property key="Scale" value = "0 0 0 1"/>
|
||||||
|
</Child>
|
||||||
|
<Child type="Widget" skin="TB_R" offset="248 28 4 18" align="ALIGN_RIGHT ALIGN_VSTRETCH" name="Action">
|
||||||
|
<Property key="Scale" value = "0 0 1 0"/>
|
||||||
|
</Child>
|
||||||
|
<Child type="Widget" skin="TB_BR" offset="248 46 4 4" align="ALIGN_BOTTOM ALIGN_RIGHT" name="Action">
|
||||||
|
<Property key="Scale" value = "0 0 1 1"/>
|
||||||
|
</Child>
|
||||||
|
<Child type="Widget" skin="TB_BL" offset="4 46 4 4" align="ALIGN_BOTTOM ALIGN_LEFT" name="Action">
|
||||||
|
<Property key="Scale" value = "1 0 -1 1"/>
|
||||||
|
</Child>
|
||||||
|
<Child type="Widget" skin="TB_TR" offset="248 24 4 4" align="ALIGN_TOP ALIGN_RIGHT" name="Action">
|
||||||
|
<Property key="Scale" value = "0 1 1 -1"/>
|
||||||
|
</Child>
|
||||||
|
<Child type="Widget" skin="TB_TL" offset="4 24 4 4" align="ALIGN_TOP ALIGN_LEFT" name="Action">
|
||||||
|
<Property key="Scale" value = "1 1 -1 -1"/>
|
||||||
|
</Child>
|
||||||
|
|
||||||
<!-- Caption -->
|
<!-- Caption -->
|
||||||
<Child type="Widget" skin="HB_ALL" offset="4 4 248 20" align = "ALIGN_TOP ALIGN_HSTRETCH">
|
<Child type="Widget" skin="HB_ALL" offset="4 4 248 20" align = "ALIGN_TOP ALIGN_HSTRETCH">
|
||||||
|
|
BIN
media_mygui/smallbars.png
Normal file
BIN
media_mygui/smallbars.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 246 B |
BIN
media_mygui/transparent.png
Normal file
BIN
media_mygui/transparent.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 150 B |
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
@ -811,32 +811,17 @@ class LiteralExpr : Expression
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hasPercent()
|
|
||||||
{
|
|
||||||
int i = value.str.find('%');
|
|
||||||
if(i == -1) return false;
|
|
||||||
|
|
||||||
// Make sure it is at the end
|
|
||||||
if(i != value.str.length-1)
|
|
||||||
fail("Number literals can only have a percentage sign (%) at the end. Perhaps you meant the reminder operator '%%' ?", value.loc);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Numeric literal.
|
// Numeric literal.
|
||||||
if(value.type == TT.NumberLiteral)
|
if(value.type == TT.NumberLiteral)
|
||||||
{
|
{
|
||||||
// Parse number strings. Simple hack for now, assume it's an
|
// Parse number strings. Simple hack for now, assume it's an
|
||||||
// int unless it contains a period, then it's a float. TODO:
|
// int unless it contains a period, then it's a float. TODO:
|
||||||
// Improve this later, see how it is done elsewhere.
|
// Improve this later, see how it is done elsewhere.
|
||||||
if(value.str.find('.') != -1 || hasPercent())
|
if(value.str.find('.') != -1)
|
||||||
{
|
{
|
||||||
type = BasicType.getFloat;
|
type = BasicType.getFloat;
|
||||||
fval = atof(value.str);
|
fval = atof(value.str);
|
||||||
|
|
||||||
if(hasPercent())
|
|
||||||
fval /= 100;
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ bool validIdentChar(char c)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Same as above, except numbers are not allowed as the first
|
// Same as above, except numbers are not allowed as the first
|
||||||
// character. Will extend to support UTF8 later.
|
// character. Will extend to support full Unicode later.
|
||||||
bool validFirstIdentChar(char c)
|
bool validFirstIdentChar(char c)
|
||||||
{
|
{
|
||||||
if((c >= 'a' && c <= 'z') ||
|
if((c >= 'a' && c <= 'z') ||
|
||||||
|
@ -104,7 +104,7 @@ enum TT
|
||||||
Import, Clone, Override, Final, Function, With,
|
Import, Clone, Override, Final, Function, With,
|
||||||
This, New, Static, Const, Out, Ref, Abstract, Idle,
|
This, New, Static, Const, Out, Ref, Abstract, Idle,
|
||||||
Public, Private, Protected, True, False, Native, Null,
|
Public, Private, Protected, True, False, Native, Null,
|
||||||
Goto, Var, In,
|
Goto, Var,
|
||||||
|
|
||||||
Last, // Tokens after this do not have a specific string
|
Last, // Tokens after this do not have a specific string
|
||||||
// associated with them.
|
// associated with them.
|
||||||
|
@ -247,7 +247,6 @@ const char[][] tokenList =
|
||||||
TT.Null : "null",
|
TT.Null : "null",
|
||||||
TT.Goto : "goto",
|
TT.Goto : "goto",
|
||||||
TT.Var : "var",
|
TT.Var : "var",
|
||||||
TT.In : "in",
|
|
||||||
|
|
||||||
// These are only used in error messages
|
// These are only used in error messages
|
||||||
TT.StringLiteral : "string literal",
|
TT.StringLiteral : "string literal",
|
||||||
|
@ -540,10 +539,6 @@ class StreamTokenizer
|
||||||
// also explicitly allow '.' dots.
|
// also explicitly allow '.' dots.
|
||||||
int len = 1;
|
int len = 1;
|
||||||
bool lastDot = false; // Was the last char a '.'?
|
bool lastDot = false; // Was the last char a '.'?
|
||||||
// I've tried with percentage literals (10% = 0.10), but it
|
|
||||||
// conflicts with the remainder division operator (which
|
|
||||||
// shouldn't change), so I've disabled it for now.
|
|
||||||
//bool lastPer = false; // Was it a '%'?
|
|
||||||
foreach(char ch; line[1..$])
|
foreach(char ch; line[1..$])
|
||||||
{
|
{
|
||||||
if(ch == '.')
|
if(ch == '.')
|
||||||
|
@ -557,19 +552,6 @@ class StreamTokenizer
|
||||||
}
|
}
|
||||||
lastDot = true;
|
lastDot = true;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
else if(ch == '%')
|
|
||||||
{
|
|
||||||
// Ditto for percentage signs. We allow '%' but not
|
|
||||||
// '%%'
|
|
||||||
if(lastPer)
|
|
||||||
{
|
|
||||||
len--;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
lastPer = true;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!validIdentChar(ch)) break;
|
if(!validIdentChar(ch)) break;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,31 @@
|
||||||
|
/*
|
||||||
|
Monster - an advanced game scripting language
|
||||||
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
|
Email: <korslund@gmail.com>
|
||||||
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
This file (all.d) is part of the Monster script language
|
||||||
|
package.
|
||||||
|
|
||||||
|
Monster is distributed as free software: you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License
|
||||||
|
version 3, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
version 3 along with this program. If not, see
|
||||||
|
http://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
module monster.modules.all;
|
module monster.modules.all;
|
||||||
|
|
||||||
import monster.modules.io;
|
import monster.modules.io;
|
||||||
|
import monster.modules.math;
|
||||||
import monster.modules.timer;
|
import monster.modules.timer;
|
||||||
import monster.modules.frames;
|
import monster.modules.frames;
|
||||||
import monster.modules.random;
|
import monster.modules.random;
|
||||||
|
@ -13,4 +38,5 @@ void initAllModules()
|
||||||
initFramesModule();
|
initFramesModule();
|
||||||
initThreadModule();
|
initThreadModule();
|
||||||
initRandomModule();
|
initRandomModule();
|
||||||
|
initMathModule();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,27 @@
|
||||||
|
/*
|
||||||
|
Monster - an advanced game scripting language
|
||||||
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
|
Email: <korslund@gmail.com>
|
||||||
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
This file (frames.d) is part of the Monster script language
|
||||||
|
package.
|
||||||
|
|
||||||
|
Monster is distributed as free software: you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License
|
||||||
|
version 3, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
version 3 along with this program. If not, see
|
||||||
|
http://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
// Provides some simple numbers and functions regarding the rendering
|
// Provides some simple numbers and functions regarding the rendering
|
||||||
// frames of the application. It's up to the user to some degree to
|
// frames of the application. It's up to the user to some degree to
|
||||||
|
|
|
@ -1,9 +1,32 @@
|
||||||
|
/*
|
||||||
|
Monster - an advanced game scripting language
|
||||||
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
|
Email: <korslund@gmail.com>
|
||||||
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
This file (io.d) is part of the Monster script language
|
||||||
|
package.
|
||||||
|
|
||||||
|
Monster is distributed as free software: you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License
|
||||||
|
version 3, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
version 3 along with this program. If not, see
|
||||||
|
http://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
// This module provides simple output functions for Monster. The 'i'
|
// This module provides simple output functions for Monster. The 'i'
|
||||||
// part (input) isn't really there yet.
|
// (input) part of 'io' isn't really there yet.
|
||||||
module monster.modules.io;
|
module monster.modules.io;
|
||||||
|
|
||||||
import std.stdio;
|
|
||||||
import monster.monster;
|
import monster.monster;
|
||||||
|
|
||||||
const char[] moduleDef =
|
const char[] moduleDef =
|
||||||
|
@ -16,6 +39,29 @@ native writelns(char[][] args...);
|
||||||
native print(char[][] args...);
|
native print(char[][] args...);
|
||||||
"; //"
|
"; //"
|
||||||
|
|
||||||
|
// Use tango library functions directly, since flushing the
|
||||||
|
// minibos-versions will give weird effects when mixing with other
|
||||||
|
// tango output.
|
||||||
|
version(Tango)
|
||||||
|
{
|
||||||
|
import tango.io.Stdout;
|
||||||
|
void doWrite(bool space)
|
||||||
|
{
|
||||||
|
AIndex[] args = stack.popAArray();
|
||||||
|
|
||||||
|
char[] form = "{}";
|
||||||
|
if(space) form = "{} ";
|
||||||
|
|
||||||
|
foreach(AIndex ind; args)
|
||||||
|
Stdout.format(form, arrays.getRef(ind).carr);
|
||||||
|
|
||||||
|
Stdout.flush();
|
||||||
|
}
|
||||||
|
void writefln() { Stdout.newline; }
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // Phobos
|
||||||
|
import std.stdio;
|
||||||
void doWrite(bool space)
|
void doWrite(bool space)
|
||||||
{
|
{
|
||||||
AIndex[] args = stack.popAArray();
|
AIndex[] args = stack.popAArray();
|
||||||
|
@ -28,7 +74,7 @@ void doWrite(bool space)
|
||||||
|
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
void initIOModule()
|
void initIOModule()
|
||||||
{
|
{
|
||||||
static MonsterClass mc;
|
static MonsterClass mc;
|
||||||
|
|
|
@ -5,8 +5,13 @@
|
||||||
|
|
||||||
module io;
|
module io;
|
||||||
|
|
||||||
|
// Write to console, with or without a newline
|
||||||
native write(char[][] args...);
|
native write(char[][] args...);
|
||||||
native writeln(char[][] args...);
|
native writeln(char[][] args...);
|
||||||
|
|
||||||
|
// Automatically inserts spaces between arguments
|
||||||
native writes(char[][] args...);
|
native writes(char[][] args...);
|
||||||
native writelns(char[][] args...);
|
native writelns(char[][] args...);
|
||||||
|
|
||||||
|
// Identical to writelns
|
||||||
native print(char[][] args...);
|
native print(char[][] args...);
|
||||||
|
|
165
monster/modules/math.d
Normal file
165
monster/modules/math.d
Normal file
|
@ -0,0 +1,165 @@
|
||||||
|
/*
|
||||||
|
Monster - an advanced game scripting language
|
||||||
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
|
Email: <korslund@gmail.com>
|
||||||
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
This file (math.d) is part of the Monster script language
|
||||||
|
package.
|
||||||
|
|
||||||
|
Monster is distributed as free software: you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License
|
||||||
|
version 3, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
version 3 along with this program. If not, see
|
||||||
|
http://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// Simple math functions
|
||||||
|
module monster.modules.math;
|
||||||
|
|
||||||
|
import monster.monster;
|
||||||
|
import std.math;
|
||||||
|
|
||||||
|
const char[] moduleDef =
|
||||||
|
"module math;
|
||||||
|
|
||||||
|
double E = 2.7182818284590452354;
|
||||||
|
double PI = 3.141592653589793238;
|
||||||
|
double DEGTORAD = 3.141592653590/180;
|
||||||
|
double RADTODEG = 180/3.141592653590;
|
||||||
|
|
||||||
|
native double sin(double x);
|
||||||
|
native double cos(double x);
|
||||||
|
native double tan(double x);
|
||||||
|
native double asin(double x);
|
||||||
|
native double acos(double x);
|
||||||
|
native double atan(double x);
|
||||||
|
native double atan2(double y, double x); // = atan(y/x)
|
||||||
|
native double sinh(double x);
|
||||||
|
native double cosh(double x);
|
||||||
|
native double tanh(double x);
|
||||||
|
native double asinh(double x);
|
||||||
|
native double acosh(double x);
|
||||||
|
native double atanh(double x);
|
||||||
|
|
||||||
|
native double sqrt(double x);
|
||||||
|
native double exp(double x); // e^x
|
||||||
|
native double exp2(double x); // 2^x
|
||||||
|
native double log(double x); // base e
|
||||||
|
native double log10(double x);// base 10
|
||||||
|
native double log2(double x); // base 2
|
||||||
|
|
||||||
|
native double pow(double x, double y); // x^y
|
||||||
|
native double ipow(double x, int n); // x^n (faster than pow)
|
||||||
|
|
||||||
|
native int abs(int x);
|
||||||
|
native double fabs(double x);
|
||||||
|
native double ceil(double x);
|
||||||
|
native double floor(double x);
|
||||||
|
native double round(double x); // rounds to nearest integer
|
||||||
|
native double trunc(double x);
|
||||||
|
|
||||||
|
native double hypot(double x, double y); // = sqrt(x*x+y*y)
|
||||||
|
native double cbrt(double x); // cube root
|
||||||
|
|
||||||
|
// Calculates polynomial a0 + x*a1 + x^2*a2 + x^3*a3 + ...
|
||||||
|
native double poly(double x, float[] A);
|
||||||
|
"; //"
|
||||||
|
|
||||||
|
version(Tango)
|
||||||
|
{
|
||||||
|
double fabs(double x) { return abs(x); }
|
||||||
|
}
|
||||||
|
|
||||||
|
void initMathModule()
|
||||||
|
{
|
||||||
|
static MonsterClass mc;
|
||||||
|
if(mc !is null) return;
|
||||||
|
|
||||||
|
mc = new MonsterClass(MC.String, moduleDef, "math");
|
||||||
|
|
||||||
|
mc.bind("sin", { stack.pushDouble(sin(stack.popDouble)); });
|
||||||
|
mc.bind("cos", { stack.pushDouble(cos(stack.popDouble)); });
|
||||||
|
mc.bind("tan", { stack.pushDouble(tan(stack.popDouble)); });
|
||||||
|
mc.bind("asin", { stack.pushDouble(asin(stack.popDouble)); });
|
||||||
|
mc.bind("acos", { stack.pushDouble(acos(stack.popDouble)); });
|
||||||
|
mc.bind("atan", { stack.pushDouble(atan(stack.popDouble)); });
|
||||||
|
|
||||||
|
mc.bind("sinh", { stack.pushDouble(sinh(stack.popDouble)); });
|
||||||
|
mc.bind("cosh", { stack.pushDouble(cosh(stack.popDouble)); });
|
||||||
|
mc.bind("tanh", { stack.pushDouble(tanh(stack.popDouble)); });
|
||||||
|
mc.bind("asinh", { stack.pushDouble(asinh(stack.popDouble)); });
|
||||||
|
mc.bind("acosh", { stack.pushDouble(acosh(stack.popDouble)); });
|
||||||
|
mc.bind("atanh", { stack.pushDouble(atanh(stack.popDouble)); });
|
||||||
|
|
||||||
|
mc.bind("atan2",
|
||||||
|
{
|
||||||
|
// Remember to pop the variables in the reverse order
|
||||||
|
auto x = stack.popDouble;
|
||||||
|
stack.pushDouble(atan2(stack.popDouble, x));
|
||||||
|
});
|
||||||
|
|
||||||
|
mc.bind("sqrt", { stack.pushDouble(sqrt(stack.popDouble)); });
|
||||||
|
mc.bind("exp", { stack.pushDouble(exp(stack.popDouble)); });
|
||||||
|
mc.bind("exp2", { stack.pushDouble(exp2(stack.popDouble)); });
|
||||||
|
mc.bind("log", { stack.pushDouble(log(stack.popDouble)); });
|
||||||
|
mc.bind("log2", { stack.pushDouble(log2(stack.popDouble)); });
|
||||||
|
mc.bind("log10", { stack.pushDouble(log10(stack.popDouble)); });
|
||||||
|
|
||||||
|
mc.bind("pow",
|
||||||
|
{
|
||||||
|
auto x = stack.popDouble;
|
||||||
|
stack.pushDouble(pow(stack.popDouble, x));
|
||||||
|
});
|
||||||
|
mc.bind("ipow",
|
||||||
|
{
|
||||||
|
auto x = stack.popInt;
|
||||||
|
stack.pushDouble(pow(cast(real)stack.popDouble, x));
|
||||||
|
});
|
||||||
|
|
||||||
|
mc.bind("abs", { stack.pushDouble(abs(stack.popDouble)); });
|
||||||
|
mc.bind("fabs", { stack.pushDouble(fabs(stack.popDouble)); });
|
||||||
|
mc.bind("ceil", { stack.pushDouble(ceil(stack.popDouble)); });
|
||||||
|
mc.bind("floor", { stack.pushDouble(floor(stack.popDouble)); });
|
||||||
|
mc.bind("round", { stack.pushDouble(round(stack.popDouble)); });
|
||||||
|
mc.bind("trunc", { stack.pushDouble(trunc(stack.popDouble)); });
|
||||||
|
|
||||||
|
// Order doesn't matter here
|
||||||
|
mc.bind("hypot", { stack.pushDouble(hypot(stack.popDouble,
|
||||||
|
stack.popDouble)); });
|
||||||
|
|
||||||
|
mc.bind("cbrt", { stack.pushDouble(cbrt(stack.popDouble)); });
|
||||||
|
|
||||||
|
mc.bind("poly", &npoly);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implement this ourselves, since phobos doesn't use the types we
|
||||||
|
// want
|
||||||
|
double poly(double x, float A[])
|
||||||
|
{
|
||||||
|
// Use 'real' internally for higher precision
|
||||||
|
real r = A[$-1];
|
||||||
|
foreach_reverse(c; A[0..$-1])
|
||||||
|
{
|
||||||
|
r *= x;
|
||||||
|
r += c;
|
||||||
|
}
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
// double poly(double x, float[] A);
|
||||||
|
void npoly()
|
||||||
|
{
|
||||||
|
auto arf = stack.popArray();
|
||||||
|
assert(arf.elemSize == 1);
|
||||||
|
stack.pushDouble(poly(stack.popDouble, arf.farr));
|
||||||
|
}
|
43
monster/modules/math.mn
Normal file
43
monster/modules/math.mn
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
module math;
|
||||||
|
|
||||||
|
double E = 2.7182818284590452354;
|
||||||
|
double PI = 3.141592653589793238;
|
||||||
|
double DEGTORAD = 3.141592653590/180;
|
||||||
|
double RADTODEG = 180/3.141592653590;
|
||||||
|
|
||||||
|
native double sin(double x);
|
||||||
|
native double cos(double x);
|
||||||
|
native double tan(double x);
|
||||||
|
native double asin(double x);
|
||||||
|
native double acos(double x);
|
||||||
|
native double atan(double x);
|
||||||
|
native double atan2(double y, double x); // = atan(y/x)
|
||||||
|
native double sinh(double x);
|
||||||
|
native double cosh(double x);
|
||||||
|
native double tanh(double x);
|
||||||
|
native double asinh(double x);
|
||||||
|
native double acosh(double x);
|
||||||
|
native double atanh(double x);
|
||||||
|
|
||||||
|
native double sqrt(double x);
|
||||||
|
native double exp(double x); // e^x
|
||||||
|
native double exp2(double x); // 2^x
|
||||||
|
native double log(double x); // base e
|
||||||
|
native double log10(double x);// base 10
|
||||||
|
native double log2(double x); // base 2
|
||||||
|
|
||||||
|
native double pow(double x, double y); // x^y
|
||||||
|
native double ipow(double x, int n); // x^n (faster than pow)
|
||||||
|
|
||||||
|
native int abs(int x);
|
||||||
|
native double fabs(double x);
|
||||||
|
native double ceil(double x);
|
||||||
|
native double floor(double x);
|
||||||
|
native double round(double x); // rounds to nearest integer
|
||||||
|
native double trunc(double x);
|
||||||
|
|
||||||
|
native double hypot(double x, double y); // = sqrt(x*x+y*y)
|
||||||
|
native double cbrt(double x); // cube root
|
||||||
|
|
||||||
|
// Calculates polynomial a0 + x*a1 + x^2*a2 + x^3*a3 + ...
|
||||||
|
native double poly(double x, float[] A);
|
|
@ -1,3 +1,25 @@
|
||||||
|
/*
|
||||||
|
Monster - an advanced game scripting language
|
||||||
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
|
Email: <korslund@gmail.com>
|
||||||
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
This file (random.d) is part of the Monster script language package.
|
||||||
|
|
||||||
|
Monster is distributed as free software: you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License
|
||||||
|
version 3, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
version 3 along with this program. If not, see
|
||||||
|
http://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
// This module provides simple random number generation. Since this is
|
// This module provides simple random number generation. Since this is
|
||||||
// intended for game development, speed and simplicity is favored over
|
// intended for game development, speed and simplicity is favored over
|
||||||
|
|
|
@ -1,3 +1,27 @@
|
||||||
|
/*
|
||||||
|
Monster - an advanced game scripting language
|
||||||
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
|
Email: <korslund@gmail.com>
|
||||||
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
This file (threads.d) is part of the Monster script language
|
||||||
|
package.
|
||||||
|
|
||||||
|
Monster is distributed as free software: you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License
|
||||||
|
version 3, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
version 3 along with this program. If not, see
|
||||||
|
http://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
// This module provides an interface to the virtual threading API in
|
// This module provides an interface to the virtual threading API in
|
||||||
// Monster.
|
// Monster.
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,27 @@
|
||||||
|
/*
|
||||||
|
Monster - an advanced game scripting language
|
||||||
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
|
Email: <korslund@gmail.com>
|
||||||
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
This file (timer.d) is part of the Monster script language
|
||||||
|
package.
|
||||||
|
|
||||||
|
Monster is distributed as free software: you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License
|
||||||
|
version 3, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
version 3 along with this program. If not, see
|
||||||
|
http://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
// This module contains (or will contain) various routines for
|
// This module contains (or will contain) various routines for
|
||||||
// timing. It is also home of the ubiquitous "sleep" idle function.
|
// timing. It is also home of the ubiquitous "sleep" idle function.
|
||||||
|
|
||||||
|
|
|
@ -4,4 +4,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
singleton timer;
|
singleton timer;
|
||||||
|
|
||||||
|
// Sleep the given number of seconds
|
||||||
idle sleep(float secs);
|
idle sleep(float secs);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2004, 2007, 2008 Nicolay Korslund
|
Copyright (C) 2004, 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
@ -47,11 +47,11 @@ import monster.vm.iterators;
|
||||||
import monster.vm.error;
|
import monster.vm.error;
|
||||||
import monster.vm.fstack;
|
import monster.vm.fstack;
|
||||||
|
|
||||||
|
import std.math : floor;
|
||||||
|
|
||||||
// Used for array copy below. It handles overlapping data for us.
|
// Used for array copy below. It handles overlapping data for us.
|
||||||
extern(C) void* memmove(void *dest, void *src, size_t n);
|
extern(C) void* memmove(void *dest, void *src, size_t n);
|
||||||
|
|
||||||
extern(C) double floor(double d);
|
|
||||||
|
|
||||||
import monster.util.list;
|
import monster.util.list;
|
||||||
alias _lstNode!(Thread) _tmp1;
|
alias _lstNode!(Thread) _tmp1;
|
||||||
alias __FreeNode!(Thread) _tmp2;
|
alias __FreeNode!(Thread) _tmp2;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Monster - an advanced game scripting language
|
Monster - an advanced game scripting language
|
||||||
Copyright (C) 2007, 2008 Nicolay Korslund
|
Copyright (C) 2007-2009 Nicolay Korslund
|
||||||
Email: <korslund@gmail.com>
|
Email: <korslund@gmail.com>
|
||||||
WWW: http://monster.snaptoad.com/
|
WWW: http://monster.snaptoad.com/
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,19 @@
|
||||||
// Small script that prints the FPS to screen with regular intervals.
|
// Small script that prints the FPS to screen with regular intervals.
|
||||||
class FPSTicker;
|
|
||||||
|
|
||||||
import frames;
|
import frames;
|
||||||
|
|
||||||
// Set the FPS widget text
|
// Set up the text widget
|
||||||
native setText(char[][] args...);
|
Widget txt = gui.text("StaticText",
|
||||||
|
gui.getWidth()-90, 10, 120, 30,
|
||||||
|
"Statistic");
|
||||||
|
txt.setNeedMouseFocus(false);
|
||||||
|
txt.setTextColor(1,1,1);
|
||||||
|
txt.setCaption("hello!");
|
||||||
|
|
||||||
run()
|
// Sleep one frame. This makes sure we only start running after
|
||||||
{
|
// rendering begins. It prevents the first printed value from being
|
||||||
// Sleep one frame. This makes sure that we won't start running until
|
// 'nan'
|
||||||
// the rendering begins. Not critically important, but it prevents the
|
|
||||||
// first printed value from being 'nan'.
|
|
||||||
fsleep(1);
|
fsleep(1);
|
||||||
|
|
||||||
setText("hello!");
|
|
||||||
|
|
||||||
// counter and totalTime (in the 'frames' module) are updated
|
// counter and totalTime (in the 'frames' module) are updated
|
||||||
// automatically by the system.
|
// automatically by the system.
|
||||||
ulong lastFrame = counter;
|
ulong lastFrame = counter;
|
||||||
|
@ -30,9 +29,8 @@ run()
|
||||||
ulong fdiff = counter-lastFrame;
|
ulong fdiff = counter-lastFrame;
|
||||||
float tdiff = totalTime-lastTime;
|
float tdiff = totalTime-lastTime;
|
||||||
|
|
||||||
setText("fps: ", fdiff / tdiff);
|
txt.setCaption("fps: ", fdiff/tdiff);
|
||||||
|
|
||||||
lastFrame = counter;
|
lastFrame = counter;
|
||||||
lastTime = totalTime;
|
lastTime = totalTime;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
5
mscripts/gui/makegui.mn
Normal file
5
mscripts/gui/makegui.mn
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
/*
|
||||||
|
Widget hud;
|
||||||
|
hud = gui.loadLayout("openmw_hud_layout.xml");
|
||||||
|
hud.setCoord(10,10,500,500);
|
||||||
|
*/
|
11
mscripts/gui/module/gui.mn
Normal file
11
mscripts/gui/module/gui.mn
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
// GUI module. Only covers some very basic functions.
|
||||||
|
module gui;
|
||||||
|
|
||||||
|
// Later, we'll have singleton gui : Widget; with most of the
|
||||||
|
// functions defined in Widget.
|
||||||
|
|
||||||
|
native Widget loadLayout(char[] file);
|
||||||
|
native Widget text(char[] skin, int x, int y, int w, int h,
|
||||||
|
char[] layer);
|
||||||
|
native int getWidth();
|
||||||
|
native int getHeight();
|
10
mscripts/gui/module/widget.mn
Normal file
10
mscripts/gui/module/widget.mn
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
class Widget;
|
||||||
|
|
||||||
|
native setNeedMouseFocus(bool b);
|
||||||
|
native setTextColor(float r, float g, float b);
|
||||||
|
native setCoord(int x, int y, int w, int h);
|
||||||
|
|
||||||
|
native setCaption(char[][] str...);
|
||||||
|
|
||||||
|
// Find a named child widget
|
||||||
|
native Widget get(char[] name);
|
|
@ -28,7 +28,7 @@ import monster.compiler.scopes : global;
|
||||||
import monster.modules.timer;
|
import monster.modules.timer;
|
||||||
|
|
||||||
import core.config;
|
import core.config;
|
||||||
import ogre.bindings;
|
import ogre.gui;
|
||||||
|
|
||||||
import std.string;
|
import std.string;
|
||||||
|
|
||||||
|
@ -50,24 +50,20 @@ void initMonsterScripts()
|
||||||
// Get the Config singleton object
|
// Get the Config singleton object
|
||||||
config.mo = (new MonsterClass("Config")).getSing();
|
config.mo = (new MonsterClass("Config")).getSing();
|
||||||
|
|
||||||
// Run the fps ticker
|
// Set up the GUI Monster module
|
||||||
//vm.run("fpsticker.mn");
|
setupGUIScripts();
|
||||||
auto mc = new MonsterClass("fpsticker.mn");
|
|
||||||
mc.bind("setText", &setFpsText);
|
|
||||||
mc.createObject().call("run");
|
|
||||||
|
|
||||||
// Run the test script
|
// Run the test script
|
||||||
vm.run("test.mn");
|
vm.run("test.mn");
|
||||||
}
|
}
|
||||||
|
|
||||||
void setFpsText()
|
// Run the GUI scripts. These should be run only after the
|
||||||
|
// GUI/rendering system has been initialized
|
||||||
|
void runGUIScripts()
|
||||||
{
|
{
|
||||||
AIndex[] args = stack.popAArray();
|
// Create the HUD and windows
|
||||||
|
vm.run("makegui.mn");
|
||||||
|
|
||||||
char[] res;
|
// Run the fps ticker
|
||||||
|
vm.run("fpsticker.mn");
|
||||||
foreach(AIndex ind; args)
|
|
||||||
res ~= format("%s", arrays.getRef(ind).carr);
|
|
||||||
|
|
||||||
gui_setFpsText(res.ptr);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -163,7 +163,27 @@ void ogre_moveCameraRel(float x, float y, float z);
|
||||||
// Insert a raw RGBA image into the texture system.
|
// Insert a raw RGBA image into the texture system.
|
||||||
//void ogre_insertTexture(char *name, int width, int height, void *data);
|
//void ogre_insertTexture(char *name, int width, int height, void *data);
|
||||||
|
|
||||||
// Test
|
// GUI functions. Under development.
|
||||||
|
typedef void* WidgetPtr;
|
||||||
void gui_setupGUI();
|
void gui_setupGUI();
|
||||||
void gui_toggleGui();
|
void gui_toggleGui();
|
||||||
void gui_setFpsText(char *str);
|
void gui_setCellName(char *str);
|
||||||
|
|
||||||
|
// Get the widget type, as a string
|
||||||
|
char *gui_widgetType(WidgetPtr);
|
||||||
|
|
||||||
|
// Get the height or width of a widget. If the argument is null,
|
||||||
|
// return the size of the screen.
|
||||||
|
int gui_getHeight(WidgetPtr);
|
||||||
|
int gui_getWidth(WidgetPtr);
|
||||||
|
|
||||||
|
// Set various properties of a given widget
|
||||||
|
void gui_setCaption(WidgetPtr, char*);
|
||||||
|
void gui_setNeedMouseFocus(WidgetPtr, int);
|
||||||
|
void gui_setTextColor(WidgetPtr, float,float,float);
|
||||||
|
void gui_setCoord(WidgetPtr, int,int,int,int);
|
||||||
|
|
||||||
|
// Various ways to get or create widgets
|
||||||
|
WidgetPtr gui_loadLayout(char *file, char *prefix, WidgetPtr parent);
|
||||||
|
WidgetPtr gui_getChild(WidgetPtr, char*);
|
||||||
|
WidgetPtr gui_createText(char *skin, int x, int y, int w, int h, char *layer);
|
||||||
|
|
|
@ -1,37 +1,82 @@
|
||||||
MyGUI::WidgetPtr FPSText;
|
// TODO: KILLME
|
||||||
|
char *cellName;
|
||||||
MyGUI::WindowPtr mwindow;
|
extern "C" void gui_setCellName(char *str)
|
||||||
|
|
||||||
OIS::MouseState state;
|
|
||||||
|
|
||||||
extern "C" void gui_toggleGui()
|
|
||||||
{
|
{
|
||||||
if(guiMode == 1)
|
cellName = str;
|
||||||
{
|
|
||||||
guiMode = 0;
|
|
||||||
mGUI->hidePointer();
|
|
||||||
if(mwindow)
|
|
||||||
mwindow->setVisible(false);
|
|
||||||
state = mMouse->getMouseState();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Restore the GUI mouse position. This is a hack because silly
|
|
||||||
// OIS doesn't allow us to set the mouse position ourselves.
|
|
||||||
*((OIS::MouseState*)&(mMouse->getMouseState())) = state;
|
|
||||||
mGUI->injectMouseMove(state.X.abs, state.Y.abs, 0);
|
|
||||||
|
|
||||||
guiMode = 1;
|
|
||||||
mGUI->showPointer();
|
|
||||||
if(mwindow)
|
|
||||||
mwindow->setVisible(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void turnGuiOff(MyGUI::WidgetPtr sender)
|
// Get the widget type, as a string
|
||||||
|
extern "C" const char *gui_widgetType(MyGUI::WidgetPtr p)
|
||||||
|
{ return p->getTypeName().c_str(); }
|
||||||
|
|
||||||
|
extern "C" int32_t gui_getHeight(MyGUI::WidgetPtr p)
|
||||||
{
|
{
|
||||||
guiMode = 1;
|
if(p == NULL) mWindow->getHeight();
|
||||||
gui_toggleGui();
|
return p->getHeight();
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" int32_t gui_getWidth(MyGUI::WidgetPtr p)
|
||||||
|
{
|
||||||
|
if(p == NULL) return mWindow->getWidth();
|
||||||
|
return p->getWidth();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set various properties of a given widget
|
||||||
|
extern "C" void gui_setCaption(MyGUI::WidgetPtr p, char* s)
|
||||||
|
{ p->setCaption(s); }
|
||||||
|
|
||||||
|
extern "C" void gui_setNeedMouseFocus(MyGUI::WidgetPtr p, int32_t b)
|
||||||
|
{ p->setNeedMouseFocus(b); }
|
||||||
|
|
||||||
|
extern "C" void gui_setTextColor(MyGUI::WidgetPtr p, float r,float g,float b)
|
||||||
|
{ p->setTextColour(Ogre::ColourValue(b,g,r)); }
|
||||||
|
|
||||||
|
extern "C" void gui_setCoord(MyGUI::WidgetPtr p,
|
||||||
|
int32_t x,int32_t y,int32_t w,int32_t h)
|
||||||
|
{ p->setCoord(x,y,w,h); }
|
||||||
|
|
||||||
|
// Various ways to get or create widgets
|
||||||
|
extern "C" MyGUI::WidgetPtr gui_loadLayout(char *file, char *prefix,
|
||||||
|
MyGUI::WidgetPtr parent)
|
||||||
|
{
|
||||||
|
// Get the list of Widgets in this layout
|
||||||
|
MyGUI::VectorWidgetPtr wlist;
|
||||||
|
wlist = MyGUI::LayoutManager::getInstance().
|
||||||
|
loadLayout(file, prefix, parent);
|
||||||
|
|
||||||
|
MyGUI::VectorWidgetPtr::iterator iter;
|
||||||
|
iter = wlist.begin();
|
||||||
|
|
||||||
|
// Return null if the list is empty
|
||||||
|
if(wlist.end() == iter)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
MyGUI::WidgetPtr res = *iter;
|
||||||
|
|
||||||
|
++iter;
|
||||||
|
|
||||||
|
if(iter != wlist.end())
|
||||||
|
std::cout << "WARNING: Layout '" << file
|
||||||
|
<< "' has more than one root widget. Ignored.\n";
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" MyGUI::WidgetPtr gui_getChild(MyGUI::WidgetPtr p, char* name)
|
||||||
|
{
|
||||||
|
return p->findWidget(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" MyGUI::WidgetPtr gui_createText(const char *skin,
|
||||||
|
int32_t x, int32_t y,
|
||||||
|
int32_t w, int32_t h,
|
||||||
|
const char *layer)
|
||||||
|
{
|
||||||
|
return mGUI->createWidget<MyGUI::StaticText>
|
||||||
|
(skin,
|
||||||
|
x,y,w,h,
|
||||||
|
MyGUI::ALIGN_LEFT | MyGUI::ALIGN_TOP,
|
||||||
|
layer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copied from MyGUI demo code, with a few modifications
|
// Copied from MyGUI demo code, with a few modifications
|
||||||
|
@ -110,11 +155,37 @@ public:
|
||||||
mMainWidget->setCoord(x,y,w,h);
|
mMainWidget->setCoord(x,y,w,h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setVisible(bool b)
|
||||||
|
{
|
||||||
|
mMainWidget->setVisible(b);
|
||||||
|
}
|
||||||
|
|
||||||
virtual ~Layout()
|
virtual ~Layout()
|
||||||
{
|
{
|
||||||
shutdown();
|
shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setText(const char* name, const char* caption)
|
||||||
|
{
|
||||||
|
MyGUI::WidgetPtr pt;
|
||||||
|
getWidget(pt, name);
|
||||||
|
pt->setCaption(caption);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setColor(const char* name, float r, float g, float b)
|
||||||
|
{
|
||||||
|
MyGUI::WidgetPtr pt;
|
||||||
|
getWidget(pt, name);
|
||||||
|
pt->setTextColour(Ogre::ColourValue(b,g,r));
|
||||||
|
}
|
||||||
|
|
||||||
|
void setImage(const char* name, const char* imgName)
|
||||||
|
{
|
||||||
|
MyGUI::StaticImagePtr pt;
|
||||||
|
getWidget(pt, name);
|
||||||
|
pt->setImageTexture(imgName);
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
MyGUI::WidgetPtr mMainWidget;
|
MyGUI::WidgetPtr mMainWidget;
|
||||||
|
@ -197,7 +268,135 @@ public:
|
||||||
MyGUI::StaticImagePtr compass;
|
MyGUI::StaticImagePtr compass;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class MapWindow : public Layout
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MapWindow()
|
||||||
|
: Layout("openmw_map_window_layout.xml")
|
||||||
|
{
|
||||||
|
setCoord(500,0,320,300);
|
||||||
|
mMainWidget->setCaption(cellName);
|
||||||
|
setText("WorldButton", "World");
|
||||||
|
setColor("WorldButton", 0.75, 0.6, 0.35);
|
||||||
|
setImage("Compass", "compass.dds");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class MainMenu : public Layout
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MainMenu()
|
||||||
|
: Layout("openmw_mainmenu_layout.xml")
|
||||||
|
{
|
||||||
|
setCoord(0,0,
|
||||||
|
mWindow->getWidth(),
|
||||||
|
mWindow->getHeight());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class StatsWindow : public Layout
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void setBar(const char* name, const char* tname, int val, int max)
|
||||||
|
{
|
||||||
|
MyGUI::ProgressPtr pt;
|
||||||
|
getWidget(pt, name);
|
||||||
|
pt->setProgressRange(max);
|
||||||
|
pt->setProgressPosition(val);
|
||||||
|
|
||||||
|
std::stringstream out;
|
||||||
|
out << val << "/" << max;
|
||||||
|
setText(tname, out.str().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
StatsWindow()
|
||||||
|
: Layout("openmw_stats_window_layout.xml")
|
||||||
|
{
|
||||||
|
setCoord(0,0,498, 342);
|
||||||
|
mMainWidget->setCaption("Playername");
|
||||||
|
|
||||||
|
setText("Health_str", "Health");
|
||||||
|
setText("Magicka_str", "Magicka");
|
||||||
|
setText("Fatigue_str", "Fatigue");
|
||||||
|
|
||||||
|
setText("Level_str", "Level");
|
||||||
|
setText("Race_str", "Race");
|
||||||
|
setText("Class_str", "Class");
|
||||||
|
|
||||||
|
setText("LevelText", "5");
|
||||||
|
setText("RaceText", "Wood Elf");
|
||||||
|
setText("ClassText", "Pilgrim");
|
||||||
|
|
||||||
|
setBar("HBar", "HBarT", 60, 100);
|
||||||
|
setBar("MBar", "MBarT", 30, 100);
|
||||||
|
setBar("FBar", "FBarT", 80, 100);
|
||||||
|
|
||||||
|
setText("Attrib1", "Strength");
|
||||||
|
setText("Attrib2", "Intelligence");
|
||||||
|
setText("Attrib3", "Willpower");
|
||||||
|
setText("Attrib4", "Agility");
|
||||||
|
setText("Attrib5", "Speed");
|
||||||
|
setText("Attrib6", "Endurance");
|
||||||
|
setText("Attrib7", "Personality");
|
||||||
|
setText("Attrib8", "Luck");
|
||||||
|
|
||||||
|
setText("AttribVal1", "30");
|
||||||
|
setText("AttribVal2", "40");
|
||||||
|
setText("AttribVal3", "30");
|
||||||
|
setText("AttribVal4", "75");
|
||||||
|
setText("AttribVal5", "50");
|
||||||
|
setText("AttribVal6", "40");
|
||||||
|
setText("AttribVal7", "50");
|
||||||
|
setText("AttribVal8", "40");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
HUD *hud;
|
HUD *hud;
|
||||||
|
StatsWindow *stats;
|
||||||
|
MapWindow *map;
|
||||||
|
MyGUI::WidgetPtr FPSText;
|
||||||
|
MyGUI::WindowPtr mwindow;
|
||||||
|
OIS::MouseState state;
|
||||||
|
|
||||||
|
// KILLME
|
||||||
|
extern "C" void gui_toggleGui()
|
||||||
|
{
|
||||||
|
if(guiMode == 1)
|
||||||
|
{
|
||||||
|
guiMode = 0;
|
||||||
|
mGUI->hidePointer();
|
||||||
|
if(mwindow)
|
||||||
|
mwindow->setVisible(false);
|
||||||
|
if(stats)
|
||||||
|
stats->setVisible(false);
|
||||||
|
if(map)
|
||||||
|
map->setVisible(false);
|
||||||
|
state = mMouse->getMouseState();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Restore the GUI mouse position. This is a hack because silly
|
||||||
|
// OIS doesn't allow us to set the mouse position ourselves.
|
||||||
|
*((OIS::MouseState*)&(mMouse->getMouseState())) = state;
|
||||||
|
mGUI->injectMouseMove(state.X.abs, state.Y.abs, 0);
|
||||||
|
|
||||||
|
guiMode = 1;
|
||||||
|
mGUI->showPointer();
|
||||||
|
if(mwindow)
|
||||||
|
mwindow->setVisible(true);
|
||||||
|
if(stats)
|
||||||
|
stats->setVisible(true);
|
||||||
|
if(map)
|
||||||
|
map->setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// KILLME
|
||||||
|
void turnGuiOff(MyGUI::WidgetPtr sender)
|
||||||
|
{
|
||||||
|
guiMode = 1;
|
||||||
|
gui_toggleGui();
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" void gui_setupGUI()
|
extern "C" void gui_setupGUI()
|
||||||
{
|
{
|
||||||
|
@ -209,29 +408,19 @@ extern "C" void gui_setupGUI()
|
||||||
|
|
||||||
int mWidth = mWindow->getWidth();
|
int mWidth = mWindow->getWidth();
|
||||||
int mHeight = mWindow->getHeight();
|
int mHeight = mWindow->getHeight();
|
||||||
int width = 120;
|
|
||||||
int height = 30;
|
|
||||||
|
|
||||||
// FPS Ticker
|
stats = new StatsWindow();
|
||||||
FPSText = mGUI->createWidget<MyGUI::Widget>
|
map = new MapWindow();
|
||||||
("StaticText",
|
|
||||||
mWidth - width -10, 10, // Position
|
|
||||||
width, height, // Size
|
|
||||||
MyGUI::ALIGN_RIGHT | MyGUI::ALIGN_TOP,
|
|
||||||
"Statistic");
|
|
||||||
FPSText->setTextAlign(MyGUI::ALIGN_RIGHT);
|
|
||||||
FPSText->setNeedMouseFocus(false);
|
|
||||||
FPSText->setTextColour(Ogre::ColourValue::White);
|
|
||||||
|
|
||||||
|
/*
|
||||||
// Window with Morrowind skin
|
// Window with Morrowind skin
|
||||||
mwindow = mGUI->createWidget<MyGUI::Window>
|
mwindow = mGUI->createWidget<MyGUI::Window>
|
||||||
("MW_Window",
|
("MW_Window",
|
||||||
(mWidth-width)/4, (mHeight-height)/4, // Position
|
(mWidth-width)/2, (mHeight-height)/2, // Position
|
||||||
300, 190, // Size
|
400, 190, // Size
|
||||||
MyGUI::ALIGN_DEFAULT, "Windows");
|
MyGUI::ALIGN_DEFAULT, "Windows");
|
||||||
mwindow->setCaption("Skin test");
|
mwindow->setCaption("Skin test");
|
||||||
mwindow->setMinSize(120, 140);
|
mwindow->setMinSize(120, 140);
|
||||||
mwindow->getClientWidget()->setAlpha(0.6);
|
|
||||||
|
|
||||||
MyGUI::WidgetPtr tmp;
|
MyGUI::WidgetPtr tmp;
|
||||||
tmp = mwindow->createWidget<MyGUI::Button>
|
tmp = mwindow->createWidget<MyGUI::Button>
|
||||||
|
@ -242,23 +431,23 @@ extern "C" void gui_setupGUI()
|
||||||
"MWButton1");
|
"MWButton1");
|
||||||
tmp->setCaption("Close");
|
tmp->setCaption("Close");
|
||||||
tmp->eventMouseButtonClick = MyGUI::newDelegate(&turnGuiOff);
|
tmp->eventMouseButtonClick = MyGUI::newDelegate(&turnGuiOff);
|
||||||
tmp->setInheritsAlpha(false);
|
|
||||||
|
|
||||||
tmp = mwindow->createWidget<MyGUI::StaticText>
|
tmp = mwindow->createWidget<MyGUI::StaticText>
|
||||||
("DaedricText_orig",
|
("DaedricText_orig",
|
||||||
10,70,
|
20,80,
|
||||||
300, 20,
|
500, 30,
|
||||||
MyGUI::ALIGN_LEFT | MyGUI::ALIGN_TOP,
|
MyGUI::ALIGN_LEFT | MyGUI::ALIGN_TOP,
|
||||||
"Daed1");
|
"Daed1");
|
||||||
tmp->setCaption("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
|
tmp->setCaption("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
|
||||||
|
|
||||||
tmp = mwindow->createWidget<MyGUI::StaticText>
|
tmp = mwindow->createWidget<MyGUI::StaticText>
|
||||||
("DaedricText",
|
("DaedricText",
|
||||||
10,100,
|
20,130,
|
||||||
300, 20,
|
500, 30,
|
||||||
MyGUI::ALIGN_LEFT | MyGUI::ALIGN_TOP,
|
MyGUI::ALIGN_LEFT | MyGUI::ALIGN_TOP,
|
||||||
"Daed2");
|
"Daed2");
|
||||||
tmp->setCaption("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
|
tmp->setCaption("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
|
||||||
|
*/
|
||||||
|
|
||||||
// Turn the GUI off at startup
|
// Turn the GUI off at startup
|
||||||
turnGuiOff(NULL);
|
turnGuiOff(NULL);
|
||||||
|
@ -266,8 +455,7 @@ extern "C" void gui_setupGUI()
|
||||||
state.X.abs = mWidth / 2;
|
state.X.abs = mWidth / 2;
|
||||||
state.Y.abs = mHeight / 2;
|
state.Y.abs = mHeight / 2;
|
||||||
|
|
||||||
MyGUI::ProgressPtr prog;
|
//*
|
||||||
|
|
||||||
// Set up the HUD
|
// Set up the HUD
|
||||||
hud = new HUD();
|
hud = new HUD();
|
||||||
|
|
||||||
|
@ -281,10 +469,7 @@ extern "C" void gui_setupGUI()
|
||||||
hud->setSpellStatus(65, 100);
|
hud->setSpellStatus(65, 100);
|
||||||
|
|
||||||
hud->setEffect("icons\\s\\tx_s_chameleon.dds");
|
hud->setEffect("icons\\s\\tx_s_chameleon.dds");
|
||||||
}
|
//*/
|
||||||
|
|
||||||
extern "C" void gui_setFpsText(char *str)
|
//new MainMenu();
|
||||||
{
|
|
||||||
if(FPSText != NULL)
|
|
||||||
FPSText->setCaption(str);
|
|
||||||
}
|
}
|
||||||
|
|
255
ogre/gui.d
Normal file
255
ogre/gui.d
Normal file
|
@ -0,0 +1,255 @@
|
||||||
|
/*
|
||||||
|
OpenMW - The completely unofficial reimplementation of Morrowind
|
||||||
|
Copyright (C) 2008-2009 Nicolay Korslund
|
||||||
|
Email: < korslund@gmail.com >
|
||||||
|
WWW: http://openmw.snaptoad.com/
|
||||||
|
|
||||||
|
This file (gui.d) is part of the OpenMW package.
|
||||||
|
|
||||||
|
OpenMW is distributed as free software: you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License
|
||||||
|
version 3, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
version 3 along with this program. If not, see
|
||||||
|
http://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
module ogre.gui;
|
||||||
|
|
||||||
|
import monster.monster;
|
||||||
|
import ogre.bindings;
|
||||||
|
import std.string;
|
||||||
|
|
||||||
|
// Widget class and gui module
|
||||||
|
MonsterClass
|
||||||
|
gmc, // GUI module
|
||||||
|
wid_mc, // Widget
|
||||||
|
but_mc, // Button
|
||||||
|
tex_mc, // StaticText
|
||||||
|
img_mc, // StaticImage
|
||||||
|
pro_mc, // Progress
|
||||||
|
win_mc; // Window
|
||||||
|
|
||||||
|
MWidget[WidgetPtr] gui_store;
|
||||||
|
|
||||||
|
class MWidget
|
||||||
|
{
|
||||||
|
WidgetPtr widget;
|
||||||
|
MonsterObject *mo;
|
||||||
|
|
||||||
|
// Used for layouts
|
||||||
|
bool isLayout;
|
||||||
|
char[] prefix;
|
||||||
|
|
||||||
|
// For layouts
|
||||||
|
this(char[] layout, WidgetPtr parent = null)
|
||||||
|
{
|
||||||
|
assert(layout.length);
|
||||||
|
|
||||||
|
isLayout = true;
|
||||||
|
prefix = format("%s", cast(void*)this);
|
||||||
|
|
||||||
|
widget = gui_loadLayout(layout.ptr, prefix.ptr, parent);
|
||||||
|
if(widget is null)
|
||||||
|
fail("Layout " ~ layout ~ " is empty");
|
||||||
|
|
||||||
|
this();
|
||||||
|
}
|
||||||
|
|
||||||
|
// For normal widgets
|
||||||
|
this(WidgetPtr w)
|
||||||
|
{
|
||||||
|
isLayout = false;
|
||||||
|
widget = w;
|
||||||
|
assert(widget !is null);
|
||||||
|
this();
|
||||||
|
}
|
||||||
|
|
||||||
|
private this()
|
||||||
|
{
|
||||||
|
assert(widget !is null);
|
||||||
|
|
||||||
|
// Create the object from the right class
|
||||||
|
mo = toClass(widget).createObject();
|
||||||
|
// But store the pointer in the Widget's pointer slot
|
||||||
|
mo.getExtra(wid_mc).obj = this;
|
||||||
|
// Also store a lookup for later
|
||||||
|
gui_store[widget] = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
MWidget getChild(char[] name)
|
||||||
|
{
|
||||||
|
if(prefix.length)
|
||||||
|
name = prefix ~ name;
|
||||||
|
|
||||||
|
// Get the child widget
|
||||||
|
auto pt = gui_getChild(widget, name.ptr);
|
||||||
|
|
||||||
|
if(pt is null)
|
||||||
|
fail("Widget has no child named " ~ name);
|
||||||
|
|
||||||
|
// Return the MWidget
|
||||||
|
return get(pt);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the MonsterClass corresponding to a given widget.
|
||||||
|
private static MonsterClass toClass(WidgetPtr p)
|
||||||
|
{
|
||||||
|
switch(widgetType(p))
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
case "Button": return but_mc;
|
||||||
|
case "StaticText": return tex_mc;
|
||||||
|
case "StaticImage": return img_mc;
|
||||||
|
case "Progress": return pro_mc;
|
||||||
|
case "Window": return win_mc;
|
||||||
|
*/
|
||||||
|
default:
|
||||||
|
// Use "Widget" for all unimplemented types
|
||||||
|
case "Widget": return wid_mc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the MWidget (and associatied MonsterObject) corresponding to
|
||||||
|
// a given Widget.
|
||||||
|
static MWidget get(WidgetPtr wid)
|
||||||
|
{
|
||||||
|
// First, check if the instance exists
|
||||||
|
auto p = wid in gui_store;
|
||||||
|
if(p) return *p;
|
||||||
|
|
||||||
|
// No MWidget exists. We have to create one.
|
||||||
|
return new MWidget(wid);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
char[] widgetType(WidgetPtr p)
|
||||||
|
{
|
||||||
|
return toString(gui_widgetType(p));
|
||||||
|
}
|
||||||
|
|
||||||
|
MWidget getMWOwner(MonsterObject *mo)
|
||||||
|
{
|
||||||
|
return (cast(MWidget)mo.getExtra(wid_mc).obj);
|
||||||
|
}
|
||||||
|
MWidget getMWOwner()
|
||||||
|
{
|
||||||
|
return getMWOwner(params.obj());
|
||||||
|
}
|
||||||
|
WidgetPtr getOwner(MonsterObject *mo)
|
||||||
|
{
|
||||||
|
return getMWOwner(mo).widget;
|
||||||
|
}
|
||||||
|
WidgetPtr getOwner()
|
||||||
|
{
|
||||||
|
return getMWOwner().widget;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Widget functions
|
||||||
|
void setCaption()
|
||||||
|
{
|
||||||
|
AIndex[] args = stack.popAArray();
|
||||||
|
|
||||||
|
char[] res;
|
||||||
|
|
||||||
|
foreach(AIndex ind; args)
|
||||||
|
res ~= format("%s", arrays.getRef(ind).carr);
|
||||||
|
|
||||||
|
gui_setCaption(getOwner(), res.ptr);
|
||||||
|
}
|
||||||
|
void setNeedMouseFocus()
|
||||||
|
{ gui_setNeedMouseFocus(getOwner(), stack.popBool); }
|
||||||
|
void setTextColor()
|
||||||
|
{
|
||||||
|
float b = stack.popFloat();
|
||||||
|
float g = stack.popFloat();
|
||||||
|
float r = stack.popFloat();
|
||||||
|
gui_setTextColor(getOwner(), r,g,b);
|
||||||
|
}
|
||||||
|
void setCoord()
|
||||||
|
{
|
||||||
|
int h = stack.popInt();
|
||||||
|
int w = stack.popInt();
|
||||||
|
int y = stack.popInt();
|
||||||
|
int x = stack.popInt();
|
||||||
|
gui_setCoord(getOwner(), x,y,w,h);
|
||||||
|
}
|
||||||
|
|
||||||
|
void get()
|
||||||
|
{
|
||||||
|
// Get the owner MWidget
|
||||||
|
auto mw = getMWOwner();
|
||||||
|
// Get the child
|
||||||
|
mw = mw.getChild(stack.popString8());
|
||||||
|
// Push the object
|
||||||
|
stack.pushObject(mw.mo);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: These are all written to be used with the 'gui' module. Later
|
||||||
|
// they should be part of Widget, and create child widgets. When used
|
||||||
|
// with 'gui' they create root widgets.
|
||||||
|
|
||||||
|
void loadLayout()
|
||||||
|
{
|
||||||
|
MWidget mw = new MWidget(stack.popString8());
|
||||||
|
stack.pushObject(mw.mo);
|
||||||
|
}
|
||||||
|
|
||||||
|
void text()
|
||||||
|
{
|
||||||
|
char[] layer = stack.popString8();
|
||||||
|
int h = stack.popInt();
|
||||||
|
int w = stack.popInt();
|
||||||
|
int y = stack.popInt();
|
||||||
|
int x = stack.popInt();
|
||||||
|
char[] skin = stack.popString8();
|
||||||
|
WidgetPtr ptr = gui_createText(skin.ptr,
|
||||||
|
x,y,w,h,
|
||||||
|
layer.ptr);
|
||||||
|
assert(widgetType(ptr) == "StaticText");
|
||||||
|
MWidget mw = new MWidget(ptr);
|
||||||
|
stack.pushObject(mw.mo);
|
||||||
|
}
|
||||||
|
|
||||||
|
void getWidth()
|
||||||
|
{
|
||||||
|
stack.pushInt(gui_getWidth(null));
|
||||||
|
}
|
||||||
|
|
||||||
|
void getHeight()
|
||||||
|
{
|
||||||
|
stack.pushInt(gui_getHeight(null));
|
||||||
|
}
|
||||||
|
|
||||||
|
void setupGUIScripts()
|
||||||
|
{
|
||||||
|
vm.addPath("mscripts/gui/");
|
||||||
|
vm.addPath("mscripts/gui/module/");
|
||||||
|
gmc = new MonsterClass("gui", "gui.mn");
|
||||||
|
wid_mc = new MonsterClass("Widget", "widget.mn");
|
||||||
|
/*
|
||||||
|
but_mc = new MonsterClass("Button", "button.mn");
|
||||||
|
tex_mc = new MonsterClass("Text", "text.mn");
|
||||||
|
img_mc = new MonsterClass("Image", "image.mn");
|
||||||
|
pro_mc = new MonsterClass("Progress", "progress.mn");
|
||||||
|
win_mc = new MonsterClass("Window", "window.mn");
|
||||||
|
*/
|
||||||
|
|
||||||
|
wid_mc.bind("setCaption", &setCaption);
|
||||||
|
wid_mc.bind("setNeedMouseFocus", &setNeedMouseFocus);
|
||||||
|
wid_mc.bind("setTextColor", &setTextColor);
|
||||||
|
wid_mc.bind("setCoord", &setCoord);
|
||||||
|
wid_mc.bind("get", &get);
|
||||||
|
|
||||||
|
gmc.bind("text", &text);
|
||||||
|
gmc.bind("loadLayout", &loadLayout);
|
||||||
|
gmc.bind("getWidth", &getWidth);
|
||||||
|
gmc.bind("getHeight", &getHeight);
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
OpenMW - The completely unofficial reimplementation of Morrowind
|
OpenMW - The completely unofficial reimplementation of Morrowind
|
||||||
Copyright (C) 2008 Nicolay Korslund
|
Copyright (C) 2008-2009 Nicolay Korslund
|
||||||
Email: < korslund@gmail.com >
|
Email: < korslund@gmail.com >
|
||||||
WWW: http://openmw.snaptoad.com/
|
WWW: http://openmw.snaptoad.com/
|
||||||
|
|
||||||
|
@ -27,6 +27,8 @@ import core.resource;
|
||||||
import core.config;
|
import core.config;
|
||||||
|
|
||||||
import ogre.bindings;
|
import ogre.bindings;
|
||||||
|
import mscripts.setup;
|
||||||
|
|
||||||
import bullet.bindings;
|
import bullet.bindings;
|
||||||
import util.uniquename;
|
import util.uniquename;
|
||||||
import std.stdio;
|
import std.stdio;
|
||||||
|
@ -116,9 +118,12 @@ void setupOgre()
|
||||||
// exterior cells differently, etc.
|
// exterior cells differently, etc.
|
||||||
ogre_makeScene();
|
ogre_makeScene();
|
||||||
|
|
||||||
// Load the GUI elements
|
// Load the GUI system
|
||||||
gui_setupGUI();
|
gui_setupGUI();
|
||||||
|
|
||||||
|
// Run the GUI scripts
|
||||||
|
runGUIScripts();
|
||||||
|
|
||||||
ogreSetup = true;
|
ogreSetup = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
4
openmw.d
4
openmw.d
|
@ -224,6 +224,10 @@ void main(char[][] args)
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(cd.inCell !is null)
|
||||||
|
// Set the name for the GUI (temporary hack)
|
||||||
|
gui_setCellName(cd.inCell.id.ptr);
|
||||||
|
|
||||||
if(render)
|
if(render)
|
||||||
{
|
{
|
||||||
// Warm up OGRE
|
// Warm up OGRE
|
||||||
|
|
Loading…
Reference in a new issue