public bool MoveBetweenCircle(Subject attacker, Subject defender, ECircles to)
            {
                int instanceDefender = defender.gameObject.GetInstanceID();

                var circle = circles[instanceDefender];

                return(circle.Move(attacker, to));
            }
            public bool Register(Subject enemy, ECircles type)
            {
                if (IsContains(enemy))
                {
                    return(Move(enemy, type));
                }

                var  circle       = circles[type];
                bool isRegistered = circle.Register(enemy);

                if (isRegistered)
                {
                    enemies.Add(enemy.gameObject.GetInstanceID()
                                , new KungFuData(enemy, type));
                }

                return(isRegistered);
            }
            public bool Move(Subject enemy, ECircles to)
            {
                int instance = enemy.gameObject.GetInstanceID();

                var data = enemies[instance];

                if (to.Equals(data.type))
                {
                    return(true);
                }

                var fromCircle = circles[data.type];
                var toCircle   = circles[to];

                fromCircle.Unregister(enemy);
                bool isSwapped = toCircle.Register(enemy);

                if (isSwapped)
                {
                    data.type = to;
                }

                return(isSwapped);
            }
            public bool RegisterToCircle(Subject attacker, Subject defender, ECircles type)
            {
                int instanceDefender = defender.gameObject.GetInstanceID();

                return(circles[instanceDefender].Register(attacker, type));
            }
 public KungFuData(Subject subject, ECircles type)
 {
     this.subject = subject;
     this.type    = type;
     //this.actionManager = subject.GetActionsManager ();
 }