Exemple #1
0
        public void SpeedTest()
        {
            Shape inshape   = new Shape(ShapeType.Map, 3, 7, 19, 5, 11);
            Shape outshape1 = new Shape(ShapeType.Map, 3, 7, 6, 5, 11);
            Shape outshape2 = new Shape(ShapeType.Map, 3, 7, 9, 5, 11);
            Shape outshape3 = new Shape(ShapeType.Map, 3, 7, 4, 5, 11);

            OverflowCheckedTensor vc = new OverflowCheckedTensor(inshape);

            OverflowCheckedTensor v1 = new OverflowCheckedTensor(outshape1);
            OverflowCheckedTensor v2 = new OverflowCheckedTensor(outshape2);
            OverflowCheckedTensor v3 = new OverflowCheckedTensor(outshape3);

            Separate ope = new Separate(vc.Shape, new Shape[] { v1.Shape, v2.Shape, v3.Shape }, axis: 2);

            Stopwatch sw = new Stopwatch();

            sw.Start();

            ope.Execute(vc, v1, v2, v3);
            ope.Execute(vc, v1, v2, v3);
            ope.Execute(vc, v1, v2, v3);
            ope.Execute(vc, v1, v2, v3);

            sw.Stop();

            Console.WriteLine($"{sw.ElapsedMilliseconds / 4} msec");
        }
Exemple #2
0
        /// <summary>
        /// byte[]转换成16进制字符串
        /// <para>如:0x01 0x02</para>
        /// </summary>
        /// <param name="bytes">需要转换的byte[]</param>
        /// <param name="enum16"></param>
        /// <returns></returns>
        public static string BytesTo16(byte[] bytes, Separate se)
        {
            StringBuilder outString = new StringBuilder();
            string        temp      = AddSeparate(se);

            for (int i = 0; i < bytes.Length; i++)
            {
                outString.AppendFormat("{0}{1}", temp, bytes[i].ToString("X2"));//转成16进制数据

                //追加空格.
                switch (se)
                {
                case Separate.None:
                    break;

                case Separate.Bank:
                    break;

                case Separate.OX:
                case Separate.Ox:
                    outString.Append(" ");
                    break;

                default:
                    break;
                }
            }
            return(outString.ToString());
        }
Exemple #3
0
        public void StringToHexTest()
        {
            string   str      = "TODO: 初始化为适当的值";
            Separate se       = Separate.Bank;
            string   actual   = ConvertCode.StringToHex(str, se);
            string   expected = ConvertCode.HexToString(actual);

            Assert.AreEqual(expected, str);
        }
Exemple #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="text"></param>
        /// <param name="se"></param>
        /// <param name="instring"></param>
        /// <returns></returns>
        public static byte[] StringToBytes(string text, Separate se, string instring)
        {
            text = text.Replace("0x", "");
            text = text.Replace("0X", "");
            string[] strdata = text.Split(' ');


            return(null);
        }
    // Start is called before the first frame update
    void Start()
    {
        myMoveType           = new Separate();
        myMoveType.character = this;
        myMoveType.targets   = targets;

        myRotateType           = new LookWhereGoing();
        myRotateType.character = this;
        myRotateType.target    = myTarget;
    }
Exemple #6
0
        public void BytesToStringTest()
        {
            byte[]   bytes = new byte[] { 1, 2, 3 };
            Separate se    = new Separate();

            string actual = ConvertCode.BytesToString(bytes, se);

            byte[] expected = ConvertCode.StringToBtyes(actual);
            Assert.AreEqual(expected.ArrayAreEqual(bytes), true);
        }
Exemple #7
0
 /// <summary>
 /// Returns place which destroys all otkens that come into it.
 /// </summary>
 /// <param name="separate">Set to Yes when new place is needed. Set to No if cached place is needed</param>
 /// <returns></returns>
 public static Place getPlaceDestroingTokens(Separate separate)
 {
     if (separate == Separate.No)
     {
         return(getPlaceDestroingTokens(DEAFULT_DESTROY_PLACE_NAME));
     }
     else
     {
         return(getPlaceDestroingTokens(DEAFULT_DESTROY_PLACE_NAME + "_" + getInstance().random.Next()));
     }
 }
