Пример #1
0
        public void Setup(ActorBehavior b, IEntity a)
        {
            var        type = b.GetType();
            CachedType o;
            var        isCached = cached.TryGetValue(type, out o);

            if (!isCached)
            {
                o = new CachedType();

                var objectFields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                var length       = objectFields.Length;
                cached.Add(type, o);
                for (var i = 0; i < length; i++)
                {
                    var myFieldInfo = objectFields[i];
                    var attribute   = Attribute.GetCustomAttribute(objectFields[i], typeof(BindAttribute)) as BindAttribute;

                    if (attribute != null)
                    {
                        var fieldType = myFieldInfo.FieldType;


                        switch (attribute.bindType)
                        {
                        case 0:

                            myFieldInfo.SetValue(b, a.Get(fieldType));
                            o.cachedBindFields.Add(myFieldInfo);
                            break;

                        case 1:
                            myFieldInfo.SetValue(b, Toolbox.Get(fieldType));
                            o.cachedToolboxFields.Add(myFieldInfo);
                            break;

                        case 2:
                            var actor = a as Actor;
                            myFieldInfo.SetValue(b, actor != null ? actor.GetComponentInChildren(fieldType) : a.GetTransform().GetComponentInChildren(fieldType));
                            o.cachedFromObjFields.Add(myFieldInfo);
                            break;

                        case 3:
                            var blueprint = a.Get <DataBlueprint>().blueprint;
                            myFieldInfo.SetValue(b, blueprint.Get(fieldType));
                            o.cachedFromBlueprintFields.Add(myFieldInfo);
                            break;
                        }
                    }
                }
            }
            else
            {
                o.Bind(b, a);

                o.GetFromToolbox(b);
                o.GetFromObject(b, a);
                o.GetFromBlueprint(b, a);
            }
        }
Пример #2
0
 void AddBehavior(ActorBehavior behavior, bool enabled = true)
 {
     behavior.Awake(this);
     behavior.Enable(enabled);
     behaviours.Add(behavior);
     countBehaviors++;
 }
Пример #3
0
 public void GetFromToolbox(ActorBehavior behavior)
 {
     for (var i = 0; i < cachedToolboxFields.Count; i++)
     {
         var myFieldInfo = cachedToolboxFields[i];
         var fieldType   = myFieldInfo.FieldType;
         myFieldInfo.SetValue(behavior, Toolbox.Get(fieldType));
     }
 }
Пример #4
0
            public void Bind(ActorBehavior behavior, IEntity a)
            {
                for (var i = 0; i < cachedBindFields.Count; i++)
                {
                    var myFieldInfo = cachedBindFields[i];
                    var fieldType   = myFieldInfo.FieldType;

                    myFieldInfo.SetValue(behavior, a.Get(fieldType));
                }
            }
Пример #5
0
            public void GetFromBlueprint(ActorBehavior behavior, IEntity a)
            {
                for (var i = 0; i < cachedFromBlueprintFields.Count; i++)
                {
                    var myFieldInfo = cachedFromBlueprintFields[i];
                    var fieldType   = myFieldInfo.FieldType;
                    var blueprint   = a.Get <DataBlueprint>().blueprint;

                    myFieldInfo.SetValue(behavior, blueprint.Get(fieldType));
                }
            }
Пример #6
0
            public void GetFromObject(ActorBehavior behavior, IEntity a)
            {
                for (var i = 0; i < cachedFromObjFields.Count; i++)
                {
                    var myFieldInfo = cachedFromObjFields[i];
                    var fieldType   = myFieldInfo.FieldType;
                    var actor       = a as Actor;

                    myFieldInfo.SetValue(behavior, actor != null ? actor.GetComponentInChildren(fieldType) : a.GetTransform().GetComponentInChildren(fieldType));
                }
            }
Пример #7
0
 void AddBehavior(ActorBehavior behavior, bool enabled = true)
 {
     behavior.Awake(this);
     behavior.Enable(enabled);
 }