Пример #1
0
    public void Update()
    {
        HoverOver hoverOver = HoverManager.main.getHoverOver();

        if (gameMode != GameMode.PlaceBuilding)
        {
            if (hoverOver == HoverOver.UI)
            {
                gameMode = GameMode.Menu;
            }
            else
            {
                gameMode = GameMode.Normal;
            }
        }

        switch (gameMode)
        {
        case GameMode.Normal:
            GameMode_NormalUpdate();
            break;

        case GameMode.Menu:
            GameMode_MenuUpdate();
            break;

        case GameMode.PlaceBuilding:
            GameMode_PlaceBuilding();
            break;
        }

        //Update Cursors
        switch (interactionMode)
        {
        case InteractionMode.Nothing:
            CursorManager.main.ChangeCursor(CursorID.Normal);
            break;

        case InteractionMode.Select:
            CursorManager.main.ChangeCursor(CursorID.Selectable);
            break;

        case InteractionMode.Move:
            CursorManager.main.ChangeCursor(CursorID.Moveable);
            break;

        case InteractionMode.Attack:
            CursorManager.main.ChangeCursor(CursorID.Attackable);
            break;

        case InteractionMode.Build:
            CursorManager.main.ChangeCursor(CursorID.Build);
            break;
        }
    }
Пример #2
0
    private void CalculateInteraction(HoverOver hoveringOver, ref InteractionState interactionState)
    {
        switch (hoveringOver)
        {
        case HoverOver.Menu:
        case HoverOver.Land:
            //Normal Interaction
            interactionState = InteractionState.Nothing;
            break;

        case HoverOver.FriendlyBuilding:
            //Select interaction
            interactionState = InteractionState.Select;

            //Unless a support item is selected
            if (m_GuiManager.GetSupportSelected == Const.MAINTENANCE_Sell)
            {
                //Sell
                if (currentObject.GetComponent <Building>().CanSell())
                {
                    interactionState = InteractionState.Sell;
                }
                else
                {
                    interactionState = InteractionState.CantSell;
                }
            }
            else if (m_GuiManager.GetSupportSelected == Const.MAINTENANCE_Fix)
            {
                //Fix
                if (currentObject.GetComponent <Building>().GetHealthRatio() < 1)
                {
                    interactionState = InteractionState.Fix;
                }
                else
                {
                    interactionState = InteractionState.CantFix;
                }
            }
            else if (m_GuiManager.GetSupportSelected == Const.MAINTENANCE_Disable)
            {
                //Disable
            }
            break;


        case HoverOver.FriendlyUnit:
        case HoverOver.EnemyUnit:
        case HoverOver.EnemyBuilding:
            //Select Interaction
            interactionState = InteractionState.Select;
            break;
        }
    }
Пример #3
0
    private void CalculateInteraction(List <IOrderable> list, HoverOver hoveringOver, ref InteractionState interactionState)
    {
        foreach (IOrderable obj in list)
        {
            if (obj.ShouldInteract(hoveringOver))
            {
                CalculateInteraction(obj, hoveringOver, ref interactionState);
                return;
            }
        }

        CalculateInteraction(hoveringOver, ref interactionState);
    }
Пример #4
0
    public void Init (CardDescriptor card, int index)
    {
        this.Inject ();
        hoverOver = GetComponent<HoverOver> ();
        hoverOver.Reset (hoverEnabled: true);
        Card = card;
        Index = index;

        _cardDescription = transform.FindChild ("Card Description");

        transform.FindChild ("Text").GetComponent<Text> ().text = Card.Name;

        transform.FindChild ("Image").GetComponent<Image> ().sprite = cardAssetsProvider.GetSpriteFromPath (Card.CardImage);

        RemoveOldIcons ();
        AddCardAttributeIcons (Card.CardAttributes);
    }
Пример #5
0
    public bool ShouldInteract(HoverOver hoveringOver)
    {
        switch (hoveringOver)
        {
        case HoverOver.Land:
            return(m_IsMoveable);

        case HoverOver.EnemyBuilding:
        case HoverOver.EnemyUnit:
            return(m_IsAttackable);

        case HoverOver.FriendlyUnit:
            return(m_IsDeployable && ManagerResolver.Resolve <IUIManager>().IsCurrentUnit(this));

        default:
            return(false);
        }
    }