Exemple #8
0
        /// <summary>
        /// 将字符串转换为16进制码.
        /// </summary>
        /// <param name="str">要转换的字符串</param>
        /// <returns></returns>
        public static string StringToHex(string str, Separate se)
        {
            StringBuilder outstring = new StringBuilder();

            byte[] bytes = Encoding.Default.GetBytes(str);
            string temp  = AddSeparate(se);

            for (int i = 0; i < bytes.Length; i++)
            {
                int strInt = Convert.ToInt16(bytes[i] - '\0');

                outstring.AppendFormat("{0}{1}", temp, strInt.ToString("X2"));
            }
            return(outstring.ToString());
        }
Exemple #9
0
        /// <summary>
        /// 把byte[]直接转换成二进制形式的字符串,直接以2进制形式显示出来。
        /// <para>如:0x0F 0x01 为00001111 00000001</para>
        /// </summary>
        /// <param name="bytes"></param>
        /// <returns></returns>
        public static string BytesToBinary(byte[] bytes, Separate se)
        {
            if (se == Separate.Ox || se == Separate.OX)
            {
                se = Separate.Bank;
            }
            string        temp      = AddSeparate(se);
            StringBuilder outString = new StringBuilder();

            for (int i = 0; i < bytes.Length; i++)
            {
                string tempString = Convert.ToString(bytes[i], 2).PadLeft(8, '0');

                outString.AppendFormat("{0}{1}", tempString, temp);
            }
            return(outString.ToString());
        }
        /// <summary>
        /// Get all associated files of this package
        /// </summary>
        /// <returns>An array of the file names</returns>
        public override String[] GetFiles()
        {
            List <String> Result = new List <String>();

            if (this.HasSpec && this.HasBody)
            {
                if (!this.Krunched)
                {
                    Result.Add(this.Name + BodyExtension);
                    Result.Add(this.Name + SpecExtension);
                }
                else
                {
                    Result.Add(Compiler.Krunch(this.Name + BodyExtension));
                    Result.Add(Compiler.Krunch(this.Name + SpecExtension));
                }
            }
            else if (this.HasSpec)
            {
                if (!this.Krunched)
                {
                    Result.Add(this.Name + SpecExtension);
                }
                else
                {
                    Result.Add(Compiler.Krunch(this.Name + SpecExtension));
                }
            }
            else if (this.HasBody)
            {
                if (!this.Krunched)
                {
                    Result.Add(this.Name + BodyExtension);
                }
                else
                {
                    Result.Add(Compiler.Krunch(this.Name + BodyExtension));
                }
            }
            foreach (SeparateUnit Separate in this.SeparateUnits)
            {
                Result.AddRange(Separate.GetFiles());
            }
            return(Result.ToArray());
        }
Exemple #11
0
        /// <summary>
        /// 把Enum16进制隔离符转换成实际的字符串
        /// </summary>
        /// <param name="se">16进制隔离符</param>
        /// <returns></returns>
        private static string AddSeparate(Separate se)
        {
            switch (se)
            {
            case Separate.None:
                return("");

            case Separate.Ox:
                return("0x");

            case Separate.OX:
                return("0X");

            case Separate.Bank:
                return(" ");

            default:
                return("");
            }
        }
Exemple #12
0
        public void AddSeparateTest()
        {
            Separate se       = Separate.Bank;
            string   expected = " ";
            string   actual   = ConvertCode_Accessor.AddSeparate(se);

            Assert.AreEqual(expected, actual);

            se       = Separate.None;
            expected = "";
            actual   = ConvertCode_Accessor.AddSeparate(se);
            Assert.AreEqual(expected, actual);

            se       = Separate.Ox;
            expected = "0x";
            actual   = ConvertCode_Accessor.AddSeparate(se);
            Assert.AreEqual(expected, actual);

            se       = Separate.OX;
            expected = "0X";
            actual   = ConvertCode_Accessor.AddSeparate(se);
            Assert.AreEqual(expected, actual);
        }
