예제 #1
0
 public bool IsConnectedTo(MessageLine other)
 {
     return(other.HandlerActor == HandlerActor ||
            other.HandlerActor == CallerActor ||
            other.CallerActor == HandlerActor ||
            other.CallerActor == CallerActor);
 }
예제 #2
0
        private void OnMessageHandleHandler(Type callerType, Type handlerType, Type messageType, string messageName, string handlerMethodName)
        {
            MessageActorWidget callerActor  = GetOrCreateActor(callerType);
            MessageActorWidget handlerActor = GetOrCreateActor(handlerType);

            callerActor.LogSentMessage(handlerActor, messageType, messageName);
            handlerActor.LogHandledMessage(callerActor, messageType, messageName);

            MessageLine line           = messageLines.Find(x => (x.CallerActor == callerActor && x.HandlerActor == handlerActor));
            bool        newLineCreated = false;
            bool        reversed       = false;

            if (line == null)
            {
                // Check for reversed to change it to TwoWay line
                line = messageLines.Find(x => (x.HandlerActor == callerActor && x.CallerActor == handlerActor));
                if (line != null)
                {
                    reversed = true;
                }
                else
                {
                    line = new MessageLine(callerActor, handlerActor);
                    messageLines.Add(line);
                    newLineCreated = true;
                }
            }

            line.SendMessage(messageType, messageName == "" ? messageType.ToString() : '"' + messageName + '"', reversed);

            if (newLineCreated)
            {
                chainesAreDirty = true;
            }
        }
예제 #3
0
        private void ReconstructMessageChains()
        {
            messageChains.Clear();
            List <MessageLine> looseLines = new List <MessageLine>(messageLines);

            while (looseLines.Count > 0)
            {
                MessageChain chain = new MessageChain();

                chain.Lines.Add(looseLines[0]);
                looseLines.RemoveAt(0);

                bool addedNewLine = true;
                while (addedNewLine)
                {
                    addedNewLine = false;
                    if (looseLines.Count > 0)
                    {
                        for (int i = looseLines.Count - 1; i >= 0; i--)
                        {
                            MessageLine looseLine = looseLines[i];
                            foreach (MessageLine lineInChain in chain.Lines)
                            {
                                if (lineInChain.IsConnectedTo(looseLine))
                                {
                                    chain.Lines.Add(looseLine);
                                    looseLines.RemoveAt(i);
                                    addedNewLine = true;
                                    break;
                                }
                            }
                        }
                    }
                }

                chain.RepositionInternally();
                messageChains.Add(chain);
            }

            float totalHeight = 0.0f;
            float maxWidth    = 0.0f;

            foreach (MessageChain chain in messageChains)
            {
                chain.Position = new Vector2(0.0f, totalHeight);
                totalHeight   += chain.Height;
                maxWidth       = Mathf.Max(maxWidth, chain.Width);
                totalHeight   += chainMarginVert;
            }

            boundingBox = new Rect(0, 0, maxWidth, totalHeight);
        }
예제 #4
0
        public void Update()
        {
            foreach (MessageLine messageLine in messageLines)
            {
                messageLine.Update();
            }
            foreach (MessageActorWidget actor in messageActors)
            {
                actor.Update();
            }

            MessageLine.UpdateHeavy();
        }
예제 #5
0
        public static void UpdateHeavy()
        {
            for (int i = instances.Count - 1; i >= 0; i--)
            {
                if (instances[i] == null)
                {
                    instances.RemoveAt(i);
                }
            }

            if (instances.Count == 0)
            {
                return;
            }

            if (focusedInstanceIndex > instances.Count - 1)
            {
                focusedInstanceIndex = 0;
            }
            MessageLine line = instances[focusedInstanceIndex];

            line.UpdateWayPoints();
            focusedInstanceIndex++;
        }