Пример #6
0
    public bool ShouldInteract(HoverOver hoveringOver)
    {
        switch (hoveringOver) {
        case HoverOver.Land:
            return m_IsMoveable;

        case HoverOver.EnemyBuilding:
        case HoverOver.EnemyUnit:
            return m_IsAttackable;

        case HoverOver.FriendlyUnit:
            return m_IsDeployable && ManagerResolver.Resolve<IUIManager>().IsCurrentUnit (this);

        default:
            return false;
        }
    }
    private void ModeNormalBehaviour()
    {
        //Handle all non event, and non gui UI elements here
        hoverOver = HoverOver.Land;
        InteractionState interactionState = InteractionState.Nothing;

        //Are we hovering over the GUI or the main screen?
        if (Input.mousePosition.x < Screen.width-m_GuiWidth)
        {
            //We're over the main screen, let's raycast
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            if (Physics.Raycast (ray, out hit, Mathf.Infinity, ~(1 << 16)))
            {
                currentObject = hit.collider.gameObject;
                switch (currentObject.layer)
                {
                case 8:
                case 9:
                    if (currentObject.layer == primaryPlayer.controlledLayer)
                    {
                        hoverOver = HoverOver.FriendlyUnit;
                    }
                    else
                    {
                        hoverOver = HoverOver.EnemyUnit;
                    }

                    break;

                case 11:
                case 17:
                    //Terrain or shroud
                    hoverOver = HoverOver.Land;
                    break;

                case 12:
                    //Friendly Building
                    hoverOver = HoverOver.FriendlyBuilding;
                    break;

                case 13:
                    //Enemy building
                    hoverOver = HoverOver.EnemyBuilding;
                    break;
                }
            }
        }
        else
        {
            //Mouse is over GUI
            hoverOver = HoverOver.Menu;
        }

        if (hoverOver == HoverOver.Menu || m_SelectedManager.ActiveObjectsCount() == 0 || m_GuiManager.GetSupportSelected != 0)
        {
            //Nothing orderable Selected or mouse is over menu or support is selected
            CalculateInteraction (hoverOver, ref interactionState);
        }
        else if (m_SelectedManager.ActiveObjectsCount() == 1)
        {
            //One object selected
            CalculateInteraction (m_SelectedManager.FirstActiveObject(), hoverOver, ref interactionState);
        }
        else
        {
            //Multiple objects selected, need to find which order takes precedence
            CalculateInteraction (m_SelectedManager.ActiveObjectList(), hoverOver, ref interactionState);
        }

        //Tell the cursor manager to update itself based on the interactionstate
        CursorManager.main.UpdateCursor (interactionState);
    }
    // TODO:
    // Break the loop and return the desired interaction
    private void CalculateInteraction(List<IOrderable> list, HoverOver hoveringOver, ref InteractionState interactionState)
    {
        foreach (IOrderable obj in list)
        {
            bool ShouldInterractB = obj.ShouldInteract(hoveringOver);

            if (ShouldInterractB)
            {
                if (hoveringOver == HoverOver.EnemyUnit)
                {
                    CalculateInteraction(obj, hoveringOver, ref interactionState);
                    return;
                }
            }
        }
        CalculateInteraction (hoveringOver, ref interactionState);
    }
    private void CalculateInteraction(IOrderable obj, HoverOver hoveringOver, ref InteractionState interactionState)
    {
        if (obj.IsAttackable())
        {
            if (hoverOver == HoverOver.EnemyUnit || hoverOver == HoverOver.EnemyBuilding)
            {
                //Attack Interaction
                interactionState = InteractionState.Attack;
                return;
            }
        }

        if (obj.IsDeployable())
        {
            if (((RTSObject)obj).gameObject.Equals (currentObject))
            {
                //Deploy Interaction
                interactionState = InteractionState.Deploy;
                return;
            }
        }

        if (obj.IsInteractable ())
        {
            if (hoverOver == HoverOver.FriendlyUnit)
            {
                //Check if object can interact with unit (carry all for example)
                if (((IInteractable)obj).InteractWith(currentObject))
                {
                    //Interact Interaction
                    interactionState = InteractionState.Interact;
                    return;
                }
            }
        }

        if (obj.IsMoveable())
        {
            if (hoverOver == HoverOver.Land)
            {
                //Move Interaction
                interactionState = InteractionState.Move;
                return;
            }
        }

        if (hoverOver == HoverOver.FriendlyBuilding)
        {
            //Check if building can interact with object (repair building for example)
            if (currentObject.GetComponent<Building>().InteractWith (obj))
            {
                //Interact Interaction
                    interactionState = InteractionState.Interact;
                    return;
            }
        }

        if (hoverOver == HoverOver.FriendlyUnit || hoverOver == HoverOver.FriendlyBuilding || hoverOver == HoverOver.EnemyUnit || hoverOver == HoverOver.EnemyBuilding)
        {
            //Select Interaction
            interactionState = InteractionState.Select;
            return;
        }

        //Invalid interaction
        interactionState = InteractionState.Invalid;
    }
    private void CalculateInteraction(HoverOver hoveringOver, ref InteractionState interactionState)
    {
        switch (hoveringOver)
        {
        case HoverOver.Menu:
        case HoverOver.Land:
            //Normal Interaction
            interactionState = InteractionState.Nothing;
            break;

        case HoverOver.FriendlyBuilding:
            //Select interaction
            interactionState = InteractionState.Select;

            //Unless a support item is selected
            if (m_GuiManager.GetSupportSelected == Const.MAINTENANCE_Sell)
            {
                //Sell
                if (currentObject.GetComponent<Building>().CanSell ())
                {
                    interactionState = InteractionState.Sell;
                }
                else
                {
                    interactionState = InteractionState.CantSell;
                }
            }
            else if (m_GuiManager.GetSupportSelected == Const.MAINTENANCE_Fix)
            {
                //Fix
                if (currentObject.GetComponent<Building>().GetHealthRatio () < 1)
                {
                    interactionState = InteractionState.Fix;
                }
                else
                {
                    interactionState = InteractionState.CantFix;
                }
            }
            else if (m_GuiManager.GetSupportSelected == Const.MAINTENANCE_Disable)
            {
                //Disable
            }
            break;

        case HoverOver.FriendlyUnit:
        case HoverOver.EnemyUnit:
        case HoverOver.EnemyBuilding:
            interactionState = InteractionState.Select;

            break;
        }
    }