Exemple #13
0
        public void BytesToBinaryTest()
        {
            byte[]   bytes    = new byte[] { 1, 2, 3 };
            Separate se       = Separate.None;
            string   expected = "000000010000001000000011";
            string   actual   = ConvertCode.BytesToBinary(bytes, se);

            Assert.AreEqual(expected, actual);

            se       = Separate.Bank;
            expected = "00000001 00000010 00000011 ";
            actual   = ConvertCode.BytesToBinary(bytes, se);
            Assert.AreEqual(expected, actual);

            se       = Separate.Ox;
            expected = "00000001 00000010 00000011 ";
            actual   = ConvertCode.BytesToBinary(bytes, se);
            Assert.AreEqual(expected, actual);

            se       = Separate.OX;
            expected = "00000001 00000010 00000011 ";
            actual   = ConvertCode.BytesToBinary(bytes, se);
            Assert.AreEqual(expected, actual);
        }
Exemple #14
0
        public void BytesTo16Test()
        {
            byte[]   bytes    = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
            Separate se       = Separate.Ox;
            string   expected = "0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 ";
            string   actual   = ConvertCode.BytesTo16(bytes, se);

            Assert.AreEqual(expected, actual);

            se       = Separate.OX;
            expected = "0X01 0X02 0X03 0X04 0X05 0X06 0X07 0X08 ";
            actual   = ConvertCode.BytesTo16(bytes, se);
            Assert.AreEqual(expected, actual);

            se       = Separate.Bank;
            expected = " 01 02 03 04 05 06 07 08";
            actual   = ConvertCode.BytesTo16(bytes, se);
            Assert.AreEqual(expected, actual);

            se       = Separate.None;
            expected = "0102030405060708";
            actual   = ConvertCode.BytesTo16(bytes, se);
            Assert.AreEqual(expected, actual);
        }
    void MainSteeringBehaviors()
    {
        ResetOrientation();

        switch (choiceOfBehavior)
        {
        case steeringBehaviors.Seek:
            Seek seek = new Seek();
            seek.character = this;
            seek.target    = newTarget;
            SteeringOutput seeking = seek.getSteering();
            if (seeking != null)
            {
                linear  += seeking.linear * Time.deltaTime;
                angular += seeking.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Flee:
            Flee flee = new Flee();
            flee.character = this;
            flee.target    = newTarget;
            SteeringOutput fleeing = flee.getSteering();
            if (fleeing != null)
            {
                linear  += fleeing.linear * Time.deltaTime;
                angular += fleeing.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Align:
            Align align = new Align();
            align.character = this;
            align.target    = newTarget;
            SteeringOutput aligning = align.getSteering();
            if (aligning != null)
            {
                linear  += aligning.linear * Time.deltaTime;
                angular += aligning.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Face:
            Face face = new Face();
            face.character = this;
            face.target    = newTarget;
            SteeringOutput facing = face.getSteering();
            if (facing != null)
            {
                linear  += facing.linear * Time.deltaTime;
                angular += facing.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.LookWhereGoing:
            LookWhereGoing look = new LookWhereGoing();
            look.character = this;
            look.target    = newTarget;
            SteeringOutput looking = look.getSteering();
            if (looking != null)
            {
                linear  += looking.linear * Time.deltaTime;
                angular += looking.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Arrive:
            Arrive arrive = new Arrive();
            arrive.character = this;
            arrive.target    = newTarget;
            SteeringOutput arriving = arrive.getSteering();
            if (arriving != null)
            {
                linear  += arriving.linear * Time.deltaTime;
                angular += arriving.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.PathFollow:


            follow.character = this;

            follow.path = path;

            SteeringOutput following = follow.getSteering();

            if (following != null)
            {
                linear += following.linear * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Pursue:
            Pursue pursue = new Pursue();
            pursue.target    = newTarget;
            pursue.character = this;

            SteeringOutput pursuing = pursue.getSteering();

            if (pursuing != null)
            {
                linear  += pursuing.linear * Time.deltaTime;
                angular += pursuing.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Separate:
            Separate separate = new Separate();
            separate.character = this;
            separate.targets   = targets;
            SteeringOutput separating = separate.getSteering();
            if (separating != null)
            {
                linear  += separating.linear * Time.deltaTime;
                angular += separating.angular * Time.deltaTime;
            }
            break;
        }
    }
Exemple #16
0
        public void ExceptionTest()
        {
            Assert.ThrowsException <ArgumentException>(() =>
            {
                Shape outshape = new Shape(ShapeType.Map, 3, 7, 19, 5, 11);
                Shape inshape1 = new Shape(ShapeType.Map, 3, 7, 6, 5, 11);
                Shape inshape2 = new Shape(ShapeType.Map, 3, 7, 9, 5, 11);
                Shape inshape3 = new Shape(ShapeType.Map, 3, 7, 5, 5, 11);

                OverflowCheckedTensor v1 = new OverflowCheckedTensor(inshape1);
                OverflowCheckedTensor v2 = new OverflowCheckedTensor(inshape2);
                OverflowCheckedTensor v3 = new OverflowCheckedTensor(inshape3);

                OverflowCheckedTensor vc = new OverflowCheckedTensor(outshape);

                Separate ope = new Separate(vc.Shape, new Shape[] { v1.Shape, v2.Shape, v3.Shape }, axis: 2);
            }
                                                       );

            Assert.ThrowsException <ArgumentException>(() =>
            {
                Shape outshape = new Shape(ShapeType.Map, 3, 7, 19, 5, 11);
                Shape inshape1 = new Shape(ShapeType.Map, 3, 7, 6, 5, 11);
                Shape inshape2 = new Shape(ShapeType.Map, 3, 7, 9, 5, 11);
                Shape inshape3 = new Shape(ShapeType.Map, 3, 7, 4, 5, 11);

                OverflowCheckedTensor v1 = new OverflowCheckedTensor(inshape1);
                OverflowCheckedTensor v2 = new OverflowCheckedTensor(inshape2);
                OverflowCheckedTensor v3 = new OverflowCheckedTensor(inshape3);

                OverflowCheckedTensor vc = new OverflowCheckedTensor(outshape);

                Separate ope = new Separate(vc.Shape, new Shape[] { v1.Shape, v2.Shape, v3.Shape }, axis: 1);
            }
                                                       );

            Assert.ThrowsException <ArgumentException>(() =>
            {
                Shape outshape = new Shape(ShapeType.Map, 3, 7, 19, 5, 11);
                Shape inshape1 = new Shape(ShapeType.Map, 3, 7, 6, 5, 11);
                Shape inshape2 = new Shape(ShapeType.Map, 3, 6, 9, 5, 11);
                Shape inshape3 = new Shape(ShapeType.Map, 3, 7, 4, 5, 11);

                OverflowCheckedTensor v1 = new OverflowCheckedTensor(inshape1);
                OverflowCheckedTensor v2 = new OverflowCheckedTensor(inshape2);
                OverflowCheckedTensor v3 = new OverflowCheckedTensor(inshape3);

                OverflowCheckedTensor vc = new OverflowCheckedTensor(outshape);

                Separate ope = new Separate(vc.Shape, new Shape[] { v1.Shape, v2.Shape, v3.Shape }, axis: 2);
            }
                                                       );

            Assert.ThrowsException <ArgumentException>(() =>
            {
                Shape outshape = new Shape(ShapeType.Map, 3, 7, 19, 5, 11);
                Shape inshape1 = new Shape(ShapeType.Map, 3, 7, 6, 5, 11);
                Shape inshape2 = new Shape(ShapeType.Map, 3, 7, 9, 5, 11);
                Shape inshape3 = new Shape(ShapeType.Map, 3, 7, 4, 5);

                OverflowCheckedTensor v1 = new OverflowCheckedTensor(inshape1);
                OverflowCheckedTensor v2 = new OverflowCheckedTensor(inshape2);
                OverflowCheckedTensor v3 = new OverflowCheckedTensor(inshape3);

                OverflowCheckedTensor vc = new OverflowCheckedTensor(outshape);

                Separate ope = new Separate(vc.Shape, new Shape[] { v1.Shape, v2.Shape, v3.Shape }, axis: 2);
            }
                                                       );

            Assert.ThrowsException <ArgumentException>(() =>
            {
                Shape outshape = new Shape(ShapeType.Map, 3, 7, 19, 5, 11, 12);
                Shape inshape1 = new Shape(ShapeType.Map, 3, 7, 6, 5, 11);
                Shape inshape2 = new Shape(ShapeType.Map, 3, 7, 9, 5, 11);
                Shape inshape3 = new Shape(ShapeType.Map, 3, 7, 4, 5, 11);

                OverflowCheckedTensor v1 = new OverflowCheckedTensor(inshape1);
                OverflowCheckedTensor v2 = new OverflowCheckedTensor(inshape2);
                OverflowCheckedTensor v3 = new OverflowCheckedTensor(inshape3);

                OverflowCheckedTensor vc = new OverflowCheckedTensor(outshape);

                Separate ope = new Separate(vc.Shape, new Shape[] { v1.Shape, v2.Shape, v3.Shape }, axis: 5);
            }
                                                       );

            Assert.ThrowsException <ArgumentException>(() =>
            {
                Shape outshape = new Shape(ShapeType.Map, 3, 7, 19, 5, 11);
                Shape inshape1 = new Shape(ShapeType.Map, 3, 7, 6, 5, 11);
                Shape inshape2 = new Shape(ShapeType.Map, 3, 7, 9, 5, 11);
                Shape inshape3 = new Shape(ShapeType.Map, 3, 7, 4, 5, 11);

                OverflowCheckedTensor v1 = new OverflowCheckedTensor(inshape1);
                OverflowCheckedTensor v2 = new OverflowCheckedTensor(inshape2);
                OverflowCheckedTensor v3 = new OverflowCheckedTensor(inshape3);

                OverflowCheckedTensor vc = new OverflowCheckedTensor(outshape);

                Separate ope = new Separate(vc.Shape, new Shape[] { v1.Shape, v2.Shape, v3.Shape }, axis: 5);
            }
                                                       );
        }
Exemple #17
0
    void MainSteeringBehaviors()
    {
        ResetOrientation();

        switch (choiceOfBehavior)
        {
        case steeringBehaviors.PathFind:
            SteeringOutput lwyger = lookwg.getSteering();
            linear  += follow.getSteering().linear *Time.deltaTime;
            angular += follow.getSteering().angular *Time.deltaTime;
            break;

        case steeringBehaviors.Seek:
            Seek seek = new Seek();
            seek.character = this;
            seek.target    = newTarget;
            SteeringOutput seeking = seek.getSteering();
            if (seeking != null)
            {
                linear  += seeking.linear * Time.deltaTime;
                angular += seeking.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Flee:
            Flee flee = new Flee();
            flee.character = this;
            flee.target    = newTarget;
            SteeringOutput fleeing = flee.getSteering();
            if (fleeing != null)
            {
                linear  += fleeing.linear * Time.deltaTime;
                angular += fleeing.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Align:
            Align align = new Align();
            align.character = this;
            align.target    = newTarget;
            SteeringOutput aligning = align.getSteering();
            if (aligning != null)
            {
                linear  += aligning.linear * Time.deltaTime;
                angular += aligning.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Face:
            Face face = new Face();
            face.character = this;
            face.target    = newTarget;
            SteeringOutput facing = face.getSteering();
            if (facing != null)
            {
                linear  += facing.linear * Time.deltaTime;
                angular += facing.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.LookWhereGoing:
            LookWhereGoing look = new LookWhereGoing();
            look.character = this;
            look.target    = newTarget;
            SteeringOutput looking = look.getSteering();
            if (looking != null)
            {
                linear  += looking.linear * Time.deltaTime;
                angular += looking.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Arrive:
            Arrive arrive = new Arrive();
            arrive.character = this;
            arrive.target    = newTarget;
            SteeringOutput arriving = arrive.getSteering();
            if (arriving != null)
            {
                linear  += arriving.linear * Time.deltaTime;
                angular += arriving.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.PathFollow:


            follow.character = this;
            lookwg.character = this;

            follow.path   = path;
            lookwg.target = newTarget;

            SteeringOutput following = follow.getSteering();
            SteeringOutput lookingwg = lookwg.getSteering();

            if (following != null)
            {
                linear += following.linear * Time.deltaTime;
                // angular += lookingwg.angular* Time.deltaTime;
            }
            break;

        case steeringBehaviors.Pursue:
            Pursue         pursue = new Pursue();
            LookWhereGoing PursuelookWhereGoing = new LookWhereGoing();
            pursue.character = this;
            PursuelookWhereGoing.character = this;
            pursue.target = newTarget;
            PursuelookWhereGoing.target = newTarget;
            SteeringOutput pursuing = pursue.getSteering();
            SteeringOutput pursuelookingWhereGoing = PursuelookWhereGoing.getSteering();

            if (pursuing != null)
            {
                linear  += pursuing.linear * Time.deltaTime;
                angular += pursuing.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Separate:
            Separate       separate       = new Separate();
            LookWhereGoing lookWhereGoing = new LookWhereGoing();
            separate.character       = this;
            lookWhereGoing.character = this;
            separate.targets         = targets;
            lookWhereGoing.target    = newTarget;
            SteeringOutput lookingWhereGoing = lookWhereGoing.getSteering();
            SteeringOutput separating        = separate.getSteering();
            if (separating != null)
            {
                linear  += separating.linear * Time.deltaTime;
                angular += separating.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.CollisionAvoidance:
            CollisionAvoidance avoid = new CollisionAvoidance();
            LookWhereGoing     AvoidlookWhereGoing = new LookWhereGoing();
            avoid.character = this;
            AvoidlookWhereGoing.character = this;
            avoid.targets = targets;
            AvoidlookWhereGoing.target = newTarget;
            SteeringOutput AvoidlookingWhereGoing = AvoidlookWhereGoing.getSteering();
            SteeringOutput avoiding = avoid.getSteering();
            if (avoiding != null)
            {
                linear  += avoiding.linear * Time.deltaTime;
                angular += avoiding.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.ObstacleAvoidance:
            ObstacleAvoidance obAvoid = new ObstacleAvoidance();
            LookWhereGoing    obAvoidlookWhereGoing = new LookWhereGoing();
            obAvoid.character = this;
            obAvoidlookWhereGoing.character = this;
            obAvoid.target = newTarget;
            obAvoidlookWhereGoing.target = newTarget;
            SteeringOutput obAvoiding = obAvoid.getSteering();
            SteeringOutput obAvoidlookingWhereGoing = obAvoidlookWhereGoing.getSteering();
            if (obAvoiding != null)
            {
                linear  += obAvoiding.linear * Time.deltaTime;
                angular += obAvoiding.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Flocker:
            //Separate from other birds
            Separate        flockSeparate       = new Separate();
            Arrive          arriveFlock         = new Arrive();
            LookWhereGoing  FlockLookWhereGoing = new LookWhereGoing();
            BlendedSteering mySteering          = new BlendedSteering();
            flockSeparate.character = this;
            GameObject[] goBirds = GameObject.FindGameObjectsWithTag("bird");
            kBirds = new Kinematic[goBirds.Length - 1];
            int j = 0;
            for (int i = 0; i < goBirds.Length - 1; i++)
            {
                if (goBirds[i] == this)
                {
                    continue;
                }
                kBirds[j++] = goBirds[i].GetComponent <Kinematic>();
            }
            flockSeparate.targets = kBirds;

            arriveFlock.character = this;
            //Debug.Log(arriveFlock.character);
            arriveFlock.target = newTarget;
            //Debug.Log(arriveFlock.target);
            FlockLookWhereGoing.character    = this;
            FlockLookWhereGoing.target       = newTarget;
            mySteering.behaviors             = new BehaviorAndWeight[3];
            mySteering.behaviors[0]          = new BehaviorAndWeight();
            mySteering.behaviors[0].behavior = flockSeparate;
            mySteering.behaviors[0].weight   = 1f;
            mySteering.behaviors[1]          = new BehaviorAndWeight();
            mySteering.behaviors[1].behavior = arriveFlock;
            mySteering.behaviors[1].weight   = 1f;
            mySteering.behaviors[2]          = new BehaviorAndWeight();
            mySteering.behaviors[2].behavior = FlockLookWhereGoing;
            mySteering.behaviors[2].weight   = 1f;

            ObstacleAvoidance myAvoid = new ObstacleAvoidance();
            myAvoid.character = this;
            myAvoid.target    = newTarget;
            myAvoid.flee      = true;

            BlendedSteering myHighPrioritySteering = new BlendedSteering();
            myHighPrioritySteering.behaviors             = new BehaviorAndWeight[1];
            myHighPrioritySteering.behaviors[0]          = new BehaviorAndWeight();
            myHighPrioritySteering.behaviors[0].behavior = myAvoid;
            myHighPrioritySteering.behaviors[0].weight   = 1f;
            myAdvancedSteering.groups    = new BlendedSteering[2];
            myAdvancedSteering.groups[0] = new BlendedSteering();
            myAdvancedSteering.groups[0] = myHighPrioritySteering;
            myAdvancedSteering.groups[1] = new BlendedSteering();
            myAdvancedSteering.groups[1] = mySteering;

            //steeringUpdate = mySteering.getSteering();
            avoidObstacles = true;
            if (!avoidObstacles)
            {
                steeringUpdate = mySteering.getSteering();
                if (steeringUpdate != null)
                {
                    linear  += steeringUpdate.linear * Time.deltaTime;
                    angular += steeringUpdate.angular * Time.deltaTime;
                }
            }
            else
            {
                steeringUpdate = myAdvancedSteering.getSteering();
                if (steeringUpdate != null)
                {
                    linear  += steeringUpdate.linear * Time.deltaTime;
                    angular += steeringUpdate.angular * Time.deltaTime;
                }
            }
            break;
        }
    }
Exemple #18
0
        public void ExecuteTest()
        {
            Random rd = new Random(1234);

            foreach (Shape outshape in new Shape[] {
                new Shape(ShapeType.Map, 13),
                new Shape(ShapeType.Map, 24),
                new Shape(ShapeType.Map, 13, 14),
                new Shape(ShapeType.Map, 24, 21),
                new Shape(ShapeType.Map, 14, 19, 13),
                new Shape(ShapeType.Map, 13, 14, 19),
                new Shape(ShapeType.Map, 13, 14, 19, 21),
                new Shape(ShapeType.Map, 19, 21, 13, 14),
                new Shape(ShapeType.Map, 13, 14, 19, 21, 24),
                new Shape(ShapeType.Map, 24, 19, 14, 13, 21),
                new Shape(ShapeType.Map, 19, 13, 21, 24, 14)
            })
            {
                for (int axis = 0; axis < outshape.Ndim; axis++)
                {
                    int length = outshape[axis];

                    for (int n = 1; n <= 5; n++)
                    {
                        int[] c = (new int[n]).Select((_) => 1).ToArray();

                        for (int j = n; j < length; j++)
                        {
                            c[rd.Next(c.Length)]++;
                        }

                        float[][] xs       = new float[n][];
                        Shape[]   inshapes = new Shape[n];
                        OverflowCheckedTensor[] intensors  = new OverflowCheckedTensor[n];
                        OverflowCheckedTensor[] outtensors = new OverflowCheckedTensor[n];

                        for (int i = 0; i < n; i++)
                        {
                            int[] s = outshape;
                            s[axis]     = c[i];
                            inshapes[i] = new Shape(ShapeType.Map, s);

                            xs[i] = (new float[inshapes[i].Length]).Select((_) => (float)rd.NextDouble() * (i + 1)).ToArray();

                            intensors[i]  = new OverflowCheckedTensor(inshapes[i], xs[i]);
                            outtensors[i] = new OverflowCheckedTensor(inshapes[i]);
                        }

                        OverflowCheckedTensor outtensor = new OverflowCheckedTensor(outshape);

                        Concat concat = new Concat(inshapes, outshape, axis);
                        concat.Execute(intensors.Concat(new Tensor[] { outtensor }).ToArray());

                        float[] y = outtensor.State;

                        Separate separate = new Separate(outshape, inshapes, axis);
                        separate.Execute((new Tensor[] { outtensor }).Concat(outtensors).ToArray());

                        CollectionAssert.AreEqual(y, outtensor.State);

                        for (int i = 0; i < n; i++)
                        {
                            CollectionAssert.AreEqual(xs[i], outtensors[i].State);
                        }

                        Console.WriteLine($"pass {outshape} axis:{axis} -> {string.Join(", ", inshapes.Select((shape) => shape.ToString()))}");
                    }
                }
                ;
            }
        }
    void MainSteeringBehaviors()
    {
        ResetOrientation();

        switch (choiceOfBehavior)
        {
        case steeringBehaviors.Seek:
            Seek seek = new Seek();
            seek.character = this;
            seek.target    = newTarget;
            SteeringOutput seeking = seek.getSteering();
            if (seeking != null)
            {
                linear  += seeking.linear * Time.deltaTime;
                angular += seeking.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Flee:
            Flee flee = new Flee();
            flee.character = this;
            flee.target    = newTarget;
            SteeringOutput fleeing = flee.getSteering();
            if (fleeing != null)
            {
                linear  += fleeing.linear * Time.deltaTime;
                angular += fleeing.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Align:
            Align align = new Align();
            align.character = this;
            align.target    = newTarget;
            SteeringOutput aligning = align.getSteering();
            if (aligning != null)
            {
                linear  += aligning.linear * Time.deltaTime;
                angular += aligning.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Face:
            Face face = new Face();
            face.character = this;
            face.target    = newTarget;
            SteeringOutput facing = face.getSteering();
            if (facing != null)
            {
                linear  += facing.linear * Time.deltaTime;
                angular += facing.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.LookWhereGoing:
            LookWhereGoing look = new LookWhereGoing();
            look.character = this;
            look.target    = newTarget;
            SteeringOutput looking = look.getSteering();
            if (looking != null)
            {
                linear  += looking.linear * Time.deltaTime;
                angular += looking.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Arrive:
            Arrive arrive = new Arrive();
            arrive.character = this;
            arrive.target    = newTarget;
            SteeringOutput arriving = arrive.getSteering();
            if (arriving != null)
            {
                linear  += arriving.linear * Time.deltaTime;
                angular += arriving.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.PathFollow:


            follow.character = this;
            lookwg.character = this;

            follow.path   = path;
            lookwg.target = newTarget;

            SteeringOutput following = follow.getSteering();
            SteeringOutput lookingwg = lookwg.getSteering();

            if (following != null)
            {
                linear += following.linear * Time.deltaTime;
                // angular += lookingwg.angular* Time.deltaTime;
            }
            break;

        case steeringBehaviors.Pursue:
            Pursue         pursue = new Pursue();
            LookWhereGoing PursuelookWhereGoing = new LookWhereGoing();
            pursue.character = this;
            PursuelookWhereGoing.character = this;
            pursue.target = newTarget;
            PursuelookWhereGoing.target = newTarget;
            SteeringOutput pursuing = pursue.getSteering();
            SteeringOutput pursuelookingWhereGoing = PursuelookWhereGoing.getSteering();

            if (pursuing != null)
            {
                linear  += pursuing.linear * Time.deltaTime;
                angular += pursuing.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.Separate:
            Separate       separate       = new Separate();
            LookWhereGoing lookWhereGoing = new LookWhereGoing();
            separate.character       = this;
            lookWhereGoing.character = this;
            separate.targets         = targets;
            lookWhereGoing.target    = newTarget;
            SteeringOutput lookingWhereGoing = lookWhereGoing.getSteering();
            SteeringOutput separating        = separate.getSteering();
            if (separating != null)
            {
                linear  += separating.linear * Time.deltaTime;
                angular += separating.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.CollisionAvoidance:
            CollisionAvoidance avoid = new CollisionAvoidance();
            LookWhereGoing     AvoidlookWhereGoing = new LookWhereGoing();
            avoid.character = this;
            AvoidlookWhereGoing.character = this;
            avoid.targets = targets;
            AvoidlookWhereGoing.target = newTarget;
            SteeringOutput AvoidlookingWhereGoing = AvoidlookWhereGoing.getSteering();
            SteeringOutput avoiding = avoid.getSteering();
            if (avoiding != null)
            {
                linear  += avoiding.linear * Time.deltaTime;
                angular += avoiding.angular * Time.deltaTime;
            }
            break;

        case steeringBehaviors.ObstacleAvoidance:
            ObstacleAvoidance obAvoid = new ObstacleAvoidance();
            LookWhereGoing    obAvoidlookWhereGoing = new LookWhereGoing();
            obAvoid.character = this;
            obAvoidlookWhereGoing.character = this;
            obAvoid.target = newTarget;
            obAvoidlookWhereGoing.target = newTarget;
            SteeringOutput obAvoiding = obAvoid.getSteering();
            SteeringOutput obAvoidlookingWhereGoing = obAvoidlookWhereGoing.getSteering();
            if (obAvoiding != null)
            {
                linear  += obAvoiding.linear * Time.deltaTime;
                angular += obAvoiding.angular * Time.deltaTime;
            }
            break;
        }
    }
Exemple #20
0
 /// <summary>
 /// 把byte[]转换成String,变成英文数字和汉字混合的格式。
 /// </summary>
 /// <param name="bytes">需要转换的byte[]</param>
 /// <param name="enum16">隔离符</param>
 /// <returns></returns>
 public static string BytesToString(byte[] bytes, Separate se)
 {
     return(HexToString(BytesTo16(bytes, se)));
 }