diff --git a/.gitignore b/.gitignore
index 1fa4d00..2838418 100644
--- a/.gitignore
+++ b/.gitignore
@@ -241,4 +241,5 @@ ModelManifest.xml
# FAKE - F# Make
.fake/
-Client/Simitone/Simitone/
\ No newline at end of file
+Client/Simitone/Simitone/
+Client/Simitone/TS1.Scripts
\ No newline at end of file
diff --git a/Client/Simitone/Simitone.Client/Content/Textures/roof/default_edge.png b/Client/Simitone/Simitone.Client/Content/Textures/roof/default_edge.png
new file mode 100644
index 0000000..919e5db
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/Textures/roof/default_edge.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/Textures/roof/r1__h.png b/Client/Simitone/Simitone.Client/Content/Textures/roof/r1__h.png
new file mode 100644
index 0000000..a4a28f6
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/Textures/roof/r1__h.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/Textures/roof/r1__n.png b/Client/Simitone/Simitone.Client/Content/Textures/roof/r1__n.png
new file mode 100644
index 0000000..5f0f469
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/Textures/roof/r1__n.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/Textures/roof/r2__h.png b/Client/Simitone/Simitone.Client/Content/Textures/roof/r2__h.png
new file mode 100644
index 0000000..6a065a6
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/Textures/roof/r2__h.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/Textures/roof/r2__n.png b/Client/Simitone/Simitone.Client/Content/Textures/roof/r2__n.png
new file mode 100644
index 0000000..2833255
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/Textures/roof/r2__n.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/Textures/roof/r3_.png b/Client/Simitone/Simitone.Client/Content/Textures/roof/r3_.png
new file mode 100644
index 0000000..b90afc9
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/Textures/roof/r3_.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/Textures/roof/r3__n.png b/Client/Simitone/Simitone.Client/Content/Textures/roof/r3__n.png
new file mode 100644
index 0000000..5e22243
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/Textures/roof/r3__n.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/Textures/roof/r4__h.png b/Client/Simitone/Simitone.Client/Content/Textures/roof/r4__h.png
new file mode 100644
index 0000000..da01664
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/Textures/roof/r4__h.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/Textures/roof/r4__n.png b/Client/Simitone/Simitone.Client/Content/Textures/roof/r4__n.png
new file mode 100644
index 0000000..8842b15
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/Textures/roof/r4__n.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_bg.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_bg.png
new file mode 100644
index 0000000..4145c35
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_bg.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_build.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_build.png
new file mode 100644
index 0000000..e2307d1
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_build.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_buy.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_buy.png
new file mode 100644
index 0000000..5cdc0b6
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_buy.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_floordown.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_floordown.png
new file mode 100644
index 0000000..dffe914
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_floordown.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_floorup.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_floorup.png
new file mode 100644
index 0000000..1aea0c9
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_floorup.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_friend.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_friend.png
new file mode 100644
index 0000000..b14670e
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_friend.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_live.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_live.png
new file mode 100644
index 0000000..721855a
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_live.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_opt.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_opt.png
new file mode 100644
index 0000000..ce4e12a
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_opt.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_rotccw.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_rotccw.png
new file mode 100644
index 0000000..11c5ecb
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_rotccw.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_rotcw.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_rotcw.png
new file mode 100644
index 0000000..136d59e
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_rotcw.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_speed1.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_speed1.png
new file mode 100644
index 0000000..001ffaa
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_speed1.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_speed2.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_speed2.png
new file mode 100644
index 0000000..634e7ac
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_speed2.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_speed3.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_speed3.png
new file mode 100644
index 0000000..3dd478e
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_speed3.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_speed4.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_speed4.png
new file mode 100644
index 0000000..c92d0dc
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_speed4.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_w1.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_w1.png
new file mode 100644
index 0000000..3cc6d7f
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_w1.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_w2.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_w2.png
new file mode 100644
index 0000000..baf24f3
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_w2.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_w3.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_w3.png
new file mode 100644
index 0000000..62a6282
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_w3.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_w4.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_w4.png
new file mode 100644
index 0000000..59fb881
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_w4.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_zoomm.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_zoomm.png
new file mode 100644
index 0000000..ad9e422
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_zoomm.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_zoomp.png b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_zoomp.png
new file mode 100644
index 0000000..217734c
Binary files /dev/null and b/Client/Simitone/Simitone.Client/Content/uigraphics/desktop/d_live_zoomp.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/load/load_bar_bg.png b/Client/Simitone/Simitone.Client/Content/uigraphics/load/load_bar_bg.png
index 550a9d0..8ee01f6 100644
Binary files a/Client/Simitone/Simitone.Client/Content/uigraphics/load/load_bar_bg.png and b/Client/Simitone/Simitone.Client/Content/uigraphics/load/load_bar_bg.png differ
diff --git a/Client/Simitone/Simitone.Client/Content/uigraphics/load/load_bar_content.png b/Client/Simitone/Simitone.Client/Content/uigraphics/load/load_bar_content.png
index 91d9d76..526386c 100644
Binary files a/Client/Simitone/Simitone.Client/Content/uigraphics/load/load_bar_content.png and b/Client/Simitone/Simitone.Client/Content/uigraphics/load/load_bar_content.png differ
diff --git a/Client/Simitone/Simitone.Client/Simitone.Client.csproj b/Client/Simitone/Simitone.Client/Simitone.Client.csproj
index 813ddda..f70bf1c 100644
--- a/Client/Simitone/Simitone.Client/Simitone.Client.csproj
+++ b/Client/Simitone/Simitone.Client/Simitone.Client.csproj
@@ -64,6 +64,7 @@
+
@@ -102,6 +103,7 @@
+
@@ -114,6 +116,10 @@
MonoGame.Framework.Windows
False
+
+ {eabea510-3e53-4f19-9f0b-75c5ca9dfa3b}
+ MSDFData
+
{73e2ad5b-720b-4ef3-9b7c-55931d0ec693}
FSO.UI
@@ -221,6 +227,66 @@
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
PreserveNewest
diff --git a/Client/Simitone/Simitone.Client/SimitoneGame.cs b/Client/Simitone/Simitone.Client/SimitoneGame.cs
index 420316a..6bfbe1e 100644
--- a/Client/Simitone/Simitone.Client/SimitoneGame.cs
+++ b/Client/Simitone/Simitone.Client/SimitoneGame.cs
@@ -20,6 +20,7 @@ using FSO.HIT.Model;
using FSO.Client;
using FSO.Files;
using FSO.SimAntics;
+using MSDFData;
namespace Simitone.Client
{
@@ -35,6 +36,7 @@ namespace Simitone.Client
public SimitoneGame() : base()
{
GameFacade.Game = this;
+ GameThread.Game = Thread.CurrentThread;
if (GameFacade.DirectX) TimedReferenceController.SetMode(CacheType.PERMANENT);
Content.RootDirectory = FSOEnvironment.GFXContentDir;
@@ -101,7 +103,8 @@ namespace Simitone.Client
SmoothZoom = settings.SmoothZoom,
SurroundingLots = settings.SurroundingLotMode,
AA = settings.AntiAlias,
- Directional = settings.DirectionalLight3D
+ Directional = settings.DirectionalLight3D,
+ Complex = true
};
OperatingSystem os = Environment.OSVersion;
@@ -204,17 +207,25 @@ namespace Simitone.Client
try
{
GameFacade.MainFont = new FSO.Client.UI.Framework.Font();
- GameFacade.MainFont.AddSize(12, Content.Load("Fonts/Mobile_15px"));
- GameFacade.MainFont.AddSize(15, Content.Load("Fonts/Mobile_20px"));
- GameFacade.MainFont.AddSize(19, Content.Load("Fonts/Mobile_25px"));
- GameFacade.MainFont.AddSize(37, Content.Load("Fonts/Mobile_50px"));
+ //GameFacade.MainFont.AddSize(12, Content.Load("Fonts/Mobile_15px"));
+ //GameFacade.MainFont.AddSize(15, Content.Load("Fonts/Mobile_20px"));
+ //GameFacade.MainFont.AddSize(19, Content.Load("Fonts/Mobile_25px"));
+ //GameFacade.MainFont.AddSize(37, Content.Load("Fonts/Mobile_50px"));
GameFacade.EdithFont = new FSO.Client.UI.Framework.Font();
- GameFacade.EdithFont.AddSize(12, Content.Load("Fonts/Trebuchet_12px"));
- GameFacade.EdithFont.AddSize(14, Content.Load("Fonts/Trebuchet_14px"));
+ //GameFacade.EdithFont.AddSize(12, Content.Load("Fonts/Trebuchet_12px"));
+ //GameFacade.EdithFont.AddSize(14, Content.Load("Fonts/Trebuchet_14px"));
+
+ GameFacade.VectorFont = new FSO.UI.Framework.MSDFFont(Content.Load("../Fonts/mobile"));
+ GameFacade.EdithVectorFont = new FSO.UI.Framework.MSDFFont(Content.Load("../Fonts/trebuchet"));
+ GameFacade.EdithVectorFont.VectorScale = 0.366f;
+ GameFacade.EdithVectorFont.Height = 15;
+ GameFacade.EdithVectorFont.YOff = 11;
+
+ FSO.UI.Framework.MSDFFont.MSDFEffect = Content.Load("Effects/MSDFFont");
vitaboyEffect = Content.Load("Effects/Vitaboy"+((FSOEnvironment.SoftwareDepth)?"iOS":""));
- uiLayer = new UILayer(this, Content.Load("Fonts/FreeSO_12px"), Content.Load("Fonts/FreeSO_16px"));
+ uiLayer = new UILayer(this);
}
catch (Exception e)
{
diff --git a/Client/Simitone/Simitone.Client/UI/Controls/UIStencilButton.cs b/Client/Simitone/Simitone.Client/UI/Controls/UIStencilButton.cs
index ee46190..c85dd8e 100644
--- a/Client/Simitone/Simitone.Client/UI/Controls/UIStencilButton.cs
+++ b/Client/Simitone/Simitone.Client/UI/Controls/UIStencilButton.cs
@@ -18,6 +18,7 @@ namespace Simitone.Client.UI.Controls
public Color HoverColor = Color.Lerp(UIStyle.Current.BtnNormal, UIStyle.Current.BtnActive, 0.5f);
public Color DisabledColor = new Color(128, 128, 128, 255);
public bool Shadow;
+ public Vector3 ShadowParam = new Vector3(3, 3, 0.25f);
public float Alpha { get; set; }
public UIStencilButton(Texture2D tex) : base(tex)
@@ -54,7 +55,7 @@ namespace Simitone.Client.UI.Controls
color = Color; break;
}
if (Shadow)
- DrawLocalTexture(SBatch, Texture, null, new Vector2(3f, 3f), Vector2.One, Color.Black * 0.25f * Alpha);
+ DrawLocalTexture(SBatch, Texture, null, new Vector2(ShadowParam.X, ShadowParam.Y), Vector2.One, Color.Black * ShadowParam.Z * Alpha);
DrawLocalTexture(SBatch, Texture, null, Vector2.Zero, Vector2.One, color * Alpha);
}
}
diff --git a/Client/Simitone/Simitone.Client/UI/Model/UIIconCache.cs b/Client/Simitone/Simitone.Client/UI/Model/UIIconCache.cs
index 7edb07b..31d3f22 100644
--- a/Client/Simitone/Simitone.Client/UI/Model/UIIconCache.cs
+++ b/Client/Simitone/Simitone.Client/UI/Model/UIIconCache.cs
@@ -63,7 +63,7 @@ namespace Simitone.Client.UI.Model
HeadCamera.Target = pos2;
HeadCamera.ProjectionOrigin = new Vector2(74/2, 74/2);
- var HeadScene = new _3DTargetScene(GameFacade.GraphicsDevice, HeadCamera, new Point(74, 74), (GlobalSettings.Default.AntiAlias) ? 8 : 0);
+ var HeadScene = new _3DTargetScene(GameFacade.GraphicsDevice, HeadCamera, new Point(74, 74), (GlobalSettings.Default.AntiAlias > 0) ? 8 : 0);
HeadScene.ID = "UIPieMenuHead";
m_Head.Scene = HeadScene;
diff --git a/Client/Simitone/Simitone.Client/UI/Panels/Desktop/UIDesktopUCP.cs b/Client/Simitone/Simitone.Client/UI/Panels/Desktop/UIDesktopUCP.cs
new file mode 100644
index 0000000..83b353e
--- /dev/null
+++ b/Client/Simitone/Simitone.Client/UI/Panels/Desktop/UIDesktopUCP.cs
@@ -0,0 +1,489 @@
+using FSO.Client;
+using FSO.Client.UI.Controls;
+using FSO.Client.UI.Framework;
+using FSO.Client.UI.Model;
+using FSO.Common;
+using FSO.Common.Rendering.Framework.Model;
+using FSO.Common.Utils;
+using FSO.Content;
+using FSO.HIT;
+using FSO.LotView.RC;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Input;
+using Simitone.Client.UI.Controls;
+using Simitone.Client.UI.Model;
+using Simitone.Client.UI.Screens;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Simitone.Client.UI.Panels.Desktop
+{
+ public class UIDesktopUCP : UICachedContainer
+ {
+ public UIImage Background;
+ public UIImage FriendIcon;
+
+ public UIButton LiveButton;
+ public UIButton BuyButton;
+ public UIButton BuildButton;
+ public UIButton OptionsButton;
+
+ public UILabel MoneyLabel;
+ public UILabel TimeLabel;
+ public UILabel TimeLabelShadow;
+ public UILabel FriendsLabel;
+ public UILabel FriendsLabelShadow;
+ public UILabel FloorLabel;
+ public UILabel FloorLabelShadow;
+
+ public UIButton RoofButton;
+ public UIButton WallsUpButton;
+ public UIButton WallsCutButton;
+ public UIButton WallsDownButton;
+
+ public UIButton FloorUpButton;
+ public UIButton FloorDownButton;
+
+ public UIButton ZoomInButton;
+ public UIButton ZoomOutButton;
+ public UIButton RotateCWButton;
+ public UIButton RotateCCWButton;
+
+ public UIButton[] SpeedButtons;
+
+ private TS1GameScreen Game;
+
+ public Func OnModeClick;
+
+ public string[] FloorNames = new string[]
+ {
+ "1st",
+ "2nd",
+ "3rd",
+ "4th",
+ "5th"
+ };
+
+ public static Dictionary RemapSpeed = new Dictionary()
+ {
+ {0, 4}, //pause
+ {1, 1}, //1 speed
+ {3, 2}, //2 speed
+ {10, 3}, //3 speed
+ };
+
+ public static Dictionary ReverseRemap = RemapSpeed.ToDictionary(x => x.Value, x => x.Key);
+
+ public UIDesktopUCP(TS1GameScreen screen)
+ {
+ Game = screen;
+ var ui = Content.Get().CustomUI;
+ var gd = GameFacade.GraphicsDevice;
+ var sDir = new Vector3(0, 2, 0.5f);
+
+ Background = new UIImage(ui.Get("d_live_bg.png").Get(gd));
+ Add(Background);
+
+ FriendIcon = new UIImage(ui.Get("d_live_friend.png").Get(gd)) { Position = new Vector2(156, 186) };
+ Add(FriendIcon);
+
+ Add(LiveButton = new UIButton(ui.Get("d_live_live.png").Get(gd)) { Position = new Vector2(15, 2) });
+ Add(BuyButton = new UIButton(ui.Get("d_live_buy.png").Get(gd)) { Position = new Vector2(107, 27) });
+ Add(BuildButton = new UIButton(ui.Get("d_live_build.png").Get(gd)) { Position = new Vector2(179, 80) });
+ Add(OptionsButton = new UIButton(ui.Get("d_live_opt.png").Get(gd)) { Position = new Vector2(242, 165) });
+
+ Add(FloorUpButton = new UIStencilButton(ui.Get("d_live_floorup.png").Get(gd)) { Position = new Vector2(16, 150), Shadow = true, ShadowParam = sDir });
+ Add(FloorDownButton = new UIStencilButton(ui.Get("d_live_floordown.png").Get(gd)) { Position = new Vector2(16, 192), Shadow = true, ShadowParam = sDir });
+
+ Add(RoofButton = new UIStencilButton(ui.Get("d_live_w1.png").Get(gd)) { Position = new Vector2(15, 111), Shadow = true, ShadowParam = sDir });
+ Add(WallsUpButton = new UIStencilButton(ui.Get("d_live_w2.png").Get(gd)) { Position = new Vector2(50, 107), Shadow = true, ShadowParam = sDir });
+ Add(WallsCutButton = new UIStencilButton(ui.Get("d_live_w3.png").Get(gd)) { Position = new Vector2(86, 112), Shadow = true, ShadowParam = sDir });
+ Add(WallsDownButton = new UIStencilButton(ui.Get("d_live_w4.png").Get(gd)) { Position = new Vector2(117, 122), Shadow = true, ShadowParam = sDir });
+
+ Add(ZoomInButton = new UIStencilButton(ui.Get("d_live_zoomp.png").Get(gd)) { Position = new Vector2(87, 154) });
+ Add(ZoomOutButton = new UIStencilButton(ui.Get("d_live_zoomm.png").Get(gd)) { Position = new Vector2(87, 196) });
+ Add(RotateCWButton = new UIStencilButton(ui.Get("d_live_rotcw.png").Get(gd)) { Position = new Vector2(62, 175) });
+ Add(RotateCCWButton = new UIStencilButton(ui.Get("d_live_rotccw.png").Get(gd)) { Position = new Vector2(114, 175) });
+
+ SpeedButtons = new UIButton[4];
+ for (int i=0; i<4; i++)
+ {
+ Add(SpeedButtons[i] = new UIStencilButton(ui.Get($"d_live_speed{i+1}.png").Get(gd))
+ {
+ Position = new Vector2(158 + 30 * i, 246),
+ Shadow = true,
+ ShadowParam = sDir
+ });
+ var speed = i + 1;
+ SpeedButtons[i].OnButtonClick += (btn) =>
+ {
+ SwitchSpeed(speed);
+ };
+ }
+
+ var largeStyle = TextStyle.DefaultLabel.Clone();
+ largeStyle.Size = 15;
+ largeStyle.Color = UIStyle.Current.DialogTitle;
+
+ var whiteStyle = TextStyle.DefaultLabel.Clone();
+ whiteStyle.Size = 12;
+ whiteStyle.Color = UIStyle.Current.Text;
+
+ var shadowStyle = TextStyle.DefaultLabel.Clone();
+ shadowStyle.Size = 12;
+ shadowStyle.Color = Color.Black * 0.5f;
+
+ var friendStyle = TextStyle.DefaultLabel.Clone();
+ friendStyle.Size = 12;
+ friendStyle.Color = UIStyle.Current.SecondaryText;
+
+ Add(MoneyLabel = new UILabel()
+ {
+ Position = new Vector2(7, 241),
+ Size = new Vector2(138, 30),
+ Alignment = TextAlignment.Middle | TextAlignment.Center,
+ Caption = "$0",
+ CaptionStyle = largeStyle
+ });
+
+ Add(TimeLabelShadow = new UILabel()
+ {
+ Position = new Vector2(157, 221+2),
+ Size = new Vector2(114, 16),
+ Alignment = TextAlignment.Middle | TextAlignment.Center,
+ Caption = "12:00AM",
+ CaptionStyle = shadowStyle
+ });
+
+ Add(TimeLabel = new UILabel()
+ {
+ Position = new Vector2(157, 221),
+ Size = new Vector2(114, 16),
+ Alignment = TextAlignment.Middle | TextAlignment.Center,
+ Caption = "12:00AM",
+ CaptionStyle = whiteStyle
+ });
+
+ Add(FriendsLabelShadow = new UILabel()
+ {
+ Position = new Vector2(176, 184+2),
+ Alignment = TextAlignment.Top | TextAlignment.Left,
+ Caption = "0",
+ CaptionStyle = shadowStyle
+ });
+
+ Add(FriendsLabel = new UILabel()
+ {
+ Position = new Vector2(176, 184),
+ Alignment = TextAlignment.Top | TextAlignment.Left,
+ Caption = "0",
+ CaptionStyle = friendStyle
+ });
+
+ Add(FloorLabelShadow = new UILabel()
+ {
+ Position = new Vector2(22, 184+2),
+ Size = new Vector2(24, 15),
+ Alignment = TextAlignment.Center | TextAlignment.Middle,
+ Caption = "1st",
+ CaptionStyle = shadowStyle
+ });
+
+ Add(FloorLabel = new UILabel()
+ {
+ Position = new Vector2(22, 184),
+ Size = new Vector2(24, 15),
+ Alignment = TextAlignment.Center | TextAlignment.Middle,
+ Caption = "1st",
+ CaptionStyle = whiteStyle
+ });
+
+ RoofButton.OnButtonClick += (btn) => SetCut(3);
+ WallsUpButton.OnButtonClick += (btn) => SetCut(2);
+ WallsCutButton.OnButtonClick += (btn) => SetCut(1);
+ WallsDownButton.OnButtonClick += (btn) => SetCut(0);
+
+ LiveButton.OnButtonClick += (btn) => OnModeClick?.Invoke(UIMainPanelMode.LIVE);
+ BuyButton.OnButtonClick += (btn) => OnModeClick?.Invoke(UIMainPanelMode.BUY);
+ BuildButton.OnButtonClick += (btn) => OnModeClick?.Invoke(UIMainPanelMode.BUILD);
+ OptionsButton.OnButtonClick += (btn) => OnModeClick?.Invoke(UIMainPanelMode.OPTIONS);
+
+ ZoomInButton.OnButtonClick += ZoomControl;
+ ZoomOutButton.OnButtonClick += ZoomControl;
+ RotateCWButton.OnButtonClick += RotateClockwise;
+ RotateCCWButton.OnButtonClick += RotateCounterClockwise;
+
+ FloorUpButton.OnButtonClick += (b) => { if (Game.Level < 5) Game.Level++; };
+ FloorDownButton.OnButtonClick += (b) => { if (Game.Level > 1) Game.Level--; };
+
+ Size = new Vector2(Background.Width, Background.Height);
+
+ UpdateBuildBuy();
+ UpdateMoneyDisplay();
+ UpdateZoomButton();
+ }
+
+ private void ZoomControl(UIElement button)
+ {
+ if (FSOEnvironment.Enable3D) return;
+ Game.ZoomLevel = (Game.ZoomLevel + ((button == ZoomInButton) ? -1 : 1));
+ }
+
+ private void RotateCounterClockwise(UIElement button)
+ {
+ if (FSOEnvironment.Enable3D) return;
+ var newRot = (Game.Rotation - 1);
+ if (newRot < 0) newRot = 3;
+ Game.Rotation = newRot;
+ }
+
+ private void RotateClockwise(UIElement button)
+ {
+ if (FSOEnvironment.Enable3D) return;
+ Game.Rotation = (Game.Rotation + 1) % 4;
+ }
+
+ private string LastClock = "";
+ private int LastSpeed = -1;
+ private int LastCut;
+ private int LastMoney = 0;
+ private sbyte LastFloor = 0;
+ private int LastZoom;
+ public override void Update(UpdateState state)
+ {
+ var vm = Game.vm;
+ var min = vm.Context.Clock.Minutes;
+ var hour = vm.Context.Clock.Hours;
+
+ string suffix = (hour > 11) ? "PM" : "AM";
+ hour %= 12;
+ if (hour == 0) hour = 12;
+
+ var text = hour.ToString() + ":" + min.ToString().PadLeft(2, '0') + " " + suffix;
+
+ if (text != LastClock)
+ {
+ LastClock = text;
+ TimeLabel.Caption = text;
+ TimeLabelShadow.Caption = text;
+ }
+
+ if (Game.Level != LastFloor)
+ {
+ LastFloor = Game.Level;
+ FloorLabel.Caption = FloorNames[LastFloor - 1];
+ FloorLabelShadow.Caption = FloorNames[LastFloor - 1];
+ FloorDownButton.Disabled = LastFloor == 1;
+ FloorUpButton.Disabled = LastFloor == 5;
+ }
+
+ var speed = RemapSpeed[Math.Max(0, vm.SpeedMultiplier)];
+ if (speed != LastSpeed)
+ {
+ /*
+ if (speed == 4) InnerBg.Texture = Content.Get().CustomUI.Get("clockinbg_pause.png").Get(GameFacade.GraphicsDevice);
+ else if (LastSpeed == 4) InnerBg.Texture = Content.Get().CustomUI.Get("clockinbg.png").Get(GameFacade.GraphicsDevice);
+ */
+
+ for (int i = 0; i < 4; i++)
+ {
+ SpeedButtons[i].Selected = (i + 1 == speed);
+ }
+ LastSpeed = speed;
+ }
+
+ if (LastCut != Game.LotControl.WallsMode)
+ {
+ LastCut = Game.LotControl.WallsMode;
+ var ui = Content.Get().CustomUI;
+
+ RoofButton.Selected = LastCut == 3;
+ WallsUpButton.Selected = LastCut == 2;
+ WallsCutButton.Selected = LastCut == 1;
+ WallsDownButton.Selected = LastCut == 0;
+ }
+
+ var money = GetMoney();
+ if (LastMoney != money)
+ {
+ DisplayChange(money - LastMoney);
+ LastMoney = money;
+ UpdateMoneyDisplay();
+ }
+
+ if (LastZoom != Game.ZoomLevel) UpdateZoomButton();
+
+ base.Update(state);
+
+ //KEY SHORTCUTS
+ var keys = state.NewKeys;
+ var nofocus = true;
+ if (Game.InLot)
+ {
+ if (keys.Contains(Keys.F1) && !LiveButton.Disabled) OnModeClick?.Invoke(UIMainPanelMode.LIVE);
+ if (keys.Contains(Keys.F2) && !BuyButton.Disabled) OnModeClick?.Invoke(UIMainPanelMode.BUY);
+ if (keys.Contains(Keys.F3) && !BuildButton.Disabled) OnModeClick?.Invoke(UIMainPanelMode.BUILD);
+ if (keys.Contains(Keys.F4)) OnModeClick?.Invoke(UIMainPanelMode.OPTIONS); // Options Panel
+
+ if (nofocus)
+ {
+ if (FSOEnvironment.Enable3D)
+ {
+ //if the zoom or rotation buttons are down, gradually change their values.
+ if (RotateCWButton.IsDown || state.KeyboardState.IsKeyDown(Keys.OemPeriod)) ((WorldStateRC)Game.vm.Context.World.State).RotationX += 2f / FSOEnvironment.RefreshRate;
+ if (RotateCCWButton.IsDown || state.KeyboardState.IsKeyDown(Keys.OemComma)) ((WorldStateRC)Game.vm.Context.World.State).RotationX -= 2f / FSOEnvironment.RefreshRate;
+ if (ZoomInButton.IsDown || (state.KeyboardState.IsKeyDown(Keys.OemPlus) && !state.CtrlDown)) Game.LotControl.TargetZoom = Math.Max(0.25f, Math.Min(Game.LotControl.TargetZoom + 1f / FSOEnvironment.RefreshRate, 2));
+ if (ZoomOutButton.IsDown || (state.KeyboardState.IsKeyDown(Keys.OemMinus) && !state.CtrlDown)) Game.LotControl.TargetZoom = Math.Max(0.25f, Math.Min(Game.LotControl.TargetZoom - 1f / FSOEnvironment.RefreshRate, 2));
+ }
+ else
+ {
+ if (keys.Contains(Keys.OemPlus) && !state.CtrlDown && !ZoomInButton.Disabled) { Game.ZoomLevel -= 1; UpdateZoomButton(); }
+ if (keys.Contains(Keys.OemMinus) && !state.CtrlDown && !ZoomOutButton.Disabled) { Game.ZoomLevel += 1; UpdateZoomButton(); }
+ if (keys.Contains(Keys.OemComma)) RotateCounterClockwise(null);
+ if (keys.Contains(Keys.OemPeriod)) RotateClockwise(null);
+ }
+ if (keys.Contains(Keys.PageDown)) { if (Game.Level > 1) Game.Level--; }
+ if (keys.Contains(Keys.PageUp)) { if (Game.Level < 5) Game.Level++; }
+ if (keys.Contains(Keys.Home)) UpdateWallsViewKeyHandler(1);
+ if (keys.Contains(Keys.End)) UpdateWallsViewKeyHandler(0);
+ }
+ }
+ }
+
+ private void UpdateWallsViewKeyHandler(int type)
+ {
+ var mode = Game.LotControl.WallsMode;
+ switch (type)
+ {
+ case 0:
+ if (mode > 0) Game.LotControl.WallsMode -= 1;
+ break;
+ case 1:
+ if (mode < 3) Game.LotControl.WallsMode += 1;
+ break;
+ }
+ }
+
+ public void UpdateZoomButton()
+ {
+ ZoomInButton.Disabled = (!Game.InLot) || (!FSOEnvironment.Enable3D && (Game.ZoomLevel == 1));
+ ZoomOutButton.Disabled = (!FSOEnvironment.Enable3D && (Game.ZoomLevel == 3));
+ LastZoom = Game.ZoomLevel;
+ }
+
+ public void SetMode(UIMainPanelMode mode)
+ {
+ LiveButton.Selected = mode == UIMainPanelMode.LIVE;
+ BuyButton.Selected = mode == UIMainPanelMode.BUY;
+ BuildButton.Selected = mode == UIMainPanelMode.BUILD;
+ OptionsButton.Selected = mode == UIMainPanelMode.OPTIONS;
+ }
+
+ public void DisplayChange(int change)
+ {
+ var newLabel = new UILabel();
+ newLabel.Position = MoneyLabel.Position;
+ newLabel.Y += -20f;
+ newLabel.CaptionStyle = MoneyLabel.CaptionStyle.Clone();
+ newLabel.CaptionStyle.Size = 15;
+ newLabel.CaptionStyle.Color = (change > 0) ? UIStyle.Current.Text : UIStyle.Current.NegMoney;
+ newLabel.Alignment = FSO.Client.UI.Framework.TextAlignment.Right | FSO.Client.UI.Framework.TextAlignment.Middle;
+ newLabel.Size = MoneyLabel.Size;
+
+ newLabel.Caption = ((change > 0) ? "+" : "-") + "§" + Math.Abs(change);
+ DynamicOverlay.Add(newLabel);
+
+ GameFacade.Screens.Tween.To(newLabel, 1.5f, new Dictionary() { { "Y", newLabel.Y-30 }, { "Opacity", 0 } });
+ GameThread.SetTimeout(() => { Remove(newLabel); }, 1500);
+ }
+
+ private void UpdateMoneyDisplay()
+ {
+ MoneyLabel.Caption = "§" + LastMoney.ToString("##,#0");
+ MoneyLabel.Visible = Game.vm.GetGlobalValue(32) == 0;
+ }
+
+ private int GetMoney()
+ {
+ return Game.ActiveFamily?.Budget ?? 0;
+ }
+
+ public void UpdateBuildBuy()
+ {
+ var bbEnable = Game.vm.Context.Architecture.BuildBuyEnabled;
+ BuyButton.Disabled = !bbEnable;
+ BuildButton.Disabled = !bbEnable;
+ LiveButton.Disabled = Game.vm.GetGlobalValue(32) != 0;
+ }
+
+ public void SetCut(int cut)
+ {
+ Game.LotControl.World.State.DrawRoofs = (cut == 3);
+ Game.LotControl.WallsMode = cut;
+ }
+
+ public void SwitchSpeed(int speed)
+ {
+ var vm = Game.vm;
+ if (vm.SpeedMultiplier == -1) return;
+ switch (vm.SpeedMultiplier)
+ {
+ case 0:
+ switch (speed)
+ {
+ case 1:
+ HITVM.Get().PlaySoundEvent(UISounds.SpeedPTo1); break;
+ case 2:
+ HITVM.Get().PlaySoundEvent(UISounds.SpeedPTo2); break;
+ case 3:
+ HITVM.Get().PlaySoundEvent(UISounds.SpeedPTo3); break;
+ }
+ break;
+ case 1:
+ switch (speed)
+ {
+ case 4:
+ HITVM.Get().PlaySoundEvent(UISounds.Speed1ToP); break;
+ case 2:
+ HITVM.Get().PlaySoundEvent(UISounds.Speed1To2); break;
+ case 3:
+ HITVM.Get().PlaySoundEvent(UISounds.Speed1To3); break;
+ }
+ break;
+ case 3:
+ switch (speed)
+ {
+ case 4:
+ HITVM.Get().PlaySoundEvent(UISounds.Speed2ToP); break;
+ case 1:
+ HITVM.Get().PlaySoundEvent(UISounds.Speed2To1); break;
+ case 3:
+ HITVM.Get().PlaySoundEvent(UISounds.Speed2To3); break;
+ }
+ break;
+ case 10:
+ switch (speed)
+ {
+ case 4:
+ HITVM.Get().PlaySoundEvent(UISounds.Speed3ToP); break;
+ case 1:
+ HITVM.Get().PlaySoundEvent(UISounds.Speed3To1); break;
+ case 2:
+ HITVM.Get().PlaySoundEvent(UISounds.Speed3To2); break;
+ }
+ break;
+ }
+
+ switch (speed)
+ {
+ case 4: vm.SpeedMultiplier = 0; break;
+ case 1: vm.SpeedMultiplier = 1; break;
+ case 2: vm.SpeedMultiplier = 3; break;
+ case 3: vm.SpeedMultiplier = 10; break;
+ }
+ }
+ }
+}
diff --git a/Client/Simitone/Simitone.Client/UI/Panels/LiveSubpanels/UIBuyBrowsePanel.cs b/Client/Simitone/Simitone.Client/UI/Panels/LiveSubpanels/UIBuyBrowsePanel.cs
index b01f65b..9771401 100644
--- a/Client/Simitone/Simitone.Client/UI/Panels/LiveSubpanels/UIBuyBrowsePanel.cs
+++ b/Client/Simitone/Simitone.Client/UI/Panels/LiveSubpanels/UIBuyBrowsePanel.cs
@@ -777,9 +777,9 @@ namespace Simitone.Client.UI.Panels.LiveSubpanels
public override void GameResized()
{
- CatContainer.Size = new Vector2(UIScreen.Current.ScreenWidth - 342, 128);
- if (ChoosingSub) Reset();
base.GameResized();
+ CatContainer.Size = new Vector2(Size.X, 128);
+ if (ChoosingSub) Reset();
}
public override void Update(UpdateState state)
diff --git a/Client/Simitone/Simitone.Client/UI/Panels/LiveSubpanels/UISubpanel.cs b/Client/Simitone/Simitone.Client/UI/Panels/LiveSubpanels/UISubpanel.cs
index a1c27ba..436b252 100644
--- a/Client/Simitone/Simitone.Client/UI/Panels/LiveSubpanels/UISubpanel.cs
+++ b/Client/Simitone/Simitone.Client/UI/Panels/LiveSubpanels/UISubpanel.cs
@@ -19,7 +19,7 @@ namespace Simitone.Client.UI.Panels.LiveSubpanels
{
Opacity = 0;
var screenWidth = GameFacade.Screens.CurrentUIScreen.ScreenWidth;
- Size = new Vector2(screenWidth-342, 128);
+ Size = new Vector2(screenWidth - (342 + (game.Desktop?100:0)), 128);
GameFacade.Screens.Tween.To(this, 0.3f, new Dictionary() { { "Opacity", 1f } });
Game = game;
}
@@ -27,7 +27,7 @@ namespace Simitone.Client.UI.Panels.LiveSubpanels
public override void GameResized()
{
var screenWidth = UIScreen.Current.ScreenWidth;
- Size = new Vector2(screenWidth - 342, 128);
+ Size = new Vector2(screenWidth - (342 + (Game.Desktop ? 100 : 0)), 128);
base.GameResized();
}
diff --git a/Client/Simitone/Simitone.Client/UI/Panels/LotControls/UISelectSkinAlert.cs b/Client/Simitone/Simitone.Client/UI/Panels/LotControls/UISelectSkinAlert.cs
index 68ef40b..9b577eb 100644
--- a/Client/Simitone/Simitone.Client/UI/Panels/LotControls/UISelectSkinAlert.cs
+++ b/Client/Simitone/Simitone.Client/UI/Panels/LotControls/UISelectSkinAlert.cs
@@ -126,7 +126,7 @@ namespace Simitone.Client.UI.Panels.LotControls
}
Camera = new BasicCamera(GameFacade.GraphicsDevice, new Vector3(5, 1, 0), new Vector3(0, 0, 0), new Vector3(0, 1, 0));
Camera.NearPlane = 0.001f;
- Scene = new _3DTargetScene(GameFacade.GraphicsDevice, Camera, new Point(1030, 500), GlobalSettings.Default.AntiAlias?8:0);
+ Scene = new _3DTargetScene(GameFacade.GraphicsDevice, Camera, new Point(1030, 500), (GlobalSettings.Default.AntiAlias > 0)?8:0);
Scene.Initialize(GameFacade.Scenes);
InitializeLot();
diff --git a/Client/Simitone/Simitone.Client/UI/Panels/UILoadProgress.cs b/Client/Simitone/Simitone.Client/UI/Panels/UILoadProgress.cs
index 6151e77..0c7ed8d 100644
--- a/Client/Simitone/Simitone.Client/UI/Panels/UILoadProgress.cs
+++ b/Client/Simitone/Simitone.Client/UI/Panels/UILoadProgress.cs
@@ -17,6 +17,20 @@ namespace Simitone.Client.UI.Panels
{
public int[] Divisors = new int[]
{
+ 237,
+ 328,
+ 398,
+ 456,
+ 507,
+ 556,
+ 609,
+ 680,
+ 731,
+ 781,
+ 832,
+ 920
+
+ /*
140,
243,
278,
@@ -30,6 +44,7 @@ namespace Simitone.Client.UI.Panels
723,
814,
884
+ */
};
public float OddTransition { get; set; }
diff --git a/Client/Simitone/Simitone.Client/UI/Panels/UILotControl.cs b/Client/Simitone/Simitone.Client/UI/Panels/UILotControl.cs
index 7e02632..feaac72 100644
--- a/Client/Simitone/Simitone.Client/UI/Panels/UILotControl.cs
+++ b/Client/Simitone/Simitone.Client/UI/Panels/UILotControl.cs
@@ -327,13 +327,12 @@ namespace Simitone.Client.UI.Panels
private void DialogResponse(byte code)
{
- if (BlockingDialog == null || !(BlockingDialog is UIMobileAlert) || ActiveEntity == null) return;
+ if (BlockingDialog == null || !(BlockingDialog is UIMobileAlert)) return;
BlockingDialog.Close();
var ma = (UIMobileAlert)BlockingDialog;
LastDialogID = 0;
vm.SendCommand(new VMNetDialogResponseCmd
{
- ActorUID = ActiveEntity.PersistID,
ResponseCode = code,
ResponseText = (ma.ResponseText == null) ? "" : ma.ResponseText
});
@@ -671,6 +670,20 @@ namespace Simitone.Client.UI.Panels
//MouseCutRect = new Rectangle(0,0,0,0);
}
+ public void SetTargetZoom(WorldZoom zoom)
+ {
+ switch (zoom)
+ {
+ case WorldZoom.Near:
+ TargetZoom = 1f; break;
+ case WorldZoom.Medium:
+ TargetZoom = 0.5f; break;
+ case WorldZoom.Far:
+ TargetZoom = 0.25f; break;
+ }
+ LastZoom = World.State.Zoom;
+ }
+
public override void Draw(UISpriteBatch batch)
{
//DrawLocalTexture(batch, World.State.Light.LightMap, new Rectangle(0,0, World.State.Light.LightMap.Width/3, World.State.Light.LightMap.Height/2), new Vector2());
@@ -681,6 +694,7 @@ namespace Simitone.Client.UI.Panels
base.Draw(batch);
}
+ private WorldZoom LastZoom;
public override void Update(UpdateState state)
{
base.Update(state);
@@ -695,6 +709,13 @@ namespace Simitone.Client.UI.Panels
}
else
{
+ if (World.State.Zoom != LastZoom)
+ {
+ //zoom has been changed by something else. inherit the value
+ SetTargetZoom(World.State.Zoom);
+ LastZoom = World.State.Zoom;
+ }
+
float BaseScale;
WorldZoom targetZoom;
if (TargetZoom < 0.5f)
diff --git a/Client/Simitone/Simitone.Client/UI/Panels/UIMainPanel.cs b/Client/Simitone/Simitone.Client/UI/Panels/UIMainPanel.cs
index 605ff64..6cf5f4e 100644
--- a/Client/Simitone/Simitone.Client/UI/Panels/UIMainPanel.cs
+++ b/Client/Simitone/Simitone.Client/UI/Panels/UIMainPanel.cs
@@ -110,32 +110,39 @@ namespace Simitone.Client.UI.Panels
var ui = Content.Get().CustomUI;
Div = ui.Get("panel_div.png").Get(GameFacade.GraphicsDevice);
- FloorUpBtn = new UIStencilButton(ui.Get("level_up.png").Get(GameFacade.GraphicsDevice));
- FloorUpBtn.Position = new Vector2(80, 10);
- FloorUpBtn.OnButtonClick += (b) => { if (Game.Level < 5) Game.Level++; };
- Add(FloorUpBtn);
+ if (!Game.Desktop)
+ {
+ FloorUpBtn = new UIStencilButton(ui.Get("level_up.png").Get(GameFacade.GraphicsDevice));
+ FloorUpBtn.Position = new Vector2(80, 10);
+ FloorUpBtn.OnButtonClick += (b) => { if (Game.Level < 5) Game.Level++; };
+ Add(FloorUpBtn);
- FloorDownBtn = new UIStencilButton(ui.Get("level_down.png").Get(GameFacade.GraphicsDevice));
- FloorDownBtn.Position = new Vector2(80, 68);
- FloorDownBtn.OnButtonClick += (b) => { if (Game.Level > 1) Game.Level--; };
- Add(FloorDownBtn);
+ FloorDownBtn = new UIStencilButton(ui.Get("level_down.png").Get(GameFacade.GraphicsDevice));
+ FloorDownBtn.Position = new Vector2(80, 68);
+ FloorDownBtn.OnButtonClick += (b) => { if (Game.Level > 1) Game.Level--; };
+ Add(FloorDownBtn);
- FloorLabel = new UILabel();
- FloorLabel.CaptionStyle = FloorLabel.CaptionStyle.Clone();
- FloorLabel.CaptionStyle.Size = 15;
- FloorLabel.CaptionStyle.Color = UIStyle.Current.Text;
- FloorLabel.Alignment = TextAlignment.Middle | TextAlignment.Center;
- FloorLabel.Position = new Vector2(80, 64);
- FloorLabel.Size = new Vector2(51, 18);
+ FloorLabel = new UILabel();
+ FloorLabel.CaptionStyle = FloorLabel.CaptionStyle.Clone();
+ FloorLabel.CaptionStyle.Size = 15;
+ FloorLabel.CaptionStyle.Color = UIStyle.Current.Text;
+ FloorLabel.Alignment = TextAlignment.Middle | TextAlignment.Center;
+ FloorLabel.Position = new Vector2(80, 64);
+ FloorLabel.Size = new Vector2(51, 18);
- FloorLabelShadow = new UILabel();
- FloorLabelShadow.CaptionStyle = FloorLabel.CaptionStyle.Clone();
- FloorLabelShadow.Alignment = TextAlignment.Middle | TextAlignment.Center;
- FloorLabelShadow.Position = new Vector2(83, 67);
- FloorLabelShadow.Size = new Vector2(51, 18);
- FloorLabelShadow.CaptionStyle.Color = Color.Black * 0.5f;
- Add(FloorLabelShadow);
- Add(FloorLabel);
+ FloorLabelShadow = new UILabel();
+ FloorLabelShadow.CaptionStyle = FloorLabel.CaptionStyle.Clone();
+ FloorLabelShadow.Alignment = TextAlignment.Middle | TextAlignment.Center;
+ FloorLabelShadow.Position = new Vector2(83, 67);
+ FloorLabelShadow.Size = new Vector2(51, 18);
+ FloorLabelShadow.CaptionStyle.Color = Color.Black * 0.5f;
+ Add(FloorLabelShadow);
+ Add(FloorLabel);
+
+ Divider = new UIImage(ui.Get("divider.png").Get(GameFacade.GraphicsDevice));
+ Divider.Position = new Vector2(146, 29);
+ Add(Divider);
+ }
HideButton = new UIStencilButton(ui.Get("panel_hide.png").Get(GameFacade.GraphicsDevice));
HideButton.X = Game.ScreenWidth - (50 + 64 + 15);
@@ -143,12 +150,8 @@ namespace Simitone.Client.UI.Panels
HideButton.OnButtonClick += (b) => { Close(); };
Add(HideButton);
- Divider = new UIImage(ui.Get("divider.png").Get(GameFacade.GraphicsDevice));
- Divider.Position = new Vector2(146, 29);
- Add(Divider);
-
Switcher = new UICategorySwitcher();
- Switcher.Position = new Vector2(164, 0);
+ Switcher.Position = new Vector2(164 - (Game.Desktop ? 16 : 0), 0);
Switcher.InitCategories(LiveCategories);
Switcher.OnCategorySelect += Switcher_OnCategorySelect;
Switcher.OnOpen += Switcher_OnOpen;
@@ -159,7 +162,7 @@ namespace Simitone.Client.UI.Panels
fade.Opacity = 0;
}
- Game.LotControl.QueryPanel.Position = new Vector2(53, -5);
+ Game.LotControl.QueryPanel.Position = new Vector2(53 + (Game.Desktop ? 25 : 0), -5);
Add(Game.LotControl.QueryPanel);
Game.LotControl.PickupPanel.Opacity = 0;
Add(Game.LotControl.PickupPanel);
@@ -312,8 +315,18 @@ namespace Simitone.Client.UI.Panels
public UIElement[] GetFadeables()
{
- return new UIElement[]
+ if (Game.Desktop)
{
+ return new UIElement[]
+ {
+ Switcher.MainButton,
+ HideButton
+ };
+ }
+ else
+ {
+ return new UIElement[]
+ {
FloorUpBtn,
FloorDownBtn,
FloorLabel,
@@ -321,7 +334,8 @@ namespace Simitone.Client.UI.Panels
Switcher.MainButton,
Divider,
HideButton
- };
+ };
+ }
}
public override void Draw(UISpriteBatch batch)
@@ -347,13 +361,16 @@ namespace Simitone.Client.UI.Panels
base.Update(state);
Visible = _CurWidth > 0;
- if (Game.Level != LastFloor)
+ if (!Game.Desktop)
{
- LastFloor = Game.Level;
- FloorLabel.Caption = FloorNames[LastFloor - 1];
- FloorLabelShadow.Caption = FloorNames[LastFloor - 1];
- FloorDownBtn.Disabled = LastFloor == 1;
- FloorUpBtn.Disabled = LastFloor == 5;
+ if (Game.Level != LastFloor)
+ {
+ LastFloor = Game.Level;
+ FloorLabel.Caption = FloorNames[LastFloor - 1];
+ FloorLabelShadow.Caption = FloorNames[LastFloor - 1];
+ FloorDownBtn.Disabled = LastFloor == 1;
+ FloorUpBtn.Disabled = LastFloor == 5;
+ }
}
Game.LotControl.PickupPanel.Visible = Game.LotControl.PickupPanel.Opacity > 0;
@@ -370,7 +387,7 @@ namespace Simitone.Client.UI.Panels
public void Open()
{
Visible = true;
- GameFacade.Screens.Tween.To(this, 0.5f, new Dictionary() { { "CurWidth", GameFacade.Screens.CurrentUIScreen.ScreenWidth-(64+15)} }, TweenQuad.EaseOut);
+ GameFacade.Screens.Tween.To(this, 0.5f, new Dictionary() { { "CurWidth", GameFacade.Screens.CurrentUIScreen.ScreenWidth-X} }, TweenQuad.EaseOut);
foreach (var fade in GetFadeables())
{
GameFacade.Screens.Tween.To(fade, 0.3f, new Dictionary() { { "Opacity", 1f } });
@@ -420,8 +437,8 @@ namespace Simitone.Client.UI.Panels
public override void GameResized()
{
base.GameResized();
- if (PanelActive) CurWidth = Game.ScreenWidth - (64 + 15);
- HideButton.X = Game.ScreenWidth - (50 + 64 + 15);
+ if (PanelActive) CurWidth = Game.ScreenWidth - X;
+ HideButton.X = Game.ScreenWidth - (50 + X);
}
}
diff --git a/Client/Simitone/Simitone.Client/UI/Panels/UIObjectHolder.cs b/Client/Simitone/Simitone.Client/UI/Panels/UIObjectHolder.cs
index 5172148..e3c1a7e 100644
--- a/Client/Simitone/Simitone.Client/UI/Panels/UIObjectHolder.cs
+++ b/Client/Simitone/Simitone.Client/UI/Panels/UIObjectHolder.cs
@@ -76,7 +76,7 @@ namespace Simitone.Client.UI.Panels
for (int i = 0; i < Group.Objects.Count; i++)
{
var target = Group.Objects[i];
- target.SetRoom(65534);
+ target.SetRoom(65535);
if (target is VMGameObject) ((ObjectComponent)target.WorldUI).ForceDynamic = true;
CursorTiles[i] = vm.Context.CreateObjectInstance(0x00000437, new LotTilePos(target.Position), FSO.LotView.Model.Direction.NORTH, true).Objects[0];
CursorTiles[i].SetPosition(target.Position, Direction.NORTH, vm.Context);
diff --git a/Client/Simitone/Simitone.Client/UI/Panels/UIPieMenu.cs b/Client/Simitone/Simitone.Client/UI/Panels/UIPieMenu.cs
index b8367f4..0d6ddd5 100644
--- a/Client/Simitone/Simitone.Client/UI/Panels/UIPieMenu.cs
+++ b/Client/Simitone/Simitone.Client/UI/Panels/UIPieMenu.cs
@@ -60,6 +60,7 @@ namespace Simitone.Client.UI.Panels
this.ButtonStyle = new TextStyle
{
Font = GameFacade.MainFont,
+ VFont = GameFacade.VectorFont,
Size = 12,
Color = new Color(0xA5, 0xC3, 0xD6),
SelectedColor = new Color(0x00, 0xFF, 0xFF),
@@ -133,7 +134,7 @@ namespace Simitone.Client.UI.Panels
HeadCamera.Position = new Vector3(0, pos2.Y, 12.5f);
HeadCamera.Target = pos2;
- HeadScene = new _3DTargetScene(GameFacade.GraphicsDevice, HeadCamera, new Point((int)(200 * TrueScale), (int)(200 * TrueScale)), (GlobalSettings.Default.AntiAlias) ? 8 : 0);
+ HeadScene = new _3DTargetScene(GameFacade.GraphicsDevice, HeadCamera, new Point((int)(200 * TrueScale), (int)(200 * TrueScale)), (GlobalSettings.Default.AntiAlias > 0) ? 8 : 0);
HeadScene.ID = "UIPieMenuHead";
m_Head.Scene = HeadScene;
diff --git a/Client/Simitone/Simitone.Client/UI/Panels/UISimitoneFrontend.cs b/Client/Simitone/Simitone.Client/UI/Panels/UISimitoneFrontend.cs
index 55d16ac..1af29ff 100644
--- a/Client/Simitone/Simitone.Client/UI/Panels/UISimitoneFrontend.cs
+++ b/Client/Simitone/Simitone.Client/UI/Panels/UISimitoneFrontend.cs
@@ -16,6 +16,7 @@ using Microsoft.Xna.Framework.Input;
using FSO.SimAntics;
using FSO.SimAntics.NetPlay.Model.Commands;
using FSO.HIT;
+using Simitone.Client.UI.Panels.Desktop;
namespace Simitone.Client.UI.Panels
{
@@ -29,6 +30,7 @@ namespace Simitone.Client.UI.Panels
public UIMainPanel MainPanel;
public UIStencilButton ExtendPanelBtn;
public UIModeSwitcher ModeSwitcher;
+ public UIDesktopUCP DesktopUCP;
public bool PanelActive;
public int LastCut = 0;
@@ -36,48 +38,62 @@ namespace Simitone.Client.UI.Panels
public UISimitoneFrontend(TS1GameScreen screen)
{
var ui = Content.Get().CustomUI;
-
- CutBtn = new UITwoStateButton(ui.Get("cut_btn_down.png").Get(GameFacade.GraphicsDevice));
- CutBtn.X = screen.ScreenWidth - (256 + 15);
- CutBtn.Y = 15;
- CutBtn.OnButtonClick += CutButton;
- Add(CutBtn);
-
- Clock = new UIClockPanel(screen.vm);
- Clock.X = screen.ScreenWidth - (334 + 15);
- Clock.Y = 15;
Game = screen;
- Add(Clock);
- Money = new UIMoneyPanel(screen);
- Money.Position = new Vector2(15, screen.ScreenHeight - 172);
- Add(Money);
+ if (!Game.Desktop)
+ {
+ CutBtn = new UITwoStateButton(ui.Get("cut_btn_down.png").Get(GameFacade.GraphicsDevice));
+ CutBtn.X = screen.ScreenWidth - (256 + 15);
+ CutBtn.Y = 15;
+ CutBtn.OnButtonClick += CutButton;
+ Add(CutBtn);
+
+ Clock = new UIClockPanel(screen.vm);
+ Clock.X = screen.ScreenWidth - (334 + 15);
+ Clock.Y = 15;
+ Add(Clock);
+
+ Money = new UIMoneyPanel(screen);
+ Money.Position = new Vector2(15, screen.ScreenHeight - 172);
+ Add(Money);
+
+ ExtendPanelBtn = new UIStencilButton(ui.Get("panel_expand.png").Get(GameFacade.GraphicsDevice));
+ ExtendPanelBtn.OnButtonClick += ExpandClicked;
+ Add(ExtendPanelBtn);
+ }
MainPanel = new UIMainPanel(screen);
MainPanel.OnEndSelect += OnEndSelect;
MainPanel.ModeChanged += ModeChanged;
Add(MainPanel);
- ExtendPanelBtn = new UIStencilButton(ui.Get("panel_expand.png").Get(GameFacade.GraphicsDevice));
- ExtendPanelBtn.OnButtonClick += ExpandClicked;
- Add(ExtendPanelBtn);
-
- var mode = new UIModeSwitcher(screen);
- mode.Position = new Vector2(64 + 15, screen.ScreenHeight - (64 + 15));
- mode.OnModeClick += LiveButtonClicked;
- Add(mode);
- ModeSwitcher = mode;
-
- ExtendPanelBtn.Position = new Vector2(mode.X + 54, mode.Y - 50);
+ if (Game.Desktop)
+ {
+ DesktopUCP = new UIDesktopUCP(screen);
+ DesktopUCP.Position = new Vector2(15, screen.ScreenHeight - (278 + 15));
+ DesktopUCP.OnModeClick += LiveButtonClicked;
+ Add(DesktopUCP);
+ }
+ else
+ {
+ var mode = new UIModeSwitcher(screen);
+ mode.Position = new Vector2(64 + 15, screen.ScreenHeight - (64 + 15));
+ mode.OnModeClick += LiveButtonClicked;
+ Add(mode);
+ ModeSwitcher = mode;
+ ExtendPanelBtn.Position = new Vector2(mode.X + 54, mode.Y - 50);
+ }
MainPanel.X = 64 + 15;
- MainPanel.Y = mode.Y - 64;
+ if (Game.Desktop) MainPanel.X += 100;
+ MainPanel.GameResized();
+ MainPanel.Y = screen.ScreenHeight - (128 + 15);
MainPanel.Visible = false;
if (Game.vm.GetGlobalValue(32) > 0)
{
MainPanel.SetMode(UIMainPanelMode.BUY);
- ModeSwitcher.EndSwitch(MainPanel.Mode);
+ ModeSwitcher?.EndSwitch(MainPanel.Mode);
MainPanel.Open();
} else
{
@@ -87,7 +103,8 @@ namespace Simitone.Client.UI.Panels
private void ModeChanged(UIMainPanelMode obj)
{
- Clock.SetHidden(obj != UIMainPanelMode.LIVE);
+ Clock?.SetHidden(obj != UIMainPanelMode.LIVE);
+ DesktopUCP?.SetMode(obj);
var lotType = MainPanel.GetLotType(true);
var hit = FSO.HIT.HITVM.Get();
switch (obj)
@@ -140,13 +157,15 @@ namespace Simitone.Client.UI.Panels
private bool LiveButtonClicked(UIMainPanelMode mode)
{
- if (MainPanel.PanelActive)
+ var deskAuto = Game.Desktop && (mode != UIMainPanelMode.LIVE || MainPanel.Mode != UIMainPanelMode.LIVE);
+ if (MainPanel.PanelActive || deskAuto)
{
- if (MainPanel.ShowingSelect)
+ if (MainPanel.ShowingSelect || deskAuto)
{
+ if (!MainPanel.PanelActive) MainPanel.Open();
//switch to the target mode
MainPanel.SetMode(mode);
- MainPanel.SwitchAvatar.Kill();
+ MainPanel.SwitchAvatar?.Kill();
return false;
}
else
@@ -169,7 +188,7 @@ namespace Simitone.Client.UI.Panels
private void OnEndSelect()
{
- ModeSwitcher.EndSwitch(MainPanel.Mode);
+ ModeSwitcher?.EndSwitch(MainPanel.Mode);
}
private void CutButton(UIElement button)
@@ -219,45 +238,54 @@ namespace Simitone.Client.UI.Panels
}
base.Update(state);
- if (LastCut != Game.LotControl.WallsMode)
+ if (!Game.Desktop)
{
- LastCut = Game.LotControl.WallsMode;
- var ui = Content.Get().CustomUI;
- string cutImg = "cut_btn_down.png";
- switch (LastCut)
+ if (LastCut != Game.LotControl.WallsMode)
{
- case 1:
- cutImg = "cut_btn_away.png"; break;
- case 2:
- cutImg = "cut_btn_up.png"; break;
- case 3:
- cutImg = "cut_btn_roof.png"; break;
+ LastCut = Game.LotControl.WallsMode;
+ var ui = Content.Get().CustomUI;
+ string cutImg = "cut_btn_down.png";
+ switch (LastCut)
+ {
+ case 1:
+ cutImg = "cut_btn_away.png"; break;
+ case 2:
+ cutImg = "cut_btn_up.png"; break;
+ case 3:
+ cutImg = "cut_btn_roof.png"; break;
+ }
+ CutBtn.Texture = ui.Get(cutImg).Get(GameFacade.GraphicsDevice);
}
- CutBtn.Texture = ui.Get(cutImg).Get(GameFacade.GraphicsDevice);
+ if (Clock.TweenHook != ClockTween)
+ {
+ ClockTween = Clock.TweenHook;
+ CutBtn.X = Game.ScreenWidth - (256 + (138f * ClockTween) + 15);
+ if (CutPanel != null) CutPanel.X = CutBtn.X - 39;
+ }
+ ModeSwitcher.LiveButton.Switching = MainPanel.ShowingSelect;
+ ExtendPanelBtn.Visible = !MainPanel.PanelActive;
}
- if (Clock.TweenHook != ClockTween)
- {
- ClockTween = Clock.TweenHook;
- CutBtn.X = Game.ScreenWidth - (256 + (138f * ClockTween) + 15);
- if (CutPanel != null) CutPanel.X = CutBtn.X - 39;
- }
- ModeSwitcher.LiveButton.Switching = MainPanel.ShowingSelect;
- ExtendPanelBtn.Visible = !MainPanel.PanelActive;
}
public override void GameResized()
{
base.GameResized();
- CutBtn.X = Game.ScreenWidth - (256 + (138f * ClockTween) + 15);
- if (CutPanel != null) CutPanel.X = CutBtn.X - 39;
- Clock.X = Game.ScreenWidth - (334 + 15);
- Clock.Y = 15;
-
- Money.Position = new Vector2(15, Game.ScreenHeight - 172);
- var mode = ModeSwitcher;
- mode.Position = new Vector2(64 + 15, Game.ScreenHeight - (64 + 15));
- ExtendPanelBtn.Position = new Vector2(mode.X + 54, mode.Y - 50);
- MainPanel.Y = mode.Y - 64;
+ if (!Game.Desktop)
+ {
+ CutBtn.X = Game.ScreenWidth - (256 + (138f * ClockTween) + 15);
+ if (CutPanel != null) CutPanel.X = CutBtn.X - 39;
+ Clock.X = Game.ScreenWidth - (334 + 15);
+ Clock.Y = 15;
+ Money.Position = new Vector2(15, Game.ScreenHeight - 172);
+ var mode = ModeSwitcher;
+ mode.Position = new Vector2(64 + 15, Game.ScreenHeight - (64 + 15));
+ ExtendPanelBtn.Position = new Vector2(mode.X + 54, mode.Y - 50);
+ }
+ else
+ {
+ DesktopUCP.Position = new Vector2(15, Game.ScreenHeight - (278 + 15));
+ }
+ MainPanel.Y = Game.ScreenHeight - (128 + 15);
}
}
}
diff --git a/Client/Simitone/Simitone.Client/UI/Panels/WorldUI/UIHeadlineRenderer.cs b/Client/Simitone/Simitone.Client/UI/Panels/WorldUI/UIHeadlineRenderer.cs
index cf10437..894aae4 100644
--- a/Client/Simitone/Simitone.Client/UI/Panels/WorldUI/UIHeadlineRenderer.cs
+++ b/Client/Simitone/Simitone.Client/UI/Panels/WorldUI/UIHeadlineRenderer.cs
@@ -183,18 +183,6 @@ namespace Simitone.Client.UI.Panels.WorldUI
batch.Draw(Cross, new Vector2(Texture.Width / 2 - Cross.Width / 2, Texture.Height / 2 - Cross.Height / 4), Color.White);
}
- if (DrawSkill)
- {
- batch.Draw(WhitePx, new Rectangle(88, 4, 71, 41), new Color(92, 92, 92));
- var font = GameFacade.MainFont.GetNearest(14).Font;
-
- Vector2 fontOrigin = font.MeasureString(SkillString) / 2;
- batch.DrawString(font, SkillString, new Vector2(88 + 35, 15) - fontOrigin * 0.60f, new Color(255, 249, 157), 0, new Vector2(), 0.60f, SpriteEffects.None, 0);
-
- fontOrigin = font.MeasureString(SpeedString) / 2;
- batch.DrawString(font, SpeedString, new Vector2(88 + 35, 34) - fontOrigin * 0.60f, new Color(255, 249, 157), 0, new Vector2(), 0.60f, SpriteEffects.None, 0);
- }
-
batch.End();
GD.SetRenderTarget(null);
Invalidated = false;
diff --git a/Client/Simitone/Simitone.Client/UI/Panels/WorldUI/UIMoneyHeadline.cs b/Client/Simitone/Simitone.Client/UI/Panels/WorldUI/UIMoneyHeadline.cs
index 1ec8d73..8c21ab2 100644
--- a/Client/Simitone/Simitone.Client/UI/Panels/WorldUI/UIMoneyHeadline.cs
+++ b/Client/Simitone/Simitone.Client/UI/Panels/WorldUI/UIMoneyHeadline.cs
@@ -59,8 +59,10 @@ namespace Simitone.Client.UI.Panels.WorldUI
batch.Draw(MoneyBG, new Vector2(MoneyTarget.Width-9.6f, Headline.Duration / 2), new Rectangle(24, 0, 12, 24), Model.UIStyle.Current.Bg * opacity,
0, Vector2.Zero, new Vector2(0.8f, 0.8f), SpriteEffects.None, 0);
Style.Color.A = (byte)(opacity*255);
- batch.DrawString(Style.SpriteFont, Text, new Vector2(5, Headline.Duration/2), Style.Color);
+
batch.End();
+ Style.VFont.Draw(GD, Text, new Vector2(5, 1), Style.Color, new Vector2(Style.Scale), null);
+
GD.SetRenderTarget(null);
}
diff --git a/Client/Simitone/Simitone.Client/UI/Screens/LoadingGameScreen.cs b/Client/Simitone/Simitone.Client/UI/Screens/LoadingGameScreen.cs
index df7e8fa..986216d 100644
--- a/Client/Simitone/Simitone.Client/UI/Screens/LoadingGameScreen.cs
+++ b/Client/Simitone/Simitone.Client/UI/Screens/LoadingGameScreen.cs
@@ -39,6 +39,7 @@ namespace Simitone.Client.UI.Screens
public UISimitoneLogo Logo;
public UISimitoneLoadLabel LastLabel;
public bool LoadingComplete;
+ public UITweenInstance LogoTween;
private bool Closing = false;
private float _i;
@@ -83,19 +84,19 @@ namespace Simitone.Client.UI.Screens
GameFacade.Screens.Tween.To(this, 0.5f, new Dictionary() { { "InterpolatedAnimation", 1f } }, TweenQuad.EaseOut);
LoadProgress = new UILoadProgress();
- LoadProgress.Position = (new Vector2(ScreenWidth, ScreenHeight) - new Vector2(938, 112))/2;
+ LoadProgress.Position = (new Vector2(ScreenWidth, ScreenHeight) - new Vector2(1012, 128))/2;
Add(LoadProgress);
Logo = new UISimitoneLogo();
Logo.Position = new Vector2(ScreenWidth, ScreenHeight) / 2;
Add(Logo);
- GameFacade.Screens.Tween.To(Logo, 1f, new Dictionary() { { "Y", ScreenHeight/4 }, { "ScaleX", 0.5f }, { "ScaleY", 0.5f } }, TweenQuad.EaseOut);
+ LogoTween = GameFacade.Screens.Tween.To(Logo, 1f, new Dictionary() { { "Y", ScreenHeight/4 }, { "ScaleX", 0.5f }, { "ScaleY", 0.5f } }, TweenQuad.EaseOut);
InterpolatedAnimation = InterpolatedAnimation;
(new Thread(() => {
FSO.Content.Content.Init(GlobalSettings.Default.StartupPath, GameFacade.GraphicsDevice);
- VMContext.InitVMConfig();
+ VMContext.InitVMConfig(true);
lock (this)
{
LoadingComplete = true;
@@ -125,6 +126,20 @@ namespace Simitone.Client.UI.Screens
}, 750);
}
+ public override void GameResized()
+ {
+ base.GameResized();
+ GameFacade.Screens.Tween.Stop(LogoTween, true);
+ Bg.Position = (new Vector2(ScreenWidth, ScreenHeight)) / 2;
+ ProgressDiag.Position = new Vector2(0, ScreenHeight / 2 - 75);
+ TextDiag.Position = new Vector2(0, ScreenHeight * 0.75f - 37);
+ LoadProgress.Position = (new Vector2(ScreenWidth, ScreenHeight) - new Vector2(1012, 128)) / 2;
+ Logo.Position = new Vector2(ScreenWidth, ScreenHeight/2) / 2;
+ if (LastLabel != null) LastLabel.Position = new Vector2(ScreenWidth / 2, ScreenHeight * 0.75f);
+
+ InterpolatedAnimation = InterpolatedAnimation;
+ }
+
public ContentLoadingProgress LastProgress = ContentLoadingProgress.Invalid;
public override void Update(UpdateState state)
diff --git a/Client/Simitone/Simitone.Client/UI/Screens/TS1CASScreen.cs b/Client/Simitone/Simitone.Client/UI/Screens/TS1CASScreen.cs
index 4d1518b..38b7a6f 100644
--- a/Client/Simitone/Simitone.Client/UI/Screens/TS1CASScreen.cs
+++ b/Client/Simitone/Simitone.Client/UI/Screens/TS1CASScreen.cs
@@ -249,7 +249,7 @@ namespace Simitone.Client.UI.Screens
var moving = 0;
- if (state.MouseStates.Count > 0)
+ if (state.MouseStates.Count(x => x.MouseState.LeftButton == Microsoft.Xna.Framework.Input.ButtonState.Pressed) > 0)
{
if (XLast == -1)
{
@@ -699,11 +699,6 @@ namespace Simitone.Client.UI.Screens
vm.Context.Clock.Minutes = 0;
vm.Context.Clock.Hours = 12;
- if (state.NewKeys.Contains(Microsoft.Xna.Framework.Input.Keys.LeftControl))
- {
- SetMode(UICASMode.SimEdit);
- }
-
var disableAccept = false;
switch (Mode)
{
diff --git a/Client/Simitone/Simitone.Client/UI/Screens/TS1GameScreen.cs b/Client/Simitone/Simitone.Client/UI/Screens/TS1GameScreen.cs
index de8e489..26fa7e1 100644
--- a/Client/Simitone/Simitone.Client/UI/Screens/TS1GameScreen.cs
+++ b/Client/Simitone/Simitone.Client/UI/Screens/TS1GameScreen.cs
@@ -28,6 +28,7 @@ using Microsoft.Xna.Framework.Input;
using Simitone.Client.UI.Controls;
using Simitone.Client.UI.Panels;
using Simitone.Client.UI.Panels.WorldUI;
+using Simitone.Client.Utils;
using System;
using System.Collections.Generic;
using System.IO;
@@ -41,6 +42,7 @@ namespace Simitone.Client.UI.Screens
{
public UIContainer WindowContainer;
public bool Downtown;
+ public bool Desktop = !FSOEnvironment.SoftwareKeyboard;
public UILotControl LotControl { get; set; }
public UISimitoneFrontend Frontend { get; set; }
@@ -87,6 +89,7 @@ namespace Simitone.Client.UI.Screens
Bg.Visible = false;
World.Visible = true;
//ucp.SetMode(UIUCP.UCPMode.LotMode);
+ LotControl.SetTargetZoom(targ);
if (m_ZoomLevel != value) vm.Context.World.InitiateSmoothZoom(targ);
vm.Context.World.State.Zoom = targ;
m_ZoomLevel = value;
@@ -191,6 +194,8 @@ namespace Simitone.Client.UI.Screens
public void NeighSelection(NeighSelectionMode mode)
{
+ Content.Get().Neighborhood.PreparePersonDataFromObject = PersonGeneratorHelper.PreparePersonDataFromObject;
+ Content.Get().Neighborhood.AddMissingNeighbors();
var nbd = (ushort)((mode == NeighSelectionMode.MoveInMagic) ? 7 : 4);
TS1NeighPanel = new UINeighborhoodSelectionPanel(nbd);
var switcher = new UINeighbourhoodSwitcher(TS1NeighPanel, nbd, mode != NeighSelectionMode.Normal);
@@ -233,6 +238,7 @@ namespace Simitone.Client.UI.Screens
public void MoveInAndPlay(short house, int family, UIElement switcher)
{
+ MoveInFamily = null;
var neigh = Content.Get().Neighborhood;
var fami = neigh.GetFamily((ushort)family);
neigh.SetFamilyForHouse(house, fami, true);
@@ -343,6 +349,25 @@ namespace Simitone.Client.UI.Screens
if (state.NewKeys.Contains(Keys.D3)) ChangeSpeedTo(3);
if (state.NewKeys.Contains(Keys.P)) ChangeSpeedTo(0);
+ if (state.NewKeys.Contains(Keys.F12))
+ {
+ ChangeSpeedTo(1);
+ //running 10000 ticks
+ var timer = new System.Diagnostics.Stopwatch();
+ timer.Start();
+
+ for (int i=0; i<10000; i++)
+ {
+ vm.Tick();
+ }
+
+ timer.Stop();
+ UIScreen.GlobalShowDialog(new UIMobileAlert(new UIAlertOptions() {
+ Title = "Benchmark",
+ Message = "10000 ticks took " + timer.ElapsedMilliseconds + "ms."
+ }), true);
+ }
+
if (World != null)
{
//stub smooth zoom?
@@ -454,7 +479,7 @@ namespace Simitone.Client.UI.Screens
public void InitializeLot(VMMarshal marshal)
{
InitializeLot();
- vm.MyUID = uint.MaxValue;
+ vm.MyUID = 1;
vm.Load(marshal);
vm.TS1State.ActivateFamily(vm, ActiveFamily);
@@ -462,7 +487,7 @@ namespace Simitone.Client.UI.Screens
var settings = GlobalSettings.Default;
var myClient = new VMNetClient
{
- PersistID = uint.MaxValue,
+ PersistID = 1,
RemoteIP = "local",
AvatarState = new VMNetAvatarPersistState()
{
@@ -470,7 +495,7 @@ namespace Simitone.Client.UI.Screens
DefaultSuits = new VMAvatarDefaultSuits(settings.DebugGender),
BodyOutfit = settings.DebugBody,
HeadOutfit = settings.DebugHead,
- PersistID = uint.MaxValue,
+ PersistID = 1,
SkinTone = (byte)settings.DebugSkin,
Gender = (short)(settings.DebugGender ? 1 : 0),
Permissions = FSO.SimAntics.Model.TSOPlatform.VMTSOAvatarPermissions.Admin,
@@ -489,6 +514,44 @@ namespace Simitone.Client.UI.Screens
this.Add(Frontend);
}
+ public void ShowLoadErrors(List errors, bool verbose)
+ {
+ var errorMsg = GameFacade.Strings.GetString("153", "16");
+
+ if (verbose)
+ {
+ errorMsg += "\n";
+ foreach (var error in errors)
+ {
+ errorMsg += "\n" + error.ToString();
+ }
+ }
+
+ //signal thru the VM so we can stop time appropriately
+ vm.LastSpeedMultiplier = vm.SpeedMultiplier;
+ vm.SpeedMultiplier = 0;
+ vm.SignalDialog(new VMDialogInfo
+ {
+ Block = true,
+ Caller = null,
+ Yes = "OK",
+ DialogID = 0,
+ Title = GameFacade.Strings.GetString("153", "17"),
+ Message = errorMsg,
+ });
+
+ /*
+ CloseAlert = new UIMobileAlert(new FSO.Client.UI.Controls.UIAlertOptions
+ {
+ Title = GameFacade.Strings.GetString("153", "17"), //missing objects!
+ Message = errorMsg,
+ Buttons = UIAlertButton.Ok(
+ (b) => { CloseAlert.Close(); CloseAlert = null; }
+ )
+ });
+ */
+ }
+
public void InitializeLot(string lotName, bool external)
{
if (lotName == "" || lotName[0] == '!') return;
@@ -502,12 +565,14 @@ namespace Simitone.Client.UI.Screens
vm.TS1State.ActivateFamily(vm, ActiveFamily);
}
BlueprintReset(lotName, null);
+
+ if (vm.LoadErrors.Count > 0) GameThread.NextUpdate((state) => ShowLoadErrors(vm.LoadErrors, true));
- vm.MyUID = uint.MaxValue;
+ vm.MyUID = 1;
var settings = GlobalSettings.Default;
var myClient = new VMNetClient
{
- PersistID = uint.MaxValue,
+ PersistID = 1,
RemoteIP = "local",
AvatarState = new VMNetAvatarPersistState()
{
@@ -515,7 +580,7 @@ namespace Simitone.Client.UI.Screens
DefaultSuits = new VMAvatarDefaultSuits(settings.DebugGender),
BodyOutfit = settings.DebugBody,
HeadOutfit = settings.DebugHead,
- PersistID = uint.MaxValue,
+ PersistID = 1,
SkinTone = (byte)settings.DebugSkin,
Gender = (short)(settings.DebugGender ? 1 : 0),
Permissions = FSO.SimAntics.Model.TSOPlatform.VMTSOAvatarPermissions.Admin,
@@ -557,7 +622,7 @@ namespace Simitone.Client.UI.Screens
public void LoadSurrounding(short houseID)
{
return;
- var surrounding = new NBHm(new OBJ(File.OpenRead(@"C:\Users\Rhys\Desktop\nb2.obj")));
+ var surrounding = new NBHm(new OBJ(File.OpenRead(@"C:\Users\Rhys\Desktop\fso 2018\nb4.obj")));
NBHmHouse myH = null;
var myHeight = vm.Context.Blueprint.InterpAltitude(new Vector3(0, 0, 0));
if (!surrounding.Houses.TryGetValue(houseID, out myH)) return;
@@ -653,7 +718,8 @@ namespace Simitone.Client.UI.Screens
switch (type)
{
case VMEventType.TS1BuildBuyChange:
- Frontend.ModeSwitcher.UpdateBuildBuy();
+ Frontend?.ModeSwitcher?.UpdateBuildBuy();
+ Frontend?.DesktopUCP?.UpdateBuildBuy();
break;
}
}
@@ -803,6 +869,8 @@ namespace Simitone.Client.UI.Screens
{
CleanupLastWorld();
NeighSelection(NeighSelectionMode.Normal);
+ Downtown = false;
+ SavedLot = null;
}
}
diff --git a/Client/Simitone/Simitone.Client/Utils/PersonGeneratorHelper.cs b/Client/Simitone/Simitone.Client/Utils/PersonGeneratorHelper.cs
new file mode 100644
index 0000000..d6a9a88
--- /dev/null
+++ b/Client/Simitone/Simitone.Client/Utils/PersonGeneratorHelper.cs
@@ -0,0 +1,50 @@
+using FSO.Client;
+using FSO.LotView;
+using FSO.LotView.Model;
+using FSO.SimAntics;
+using FSO.SimAntics.Engine.TSOTransaction;
+using FSO.SimAntics.Model;
+using FSO.SimAntics.NetPlay.Drivers;
+using Microsoft.Xna.Framework;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Simitone.Client.Utils
+{
+ public static class PersonGeneratorHelper
+ {
+ private static VM TempVM;
+ private static void InitVM()
+ {
+ var world = new World(GameFacade.GraphicsDevice);
+ world.Initialize(GameFacade.Scenes);
+ var context = new VMContext(world);
+
+ TempVM = new VM(context, new VMServerDriver(new VMTSOGlobalLinkStub()), new VMNullHeadlineProvider());
+ TempVM.Init();
+
+ var blueprint = new Blueprint(3, 3);
+ world.InitBlueprint(blueprint);
+ context.Blueprint = blueprint;
+ context.Architecture = new VMArchitecture(3, 3, blueprint, TempVM.Context);
+ blueprint.Terrain = new FSO.LotView.Components.TerrainComponent(new Rectangle(0, 0, 3, 3), blueprint);
+ TempVM.Tick();
+ }
+
+ public static short[] PreparePersonDataFromObject(uint guid)
+ {
+ if (TempVM == null) InitVM();
+
+ var obj = TempVM.Context.CreateObjectInstance(guid, LotTilePos.OUT_OF_WORLD, Direction.NORTH)?.BaseObject as VMAvatar;
+
+ if (obj == null) return new short[88];
+ var result = obj.GetPersonDataClone();
+ obj.Delete(true, TempVM.Context);
+
+ return result.Take(88).ToArray();
+ }
+ }
+}
diff --git a/Client/Simitone/Simitone.Windows/Program.cs b/Client/Simitone/Simitone.Windows/Program.cs
index 537c009..cc930d6 100644
--- a/Client/Simitone/Simitone.Windows/Program.cs
+++ b/Client/Simitone/Simitone.Windows/Program.cs
@@ -30,10 +30,10 @@ namespace Simitone.Windows
var useDX = true;
var path = gameLocator.FindTheSimsOnline();
- if (useDX) GlobalSettings.Default.AntiAlias = false;
-
FSOEnvironment.Enable3D = false;
bool ide = false;
+ bool aa = false;
+ bool jit = false;
#region User resolution parmeters
foreach (var arg in args)
@@ -57,6 +57,12 @@ namespace Simitone.Windows
case "3d":
FSOEnvironment.Enable3D = true;
break;
+ case "aa":
+ aa = true;
+ break;
+ case "jit":
+ jit = true;
+ break;
}
}
}
@@ -87,13 +93,19 @@ namespace Simitone.Windows
GlobalSettings.Default.TS1HybridPath = gameLocator.FindTheSims1();
GlobalSettings.Default.ClientVersion = "0";
GlobalSettings.Default.LightingMode = 3;
- GlobalSettings.Default.AntiAlias = true;
+ GlobalSettings.Default.AntiAlias = aa ? 2 : 0;
+ GlobalSettings.Default.ComplexShaders = true;
GameFacade.DirectX = useDX;
World.DirectX = useDX;
if (ide) new FSO.IDE.VolcanicStartProxy().InitVolcanic();
+ var assemblies = new FSO.SimAntics.JIT.Runtime.AssemblyStore();
+ //var globals = new TS1.Scripts.Dummy(); //make sure scripts assembly is loaded
+ if (jit) assemblies.InitAOT();
+ FSO.SimAntics.Engine.VMTranslator.INSTANCE = new FSO.SimAntics.JIT.Runtime.VMAOTTranslator(assemblies);
+
SimitoneGame game = new SimitoneGame();
var form = (Form)Form.FromHandle(game.Window.Handle);
if (form != null) form.FormClosing += Form_FormClosing;
diff --git a/Client/Simitone/Simitone.Windows/Simitone.Windows.csproj b/Client/Simitone/Simitone.Windows/Simitone.Windows.csproj
index 6adc654..2fdae73 100644
--- a/Client/Simitone/Simitone.Windows/Simitone.Windows.csproj
+++ b/Client/Simitone/Simitone.Windows/Simitone.Windows.csproj
@@ -74,6 +74,10 @@
{5deb20eb-1eb7-48f9-922c-463abae56e63}
FSO.IDE
+
+ {b8ab3711-7b4f-4126-9bf3-4ddde9475b74}
+ FSO.SimAntics.JIT
+
{73e2ad5b-720b-4ef3-9b7c-55931d0ec693}
FSO.UI
diff --git a/Client/Simitone/Simitone.sln b/Client/Simitone/Simitone.sln
index e4797d4..ce27e7e 100644
--- a/Client/Simitone/Simitone.sln
+++ b/Client/Simitone/Simitone.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
+# Visual Studio 15
+VisualStudioVersion = 15.0.27703.2035
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simitone.iOS", "Simitone\Simitone.iOS.csproj", "{F0BFC685-A357-4E5A-B502-1B5A35970E63}"
EndProject
@@ -51,6 +51,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSO.IDE", "..\..\FreeSO\TSO
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimplePaletteQuantizer", "..\..\FreeSO\Other\libs\ColorQuantizer\SimplePaletteQuantizer\SimplePaletteQuantizer.csproj", "{37812A22-91F3-4220-891E-5C26DA64A975}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MSDFData", "..\..\FreeSO\Other\libs\MSDFData\MSDFData.csproj", "{EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MSDFExtension", "..\..\FreeSO\Other\libs\MSDFExtension\MSDFExtension.csproj", "{EBF08DC7-916D-4133-BADE-38C31E29F18A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSO.SimAntics.JIT", "..\..\FreeSO\TSOClient\FSO.SimAntics.JIT\FSO.SimAntics.JIT.csproj", "{B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TS1.Scripts", "TS1.Scripts\TS1.Scripts.csproj", "{E5391443-CF1E-4A61-8415-B0E51F23748B}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
@@ -789,8 +797,137 @@ Global
{37812A22-91F3-4220-891E-5C26DA64A975}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{37812A22-91F3-4220-891E-5C26DA64A975}.Release|x86.ActiveCfg = Release|Any CPU
{37812A22-91F3-4220-891E-5C26DA64A975}.Release|x86.Build.0 = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Ad-Hoc|x86.Build.0 = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.AppStore|Any CPU.Build.0 = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.AppStore|iPhone.Build.0 = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.AppStore|x86.ActiveCfg = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.AppStore|x86.Build.0 = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Debug|x86.Build.0 = Debug|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Release|iPhone.Build.0 = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Release|x86.ActiveCfg = Release|Any CPU
+ {EABEA510-3E53-4F19-9F0B-75C5CA9DFA3B}.Release|x86.Build.0 = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Ad-Hoc|x86.Build.0 = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.AppStore|Any CPU.Build.0 = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.AppStore|iPhone.Build.0 = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.AppStore|x86.ActiveCfg = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.AppStore|x86.Build.0 = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Debug|x86.Build.0 = Debug|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Release|iPhone.Build.0 = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Release|x86.ActiveCfg = Release|Any CPU
+ {EBF08DC7-916D-4133-BADE-38C31E29F18A}.Release|x86.Build.0 = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Ad-Hoc|x86.Build.0 = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.AppStore|Any CPU.Build.0 = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.AppStore|iPhone.Build.0 = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.AppStore|x86.ActiveCfg = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.AppStore|x86.Build.0 = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Debug|x86.Build.0 = Debug|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Release|iPhone.Build.0 = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Release|x86.ActiveCfg = Release|Any CPU
+ {B8AB3711-7B4F-4126-9BF3-4DDDE9475B74}.Release|x86.Build.0 = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Ad-Hoc|x86.Build.0 = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.AppStore|Any CPU.Build.0 = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.AppStore|iPhone.Build.0 = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.AppStore|x86.ActiveCfg = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.AppStore|x86.Build.0 = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Debug|x86.Build.0 = Debug|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Release|iPhone.Build.0 = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Release|x86.ActiveCfg = Release|Any CPU
+ {E5391443-CF1E-4A61-8415-B0E51F23748B}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {F2FD9699-EAC6-4F94-8505-2B0ECD1E5D59}
+ EndGlobalSection
EndGlobal