Пример #11
0
    private void ModeNormalBehaviour()
    {
        //Handle all non event, and non gui UI elements here
        hoverOver = HoverOver.Land;
        InteractionState interactionState = InteractionState.Nothing;

        //Are we hovering over the GUI or the main screen?
        if (Input.mousePosition.x < Screen.width - m_GuiWidth)
        {
            //We're over the main screen, let's raycast
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit, Mathf.Infinity, ~(1 << 16)))
            {
                currentObject = hit.collider.gameObject;
                switch (hit.collider.gameObject.layer)
                {
                case 8:
                    //Friendly unit
                    hoverOver = HoverOver.FriendlyUnit;
                    break;

                case 9:
                    //Enemy Unit
                    hoverOver = HoverOver.EnemyUnit;
                    break;

                case 11:
                case 17:
                    //Terrain or shroud
                    hoverOver = HoverOver.Land;
                    break;

                case 12:
                    //Friendly Building
                    hoverOver = HoverOver.FriendlyBuilding;
                    break;

                case 13:
                    //Enemy building
                    hoverOver = HoverOver.EnemyBuilding;
                    break;
                }
            }
        }
        else
        {
            //Mouse is over GUI
            hoverOver = HoverOver.Menu;
        }

        if (hoverOver == HoverOver.Menu || m_SelectedManager.ActiveObjectsCount() == 0 || m_GuiManager.GetSupportSelected != 0)
        {
            //Nothing orderable Selected or mouse is over menu or support is selected
            CalculateInteraction(hoverOver, ref interactionState);
        }
        else if (m_SelectedManager.ActiveObjectsCount() == 1)
        {
            //One object selected
            CalculateInteraction(m_SelectedManager.FirstActiveObject(), hoverOver, ref interactionState);
        }
        else
        {
            //Multiple objects selected, need to find which order takes precedence
            CalculateInteraction(m_SelectedManager.ActiveObjectList(), hoverOver, ref interactionState);
        }

        //Tell the cursor manager to update itself based on the interactionstate
        CursorManager.main.UpdateCursor(interactionState);
    }
