/// <summary> /// GUI constructor initiates a List of containers and assigns currently hovered elements. Also makes GUI visible/hidden /// </summary> public GraphicInterface(Engine engine) { containers = new List <Container>(); hovered_container = null; hovered_unit = null; visible = true; locked = false; outline_containers = false; this.engine = engine; textengine = new TextEngine(engine.get_UI_font(), Rectangle.Empty, Vector2.Zero, Color.White); // creating a textengine inside GUI }
/// <summary> /// Change slider value by holding left mouse button /// </summary> /// <param name="e">Unit'engine name</param> /// <param name="mouse">Mouse position</param> public void update_slider_values(UIElementBase unit, Vector2 mouse) { foreach (Container c in containers) { foreach (UIElementBase u in c.get_element_list()) { if (u == unit) // find specified element { // update slider value based on mouse movement if (u is Slider) { Slider tmp = (Slider)u; tmp.update(mouse); } } } } }
/// <summary> /// Adds an element to Container. Container bounds recalculated automatically based on number of elements in it /// </summary> /// <param name="engine">Unit reference</param> public void add_element(UIElementBase u) { u.set_parent(this); if (u.get_rectangle().Y == -1) { u.modify_bounds(u.get_rectangle().X, bounds.Height, u.get_rectangle().Width, u.get_rectangle().Height); } if (bounds.Width < (u.get_rectangle().Width + u.get_rectangle().X)) { bounds.Width = u.get_rectangle().Width + u.get_rectangle().X; } bounds.Height = u.get_rectangle().Height + u.get_rectangle().Y; stored_elements.Add(u); // recalculate a serializeable surrogate for Rectangle type bounds_surrogate = Engine.rectangle_to_delimited_string(bounds); }
/// <summary> /// Detects hovered on any GUI element and assigns names for hovered container/unit /// </summary> /// <param name="engine">Engine object reference</param> /// <returns>true/false value representing GUI hover</returns> public bool hover_detect() { if (locked) // testing - if GUI is locked - don't update hover detection until lock is removed { return(true); } hovered_container = null; hovered_unit = null; // detect hovered container // update states update_all_component_states(/*engine*/); foreach (Container c in containers) { if (c.get_rectangle().Intersects(engine.get_mouse_rectangle()) && c.is_visible()) { // container is hovered hovered_container = c; // assume that no containers are intersecting action_list[0] = c.get_action(); foreach (UIElementBase e in c.get_element_list()) { // calculate element rectangle by adding container origin Rectangle real_rectangle = new Rectangle(c.get_rectangle().X + e.get_rectangle().X, c.get_rectangle().Y + e.get_rectangle().Y, e.get_rectangle().Width, e.get_rectangle().Height); if (real_rectangle.Intersects(engine.get_mouse_rectangle()) && e.is_visible()) {// element is hovered hovered_unit = e; action_list[1] = e.get_action(); return(true); } } return(true); // this code is reached if a container is hovered and even if no elements is hovered } } return(false); }