Exemple #1
0
    private void HandleLeftClick(NetworkPlayer me, MouseClickEventArgs e)
    {
        uiManager.ContextMenu.Hide();

        // ignore other players for now since we don't have
        // a left button action on players yet. Going to be for selecting/targeting players.
        var player = e.GetNetworkPlayer();

        if (player)
        {
            UnityEngine.Debug.Log("We left clicked on a player.");
            return;
        }

        var npc = e.GetNetworkNpc();

        if (npc)
        {
            me.MoveToAndInteractWith(NpcInteraction.Create(me, npc, -1), CheckIfRunning());
            return;
        }

        var worldObject = e.GetNetworkObject();

        //var worldObject = e.Object.transform.GetComponentInParent<NetworkObject>();
        if (worldObject)
        {
            me.MoveToAndInteractWith(ObjectInteraction.Create(me, worldObject), CheckIfRunning());
            return;
        }


        if (moveSound)
        {
            moveSound.Play();
        }

        var terrainHit = e.GetTerrain();

        //var terrain = e.Object.transform.GetComponent<Terrain>();
        if (terrainHit.Terrain)
        {
            HandleTerrainInteraction(e, terrainHit.Terrain, terrainHit.Point);
            return;
        }

        WalkTo(me, terrainHit.Point);
    }
Exemple #2
0
    private void OnMouseEnter(object sender, MouseClickEventArgs e)
    {
        if (!networkClient || !networkClient.IsAuthenticated)
        {
            return;
        }

        var objId = -1;

        foreach (var hit in e.Collection)
        {
            if (hit.collider.gameObject.name.IndexOf("::") < 0)
            {
                continue;
            }

            if (int.TryParse(hit.collider.gameObject.name.Split(new string[] { "::" }, StringSplitOptions.RemoveEmptyEntries)[1], out objId))
            {
                break;
            }
        }

        var npc = e.GetNetworkNpc();

        if (npc)
        {
            var defaultAction = npc.Data.Actions.FirstOrDefault();
            if (defaultAction)
            {
                SetCursorIcon(defaultAction.CursorIcon);
            }
            return;
        }

        var player = e.GetNetworkPlayer();

        if (player)
        {
            if (playerManager.Me == player)
            {
                return;
            }

            var playerActions = playerManager.GetPlayerAlignmentActions(player.Alignment);
            var defaultAction = playerActions.FirstOrDefault();
            if (defaultAction)
            {
                SetCursorIcon(defaultAction.CursorIcon);
            }
            return;
        }

        var data = objectManager.GetObjectData(objId);

        if (data)
        {
            var defaultAction = data.Actions.FirstOrDefault();
            if (defaultAction)
            {
                SetCursorIcon(defaultAction.CursorIcon);
            }
            return;
        }
    }
Exemple #3
0
    private void HandleRightClick(NetworkPlayer me, MouseClickEventArgs e)
    {
        var player = e.GetNetworkPlayer();

        if (player)
        {
            var playerActions = playerManager.GetPlayerAlignmentActions(player.Alignment);
            if (playerActions.Count == 0)
            {
                return;
            }

            uiManager.ContextMenu
            .SetHeader(player.name)
            .SetItems(playerActions.Select(x => new ContextMenuItem
            {
                Text     = x.Name,
                Click    = () => HandlePlayerInteraction(player, x.Id),
                ActionId = x.Id
            }).ToArray())
            .Show();
            return;
        }

        var npc = e.GetNetworkNpc();

        if (npc)
        {
            var npcActions = npc.Data.Actions;
            if (npcActions.Length == 0)
            {
                return;
            }

            uiManager.ContextMenu
            .SetHeader(npc.name)
            .SetItems(npcActions.Select(x => new ContextMenuItem
            {
                Text     = x.Name,
                Click    = () => HandleNpcInteraction(npc, x.Id),
                ActionId = x.Id
            }).ToArray())
            .Show();
            return;
        }

        var worldObject = e.GetNetworkObject();

        if (worldObject)
        {
            uiManager.ContextMenu
            .SetHeader(worldObject.Data.Name)
            .Show();
            return;
        }

        var terrainHit = e.GetTerrain();

        if (terrainHit.Terrain)
        {
            var staticObjectHit = e.Collection.FirstOrDefault(x => x.collider.name.Contains("::"));
            if (staticObjectHit.point != Vector3.zero || IsStaticObject(terrainHit.Terrain, terrainHit.Point))
            {
                var objCollider = e.GetStaticCollider();
                var objId       = objCollider.gameObject.GetObjectId();
                if (objId >= 0)
                {
                    var data = objectManager.GetObjectData(objId);

                    uiManager.ContextMenu
                    .SetHeader(data.Name)
                    .SetItems(data.Actions.Select(x => new ContextMenuItem
                    {
                        Text     = x.Name,
                        Click    = () => HandleStaticObjectInteraction(terrainHit.Terrain, terrainHit.Point, x.Id, objCollider),
                        ActionId = x.Id
                    }).ToArray())
                    .Show();
                }
                return;
            }

            uiManager.ContextMenu
            .SetHeader("Terrain")
            .SetItems(new ContextMenuItem
            {
                Text  = "Walk Here",
                Click = () => WalkTo(me, terrainHit.Point)
            })
            .Show();
        }
    }