Пример #12
0
    private void CalculateInteraction(IOrderable obj, HoverOver hoveringOver, ref InteractionState interactionState)
    {
        if (obj.IsAttackable())
        {
            if (hoverOver == HoverOver.EnemyUnit || hoverOver == HoverOver.EnemyBuilding)
            {
                //Attack Interaction
                interactionState = InteractionState.Attack;
                return;
            }
        }

        if (obj.IsDeployable())
        {
            if (((RTSObject)obj).gameObject.Equals(currentObject))
            {
                //Deploy Interaction
                interactionState = InteractionState.Deploy;
                return;
            }
        }

        if (obj.IsInteractable())
        {
            if (hoverOver == HoverOver.FriendlyUnit)
            {
                //Check if object can interact with unit (carry all for example)
                if (((IInteractable)obj).InteractWith(currentObject))
                {
                    //Interact Interaction
                    interactionState = InteractionState.Interact;
                    return;
                }
            }
        }

        if (obj.IsMoveable())
        {
            if (hoverOver == HoverOver.Land)
            {
                //Move Interaction
                interactionState = InteractionState.Move;
                return;
            }
        }

        if (hoverOver == HoverOver.FriendlyBuilding)
        {
            //Check if building can interact with object (repair building for example)
            if (currentObject.GetComponent <Building>().InteractWith(obj))
            {
                //Interact Interaction
                interactionState = InteractionState.Interact;
                return;
            }
        }

        if (hoverOver == HoverOver.FriendlyUnit || hoverOver == HoverOver.FriendlyBuilding || hoverOver == HoverOver.EnemyUnit || hoverOver == HoverOver.EnemyBuilding)
        {
            //Select Interaction
            interactionState = InteractionState.Select;
            return;
        }

        //Invalid interaction
        interactionState = InteractionState.Invalid;
    }
        public override void DrawSeriesAndAxis(FivePointNine.Windows.Graphics.Graphics2 g)
        {
            if (dsCollection == null)
            {
                return;
            }

            string YUnit  = dsCollection[0].YUnits.Name;
            string unit   = dsCollection[0].YUnits.Unit;
            bool   noUnit = false;

            for (int i = 1; i < dsCollection.Count; i++)
            {
                if (!dsCollection[i].Enabled)
                {
                    continue;
                }
                if (unit != dsCollection[i].YUnits.Unit)
                {
                    noUnit = true;
                    break;
                }
                if (!YUnit.Contains(dsCollection[i].YUnits.Name))
                {
                    YUnit += ", " + dsCollection[i].YUnits.Name;
                }
            }
            if (noUnit)
            {
                YUnit = "Error -- Incompatible units";
            }
            else
            {
                YUnit += " (" + dsCollection[0].YUnits.Unit + ")";
            }


            var yLabelSz = g.MeasureString(YUnit, Font);
            var xLabelSz = g.MeasureString(XUnit, Font);

            YLabelWidth  = yLabelSz.Height * 2;
            XLabelHeight = xLabelSz.Height * 2;
            g.Clip       = new Region(DrawPlotArea);
            g.DrawString(YUnit, Font, Color.Black, Width - YLabelWidth / 2 * 1.5F, (Height - XLabelHeight) / 2 + yLabelSz.Width / 2, -90);
            g.DrawString(XUnit, Font, Color.Black, (Width - YLabelWidth) / 2, Height - XLabelHeight * 1.5F / 2.0F);
            g.SmoothingMode = SmoothingMode.AntiAlias;

            foreach (var DataSeries in dsCollection.SeriesList)
            {
                if (DataSeries != null)
                {
                    if (DataSeries.Enabled)
                    {
                        if (DataSeries != HoverOver)
                        {
                            DataSeries.Draw(g, (int)DrawPlotArea.Width, (int)(Height - XLabelHeight), xOffsetG, yOffsetG, XPPU, YPPU, false);
                        }
                    }
                }
            }
            if (HoverOver != null)
            {
                HoverOver.Draw(g, (int)DrawPlotArea.Width, (int)DrawPlotArea.Height, xOffsetG, yOffsetG, XPPU, YPPU, false);
            }

            g.Clip = new Region(new RectangleF(0, 0, Width, Height));
        }
