예제 #1
0
        private void Subscribe(ScriptEventData sed)
        {
            if (subscription == null)
            {
                subscription = SubscribeToAll(StartEvent, (ScriptEventData subdata) =>
                {
                    ISimpleData simpledata = subdata.Data?.AsInterface <ISimpleData>();
                    if (simpledata != null && simpledata.AgentInfo != null)
                    {
                        AgentPrivate agent = ScenePrivate.FindAgent(simpledata.AgentInfo.SessionId);

                        if (agent != null && agent.IsValid)
                        {
                            broadcastAgents.Add(agent);
                            ScenePrivate.SetMegaphone(agent, true); // User gets notified of megaphone status
                        }
                    }
                });

                subscription += SubscribeToAll(StopEvent, (ScriptEventData subdata) =>
                {
                    ISimpleData simpledata = subdata.Data?.AsInterface <ISimpleData>();
                    if (simpledata != null && simpledata.AgentInfo != null)
                    {
                        AgentPrivate agent = ScenePrivate.FindAgent(simpledata.AgentInfo.SessionId);

                        if (agent != null && agent.IsValid)
                        {
                            broadcastAgents.Remove(agent);
                            ScenePrivate.SetMegaphone(agent, false); // User gets notified of megaphone status
                        }
                    }
                });

                subscription += SubscribeToAll(ToggleEvent, (ScriptEventData subdata) =>
                {
                    ISimpleData simpledata = subdata.Data?.AsInterface <ISimpleData>();
                    if (simpledata != null && simpledata.AgentInfo != null)
                    {
                        AgentPrivate agent = ScenePrivate.FindAgent(simpledata.AgentInfo.SessionId);

                        if (agent != null && agent.IsValid)
                        {
                            if (broadcastAgents.Contains(agent))
                            {
                                broadcastAgents.Remove(agent);
                                ScenePrivate.SetMegaphone(agent, false); // User gets notified of megaphone status
                            }
                            else
                            {
                                broadcastAgents.Add(agent);
                                ScenePrivate.SetMegaphone(agent, true); // User gets notified of megaphone status
                            }
                        }
                    }
                });
            }
        }
예제 #2
0
 private void OnCollision(CollisionData data)
 {
     if (data.Phase == CollisionEventPhase.TriggerEnter)
     {
         Log.Write("Setting Megaphone mode for: " + ScenePrivate.FindAgent(data.HitObject.ObjectId));
         ScenePrivate.SetMegaphone(ScenePrivate.FindAgent(data.HitObject.ObjectId), true);
         Log.Write("After Set Megaphone");
     }
 }
예제 #3
0
    public override void Init()
    {
        ScenePrivate.User.Subscribe(User.AddUser, OnAddUser);

        foreach (var visitor in ScenePrivate.GetAgents())
        {
            ScenePrivate.SetMegaphone(visitor, true);
        }
    }
예제 #4
0
 private void OnUserLeave(UserData data)
 {
     ScenePrivate.SetMegaphone(ScenePrivate.FindAgent(data.User), false);
 }
예제 #5
0
 private void OnUserJoin(UserData data)
 {
     ScenePrivate.SetMegaphone(ScenePrivate.FindAgent(data.User), true);
 }
예제 #6
0
    void OnAddUser(UserData ud)
    {
        AgentPrivate agent = ScenePrivate.FindAgent(ud.User);

        ScenePrivate.SetMegaphone(agent, true);
    }