public ScreenMap(ScreenController ctrl, UIObject obj) { this.ctrl = ctrl; this.activeObject = obj; if (this.activeObject != null) { this.activeObject.PropertyChanged += OnPropertyChanged; } }
public GameDetailScreen(GameController ctrl, UIObject obj) { this.ctrl = ctrl; this.activeObject = obj; if (this.activeObject != null) { this.activeObject.PropertyChanged += OnPropertyChanged; } _refresh = new CallDelayer(100, 500, (o) => Refresh(o)); }
public ScreenDetail (ScreenController ctrl, UIObject obj) : base () { this.ctrl = ctrl; this.activeObject = obj; // OS specific details if (new Version (UIDevice.CurrentDevice.SystemVersion) >= new Version(7,0)) { // Code that uses features from Xamarin.iOS 7.0 this.EdgesForExtendedLayout = UIRectEdge.None; } }
/// <summary> /// Initializes a new instance of the <see cref="WF.Player.DisplayChangedEventArgs"/> class. /// </summary> /// <param name="what">What changed.</param> /// <param name="obj">Object which changed.</param> /// <param name="property">Property which changed.</param> public DisplayChangedEventArgs(string what = null, UIObject obj = null, string property = null) { What = what; UIObject = obj; PropertyName = property; }
/// <summary> /// Raises the display changed. /// </summary> /// <param name="what">What changed.</param> /// <param name="obj">Object that changed.</param> /// <param name="property">Property that changed.</param> private void RaiseDisplayChanged(string what, UIObject obj = null, string property = null) { if (this.engine == null || this.engine.GameState != EngineGameState.Playing) { return; } var handler = this.DisplayChanged; if (handler != null) { handler(this, new DisplayChangedEventArgs(what, obj, property)); } }
/// <summary> /// Makes the app show the details of a thing. /// </summary> /// <param name="t"></param> private void ShowDetails(UIObject t) { // Navigates to the appropriate view. App.Current.ViewModel.NavigationManager.NavigateToView(t); }
/// <summary> /// Shows the screen. /// </summary> /// <param name="screen">Screen to show.</param> /// <param name="obj">Object to show if screen is ScreenType.Details.</param> public void ShowScreen(ScreenTypes screen, UIObject obj) { bool showBackButton = true; var bar = SupportActionBar; var ft = this.SupportFragmentManager.BeginTransaction (); var activeFragment = this.SupportFragmentManager.FindFragmentByTag("active"); // If there is an active remove timer, stop it, because we bring the next screen onto the device if (removeTimer != null) { removeTimer.Stop(); removeTimer = null; } // A new screen replaces a dialog screen, if there is one if (screenStack.Count > 0 && screenStack.Peek() is GameDialogScreen) screenStack.Pop(); // A new screen replaces a screen of same type, if there is one if (screenStack.Count > 0 && ((screenStack.Peek() is GameDetailScreen && screen == ScreenTypes.Details) || ((screenStack.Peek() is GameMapScreen && screen == ScreenTypes.Map)))) screenStack.Pop(); switch (screen) { case ScreenTypes.Main: // Clear stack, because main screen is always the first screenStack.Clear(); // Push new main screen onto stack screenStack.Push(new GameMainScreen (engine)); // Don't show back button on main screen showBackButton = false; // Set title for activity ft.SetBreadCrumbTitle (cartridge.Name); break; case ScreenTypes.Locations: case ScreenTypes.Items: case ScreenTypes.Inventory: case ScreenTypes.Tasks: // Clear stack, except main screen, which is always the first while(screenStack.Count > 1) screenStack.Pop(); screenStack.Push(new GameListScreen (engine, screen)); break; case ScreenTypes.Details: // Only push a new one, if it isn't the same if (!(screenStack.Peek() is GameDetailScreen) || !((GameDetailScreen)screenStack.Peek()).ActiveObject.Equals(obj)) screenStack.Push(new GameDetailScreen (this, obj)); break; case ScreenTypes.Map: // Only push a new one, if it isn't the same if (!(screenStack.Peek() is GameMapScreen) || !((GameMapScreen)screenStack.Peek()).ActiveObject.Equals(obj)) screenStack.Push(new GameMapScreen (this, obj)); break; } // Show icon as back button bar.SetDisplayHomeAsUpEnabled (showBackButton); // Bring topmost fragment to screen ft.SetTransition (global::Android.Support.V4.App.FragmentTransaction.TransitNone); ft.Replace (Resource.Id.fragment, screenStack.Peek(), "active"); ft.Commit (); // Save actuall values for later use if (screen != ScreenTypes.Dialog && screen != ScreenTypes.Map) { activeScreen = screen; activeObject = obj; } }
/// <summary> /// Makes the app show the details of a thing. /// </summary> /// <param name="t"></param> private void ShowDetails(UIObject t) { if (t.HasOnClick) { // Runs the on-click command. t.CallOnClick(); } else { // Navigates to the appropriate view. App.Current.ViewModel.NavigationManager.NavigateToView(t); } }
/// <summary> /// Initializes a new instance of the <see cref="WF.Player.GameDetailViewModel"/> class. /// </summary> public GameDetailViewModel(UIObject activeObject = null) { this.geoMathHelper = new GeoMathHelper(); this.activeObject = activeObject; Position = App.GPS.LastKnownPosition; }
/// <summary> /// Navigates the app to the view that best fits a UIObject object. /// </summary> /// <param name="wherigoObj"></param> public void NavigateToView(UIObject wherigoObj) { if (wherigoObj is Thing) { NavigateToView((Thing)wherigoObj); } else if (wherigoObj is Task) { NavigateToView((Task)wherigoObj); } }
public GameMapScreen(GameController ctrl, UIObject obj) { this.ctrl = ctrl; this.activeObject = obj; }
/// <summary> /// Initializes a new instance of the <see cref="WF.Player.GameMainCellViewModel"/> class. /// </summary> /// <param name="name">Name of uiobject.</param> /// <param name="color">Color of text.</param> /// <param name="uiObject">User interface object.</param> public GameMainCellViewModel(string name, Color color, UIObject uiObject) { this.color = color; this.uiObject = uiObject; this.uiObject.PropertyChanged += HandlePropertyChanged; }
/// <summary> /// Shows the screen. /// </summary> /// <param name="screen">Screen to show.</param> /// <param name="obj">Object to show if screen is ScreenType.Details.</param> public void ShowScreen(ScreenType screen, UIObject obj) { var bar = SupportActionBar; var ft = this.SupportFragmentManager.BeginTransaction (); var activeFragment = this.SupportFragmentManager.FindFragmentByTag("active"); switch (screen) { case ScreenType.Main: ft.SetBreadCrumbTitle (cartridge.Name); ft.SetTransition (global::Android.Support.V4.App.FragmentTransaction.TransitNone); ft.Replace (Resource.Id.fragment, new ScreenMain (engine), "active"); ft.Commit (); // SupportFragmentManager.Fragments [0] = new ScreenMain (engine); break; case ScreenType.Locations: case ScreenType.Items: case ScreenType.Inventory: case ScreenType.Tasks: bar.SetDisplayHomeAsUpEnabled (true); ft.SetTransition (global::Android.Support.V4.App.FragmentTransaction.TransitNone); ft.Replace (Resource.Id.fragment, new ScreenList (engine, screen), "active"); ft.Commit (); // SupportFragmentManager.Fragments [0] = new ScreenList (engine, screen); break; case ScreenType.Details: bar.SetDisplayHomeAsUpEnabled (true); ft.SetTransition (global::Android.Support.V4.App.FragmentTransaction.TransitNone); ft.Replace (Resource.Id.fragment, new ScreenDetail (this, obj), "active"); ft.Commit (); // SupportFragmentManager.Fragments [0] = new ScreenDetail (this, obj); break; case ScreenType.Map: bar.SetDisplayHomeAsUpEnabled (true); ft.SetTransition (global::Android.Support.V4.App.FragmentTransaction.TransitNone); ft.Replace (Resource.Id.fragment, new ScreenMap (this, obj), "active"); ft.Commit (); // SupportFragmentManager.Fragments [0] = new ScreenMap (this, obj); break; } // Save actuall values for later use if (screen != ScreenType.Dialog && screen != ScreenType.Map) { activeScreen = screen; activeObject = obj; } }
/// <summary> /// Removes the active screen and show screen before. /// </summary> /// <param name="last">Last screen active.</param> public void RemoveScreen(ScreenType type) { bool remove = true; ScreenType activeType = ActiveScreenType(); // Check if screen to remove is active screen, instead leave if (type != null) { if (SupportFragmentManager.Fragments [0] is ScreenList) remove &= ((ScreenList)SupportFragmentManager.Fragments [0]).Type == type; if (SupportFragmentManager.Fragments [0] is ScreenDetail) remove &= type == ScreenType.Details; if (SupportFragmentManager.Fragments [0] is ScreenDialog) remove &= type == ScreenType.Dialog; if (SupportFragmentManager.Fragments [0] is ScreenMap) remove &= type == ScreenType.Map; } if (!remove) return; switch (activeType) { case ScreenType.Main: // Don't remove the main screen break; case ScreenType.Locations: ShowScreen (ScreenType.Main, null); break; case ScreenType.Items: ShowScreen (ScreenType.Main, null); break; case ScreenType.Inventory: ShowScreen (ScreenType.Main, null); break; case ScreenType.Tasks: ShowScreen (ScreenType.Main, null); break; case ScreenType.Details: // Show correct list for this zone/item/character/task if (((ScreenDetail)SupportFragmentManager.Fragments [0]).ActiveObject != null) { // Select the correct list to show UIObject obj = ((ScreenDetail)SupportFragmentManager.Fragments [0]).ActiveObject; activeObject = null; if (obj is Zone) ShowScreen (ScreenType.Locations, null); if (obj is Task) ShowScreen (ScreenType.Tasks, null); if (obj is Item || obj is Character) { if (engine.VisibleInventory.Contains ((Thing)obj)) ShowScreen (ScreenType.Inventory, null); else ShowScreen (ScreenType.Items, null); } } else ShowScreen (ScreenType.Main, null); break; case ScreenType.Dialog: case ScreenType.Map: if (activeScreen == ScreenType.Details && activeObject != null && !activeObject.Visible) { // Object for detail screen is no longer visible, so show correct list // Select the correct list to show UIObject obj = activeObject; activeObject = null; if (obj is Zone) ShowScreen (ScreenType.Locations, null); if (obj is Task) ShowScreen (ScreenType.Tasks, null); if (obj is Item || obj is Character) { if (engine.VisibleInventory.Contains ((Thing)obj)) ShowScreen (ScreenType.Inventory, null); else ShowScreen (ScreenType.Items, null); } } else { ShowScreen (activeScreen, activeObject); } break; } }
public void ShowScreen (ScreenType screenId, object param = null) { switch (screenId) { case ScreenType.Main: ViewControllers = new UIViewController[] { screenMain }; break; case ScreenType.Locations: ViewControllers = new UIViewController[] { screenListLocations }; break; case ScreenType.Items: ViewControllers = new UIViewController[] { screenListItems }; break; case ScreenType.Inventory: ViewControllers = new UIViewController[] { screenListInventory }; break; case ScreenType.Tasks: ViewControllers = new UIViewController[] { screenListTasks }; break; case ScreenType.Details: // Is active ViewController is ScreenDetail if (!(VisibleViewController is ScreenDetail)) // Active ViewController isn't ScreenDetail, so create a new one ViewControllers = new UIViewController[] { new ScreenDetail (this, (UIObject)param) }; else ((ScreenDetail)ViewControllers [0]).ActiveObject = (UIObject)param; break; case ScreenType.Dialog: if (param is MessageBoxEventArgs) { ViewControllers = new UIViewController[] { new ScreenDialog (((MessageBoxEventArgs)param).Descriptor) }; } if (param is Input) { ViewControllers = new UIViewController[] { new ScreenDialog ((Input)param) }; } break; case ScreenType.Map: ViewControllers = new UIViewController[] { new ScreenMap(this, (Thing)param) }; break; } if (screenId != ScreenType.Dialog && screenId != ScreenType.Map) { activeScreen = screenId; activeObject = (UIObject)param; } }
public void RefreshCell (ScreenList owner, ScreenType screenType, Engine engine, UIObject obj) { if (imageIcon != null) { if (obj.Icon == null) imageIcon.Image = null; else { imageIcon.Image = UIImage.LoadFromData (NSData.FromArray (obj.Icon.Data)); imageIcon.ContentMode = UIViewContentMode.ScaleAspectFit; } } string name = obj.Name == null ? "" : obj.Name; if (screenType == ScreenType.Tasks) { // If a task, than show CorrectState by character in front of name textTitle.Text = (((Task)obj).Complete ? (((Task)obj).CorrectState == TaskCorrectness.NotCorrect ? Strings.TaskNotCorrect : Strings.TaskCorrect) + " " : "") + name; } else textTitle.Text = name; if (HasDirection) { if (screenType != ScreenType.Tasks && screenType != ScreenType.Inventory) { if (obj is Zone && ((Zone)obj).State == PlayerZoneState.Inside) { imageDirection.Hidden = false; imageDirection.Image = drawCenter (); textDistance.Hidden = false; textDistance.Text = Catalog.GetString("Inside"); } else { if ((obj is Item || obj is Character) && obj.ObjectLocation != null) { imageDirection.Hidden = true; textDistance.Hidden = true; } else { if (((Thing)obj).VectorFromPlayer != null) { imageDirection.Hidden = false; imageDirection.Image = drawArrow ((((Thing)obj).VectorFromPlayer.Bearing.GetValueOrDefault () + owner.Ctrl.LocatitionManager.Heading.TrueHeading) % 360); // * 180.0 / Math.PI); textDistance.Hidden = false; textDistance.Text = ((Thing)obj).VectorFromPlayer.Distance.BestMeasureAs (DistanceUnit.Meters); } else { imageDirection.Hidden = true; textDistance.Hidden = true; } } } } else { imageDirection.Hidden = true; textDistance.Hidden = true; } } }