Пример #14
0
    public void Update()
    {
        //Reset variables
        currentHoverGameObject = null;
        currentHoverRTSObject  = null;
        isHoverRTSObject       = false;
        hoverOver = HoverOver.Nothing;


        //2D Raycast
        PointerEventData pointerData = new PointerEventData(EventSystem.current);

        pointerData.position = Input.mousePosition;

        List <RaycastResult> results = new List <RaycastResult>();

        EventSystem.current.RaycastAll(pointerData, results);

        if (results.Count > 0)
        {
            if (results[0].gameObject.layer == LayerMask.NameToLayer("UI"))
            {
                //string dbg = "Root Element: {0} \n GrandChild Element: {1}";
                //Debug.Log(string.Format(dbg, results[results.Count-1].gameObject.name, results[0].gameObject.name));
                //results.Clear();

                hoverOver = HoverOver.UI;
            }
        }


        //3D Raycast with all objects
        {
            int          rayLength = 50;
            Ray          ray       = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit[] hits      = Physics.RaycastAll(ray, rayLength);
            for (int i = 0; i < hits.Length; i++)
            {
                RaycastHit hit = hits[i];

                //Layer only
                if (hit.collider.gameObject.layer == LayerMask.NameToLayer("Terrain"))
                {
                    hoverTerrainPosision = hit.point;
                }
            }
        }

        //3D Raycast
        if (hoverOver == HoverOver.Nothing)
        {
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, Mathf.Infinity))              //LayerMask.NameToLayer("GameObject")
            {
                currentHoverGameObject = hit.collider.gameObject;

                //If the gameObject is the terrain
                if (currentHoverGameObject.layer == LayerMask.NameToLayer("Terrain"))
                {
                    hoverOver = HoverOver.Terrain;
                }
                //If the gameObject is a RTSGameObject
                else if (currentHoverGameObject.GetComponent <RTSGameObject>() != null)
                {
                    currentHoverRTSObject = currentHoverGameObject.GetComponent <RTSGameObject>();
                    isHoverRTSObject      = true;


                    if (TeamManager.main.player1.IsRTSAlly(currentHoverRTSObject))
                    {
                        if (currentHoverRTSObject.unitType == UnitType.Unit)
                        {
                            hoverOver = HoverOver.UnitFriendly;
                        }
                        else if (currentHoverRTSObject.unitType == UnitType.Building)
                        {
                            hoverOver = HoverOver.BuildingFriendly;
                        }
                    }
                    else if (TeamManager.main.player1.IsRTSEnemy(currentHoverRTSObject))
                    {
                        if (currentHoverRTSObject.unitType == UnitType.Unit)
                        {
                            hoverOver = HoverOver.UnitEnemy;
                        }
                        else if (currentHoverRTSObject.unitType == UnitType.Building)
                        {
                            hoverOver = HoverOver.BuildingEnemy;
                        }
                    }
                    else
                    {
                        hoverOver = HoverOver.Nothing;
                    }

                    currentHoverRTSObject.OnHover();                            //RTS method message
                }
            }
        }
    }
Пример #15
0
    //------------------------------Game Mode Updates------------------------------
    private void GameMode_NormalUpdate()
    {
        //Set variables
        interactionMode = InteractionMode.Nothing;
        HoverOver            hoverOver        = HoverManager.main.getHoverOver();
        List <RTSGameObject> allSelectedUnits = SelectedManager.main.GetSelectedObjects();


        //Is their any selected RTSGameObjects
        if (SelectedManager.main.GetSelectedObjectsCount() > 0)
        {
            RTSGameObject firstSelectedObject = SelectedManager.main.GetFirstSelectedObject();


            //Is the RTSGameObject able to attack
            if (firstSelectedObject.canAttack)
            {
                if (hoverOver == HoverOver.UnitEnemy || hoverOver == HoverOver.BuildingEnemy)
                {
                    interactionMode = InteractionMode.Attack;
                    return;
                }
            }

            //Is the RTSGameObject a Unit
            if (firstSelectedObject.GetComponent <Unit>())
            {
                Unit unit = (Unit)firstSelectedObject;

                //Can the Unit move
                if (unit.canMove)
                {
                    if (hoverOver == HoverOver.Terrain)
                    {
                        interactionMode = InteractionMode.Move;
                        return;
                    }
                }

                //Can the Unit interact
                if (unit.canInteract)
                {
                    if (hoverOver == HoverOver.UnitFriendly)
                    {
                        //Check if Unit can interact with another Unit (Heal another unit for example)
                    }
                    if (hoverOver == HoverOver.BuildingFriendly)
                    {
                        //Check if Unit can interact with Building (Repair building for example)
                    }
                }
            }

            //Is the RTSGameObject a Worker
            if (firstSelectedObject.GetComponent <Worker>())
            {
                Worker worker = (Worker)firstSelectedObject;

                //Can the Worker build
                if (worker.canBuild)
                {
                    if (hoverOver == HoverOver.BuildingFriendly)
                    {
                        Building building = (Building)HoverManager.main.currentHoverRTSObject;
                        if (building.buildingMode == BuildingMode.Construction)
                        {
                            interactionMode = InteractionMode.Build;
                        }
                    }
                }
            }
        }
        //To select any kind of unit
        else if (hoverOver == HoverOver.UnitFriendly || hoverOver == HoverOver.BuildingFriendly || hoverOver == HoverOver.UnitEnemy || hoverOver == HoverOver.BuildingEnemy)
        {
            //Select Interaction
            interactionMode = InteractionMode.Select;
            return;
        }
    }