Пример #1
0
        /// <summary>
        /// Selectes the targeted group and finds out info about a object where the mouse clicked.
        /// After that calls OnRightMouseClick on a group and depending on the response is called
        /// the appropriate action.
        /// </summary>
        /// <param Name="clickedPoint">The mouse position.</param>
        /// <param Name="selectedObjects">The objects in clicked area.</param>
        public void OnRightClick(Mogre.Vector3 clickedPoint, List <Mogre.MovableObject> selectedObjects)
        {
            Mogre.MovableObject hitObject;
            bool isFriendly = true;
            bool isIMGO     = true;

            if (selectedObjects.Count == 0)
            {
                // Nothing at clicked area.
                hitObject = null;
            }
            else
            {
                hitObject = selectedObjects[0];
                Team targetTeam;
                // The clicked object is not controllable.
                if (!hitTest.IsObjectControllable(hitObject.Name))
                {
                    return;
                }

                if (hitTest.IsObjectMovable(hitObject.Name))
                {
                    // The clicked object is movable.
                    targetTeam = hitTest.GetIMGO(hitObject.Name).Team;
                }
                else
                {
                    // The clicked object is static.
                    targetTeam = hitTest.GetISGO(hitObject.Name).Team;
                    isIMGO     = false;
                }

                // Checks if the object is friendly.
                isFriendly = teamMgr.AreFriendly(groupMgr.ActiveTeam, targetTeam);
            }

            // Gets the selected group answer on mouse action (clicked position).
            var answer = groupMgr.SelectInfoGroup(clickedPoint, hitObject, isFriendly, isIMGO);

            Game.IEffectPlayer.PlayEffect(groupSelectedSound);             // Plays effect

            // Chooses the next action by the group reply.
            switch (answer)
            {
            case ActionAnswer.Move:
                Game.PrintToGameConsole("Group from team " + groupMgr.GetActiveMovableGroup().Team.Name + " moving to " + clickedPoint.ToString());
                moveMgr.GoToLocation(groupMgr.GetActiveMovableGroup(), clickedPoint);
                break;

            case ActionAnswer.MoveTo:
                moveMgr.GoToTarget(groupMgr.GetActiveMovableGroup(), hitTest.GetGameObject(hitObject.Name));
                break;

            case ActionAnswer.Attack:
                fightMgr.Attack(groupMgr.GetActiveMovableGroup(), hitTest.GetGameObject(hitObject.Name));
                break;

            case ActionAnswer.Occupy:
                fightMgr.Occupy(groupMgr.GetActiveMovableGroup(), hitTest.GetGameObject(hitObject.Name));
                break;
            }
        }