예제 #1
0
        public static TargetLedger GetLedger(Component target, string memberName)
        {
            if (target == null)
            {
                return(null);
            }

            var ledger = target.GetComponent <CompoundStateLedger>();

            if (ledger == null)
            {
                ledger = target.AddComponent <CompoundStateLedger>();
            }

            var          token = new Token(target, memberName);
            TargetLedger result;

            if (ledger._table.TryGetValue(token, out result))
            {
                return(result);
            }

            result = TargetLedger.Create(ledger, target, memberName);
            ledger._table[new Token(target, memberName)] = result;
            return(result);
        }
예제 #2
0
            internal static TargetLedger Create(CompoundStateLedger owner, Component target, string memberName)
            {
                if (target == null || string.IsNullOrEmpty(memberName))
                {
                    return(null);
                }

                var member = DynamicUtil.GetMember(target, memberName, true);

                if (member == null)
                {
                    return(null);
                }

                var entry = new TargetLedger();

                entry._owner      = owner;
                entry._target     = target;
                entry._memberName = memberName;
                entry._accessor   = new DynamicMemberAccessor(memberName);
                entry.ReinitBaseValue();
                return(entry);
            }