Skip to content

Possible bug in Iterator (String) in 1.27

Make us happy - post a bug!

Possible bug in Iterator (String) in 1.27

Postby juanjo » 31 May 2012, 17:08

IEnumerable iterator with an string array goes red and informs a 'TriggerLink Invocation Error'.
Same code works in 1.26

Image

Here is this test graph. You can preview it and then save in a empty test GameObject:
http://dl.dropbox.com/u/31971404/bug%20Iterator%20en%20Universe%201.27%20%40%20foro%20Universe/iterator_problem.universe.graph.bytes
juanjo
 
Posts: 17
Joined: 09 Apr 2011, 16:22

Re: Possible bug in Iterator (String) in 1.27

Postby Neodrop » 31 May 2012, 17:49

Try to use this code as SmartBlock :

Syntax:
Using csharp Syntax Highlighting
using System;
using System.Collections;
using Antares.Vizio.Runtime;

[VisualLogicBlockDescription("IEnumerators iterator")]
    [VisualLogicBlock("IEnumerable", "Iterators", ParentName = "Iterator")]
    public class IENumeratorIterator : LogicBlock
    {
        [Parameter(VariableType.In, typeof(IEnumerable), Name = "IEnumerable")]
        public Variable collection;

        [Parameter(VariableType.Out, typeof(object), Name = "Value")]
        public Variable outValue;

        private bool _stop;

        [EntryTrigger("Start iteration")]
        public void Start()
        {
            StackOff();
            IEnumerable num = (IEnumerable)collection.Value;
            _stop = false;

            var enumerator = num.GetEnumerator();
            while(enumerator.MoveNext())
            {
                outValue.Value = enumerator.Current;
                ActivateTrigger();
                if (_stop) break;
            }
            StackOn();

            ActivateTrigger("Done");
        }

        [EntryTrigger("Break iteration")]
        public void Break()
        {
            _stop = true;
        }

        public override void OnInitializeDefaultData()
        {
            RegisterOutputTrigger("Move Next");
            RegisterOutputTrigger("Done");
        }

        // блок универсальный
        public override bool GetIsGeneric()
        {
            return true;
        }

        // поддерживается 1 сменный тип
        public override int GetCountGenericParameters()
        {
            return 1;
        }

        // получение типа по индексу
        public override Type GetBlockType(int index)
        {
            return outValue.Type;
        }

        // установка типов
        public override void SetBlockType(int index, Type type)
        {
            // index не используем, т.е. 1 сменный тип
            if (type.IsArray)
            {
                type = type.GetElementType();
            }
            outValue.Type = type;
        }

        // назначать можно только не массивы
        public override bool IsSupportedType(Type type)
        {
            return true;
        }

        // описание сменного типа
        public override string GetBlockTypeDescription(int index)
        {
            // index не используем, т.е. 1 сменный тип
            return "Output type";
        }

        public override bool GetIsCoroutine()
        {
            return false;
        }
    }
 
Parsed in 0.020 seconds, using GeSHi 1.0.8.4
User avatar
Neodrop
Администратор
 
Posts: 1068
Joined: 15 Jan 2011, 13:18

Re: Possible bug in Iterator (String) in 1.27

Postby juanjo » 31 May 2012, 23:56

Thanks Neodrop.
It fails the same way.

I tried a Generic Array Iterator, and it works. :?:
juanjo
 
Posts: 17
Joined: 09 Apr 2011, 16:22

Re: Possible bug in Iterator (String) in 1.27

Postby Neodrop » 01 Jun 2012, 08:51

Yes. I can't find why, but currently Interface(type) variables do not work. I will research it.
User avatar
Neodrop
Администратор
 
Posts: 1068
Joined: 15 Jan 2011, 13:18

Re: Possible bug in Iterator (String) in 1.27

Postby Neodrop » 01 Jun 2012, 13:25

New variant :

Syntax:
Using csharp Syntax Highlighting
using System;
using System.Collections;
using Antares.Vizio.Runtime;

[VisualLogicBlockDescription("IEnumerators iterator")]
    [VisualLogicBlock("IEnumerable", "Iterators", ParentName = "Iterator")]
    public class IENumeratorIterator : LogicBlock
    {
        [Parameter(VariableType.In, typeof(object), Name = "IEnumerable")]
        public Variable collection;

        [Parameter(VariableType.Out, typeof(object), Name = "Value")]
        public Variable outValue;

        private bool _stop;

        [EntryTrigger("Start iteration")]
        public void Start()
        {
            if(collection.Value == null)
            {
                BrokenBlocks.Add(this, "Value is null");
                return;
            }
            StackOff();
            IEnumerable num = collection.Value as IEnumerable;
             
            _stop = false;

            foreach (var item in num)
            {
                outValue.Value = item;
                ActivateTrigger();
                if (_stop) break;
            }
            StackOn();

            ActivateTrigger("Done");
        }

        [EntryTrigger("Break iteration")]
        public void Break()
        {
            _stop = true;
        }

        public override void OnInitializeDefaultData()
        {
            RegisterOutputTrigger("Move Next");
            RegisterOutputTrigger("Done");
        }

        // блок универсальный
        public override bool GetIsGeneric()
        {
            return true;
        }

        // поддерживается 1 сменный тип
        public override int GetCountGenericParameters()
        {
            return 1;
        }

        // получение типа по индексу
        public override Type GetBlockType(int index)
        {
            return outValue.Type;
        }

        // установка типов
        public override void SetBlockType(int index, Type type)
        {
            // index не используем, т.е. 1 сменный тип
            if (type.IsArray)
            {
                type = type.GetElementType();
            }
            outValue.Type = type;
        }

        // назначать можно только не массивы
        public override bool IsSupportedType(Type type)
        {
            return true;
        }

        // описание сменного типа
        public override string GetBlockTypeDescription(int index)
        {
            // index не используем, т.е. 1 сменный тип
            return "Output type";
        }

        public override bool GetIsCoroutine()
        {
            return false;
        }
    }
 
 
Parsed in 0.020 seconds, using GeSHi 1.0.8.4
User avatar
Neodrop
Администратор
 
Posts: 1068
Joined: 15 Jan 2011, 13:18

Re: Possible bug in Iterator (String) in 1.27

Postby juanjo » 01 Jun 2012, 15:34

For now I'm using Generic Array Iterator.
I have not much time now, so I'll do more tests next week.

As a positive note, 1.27 solved a compilation issue I had with UniverseData, and I'll continue with it.

Thanks a lot and good luck (for both ;)
juanjo
 
Posts: 17
Joined: 09 Apr 2011, 16:22

Re: Possible bug in Iterator (String) in 1.27

Postby beddnollop » 15 May 2015, 19:51

Thank you for posting this information!)
beddnollop
 
Posts: 13
Joined: 15 May 2015, 09:33


Return to Bugs

Who is online

Registered users: Yahoo [Bot]