private void _UnityDrawLine(float hitAngle, Vector2 pos , UnityEngine.Color color , float distance , float decision_time)
 {
     var trunForce = Vector2.AngleToVector(hitAngle);
     var forcePos = pos + trunForce * (distance);
     UnityEngine.Debug.DrawLine(
         new UnityEngine.Vector3(pos.X, 0, pos.Y),
         new UnityEngine.Vector3(forcePos.X, 0, forcePos.Y),
         color,
         decision_time);
 }
Ejemplo n.º 2
0
        public void TestSerializerVector2()
        {
            var ser = new Serializer(new DescriberBuilder(typeof(Regulus.CustomType.Vector2), typeof(float)).Describers);
            var v   = new Regulus.CustomType.Vector2(99, 22);

            var array = ser.ObjectToBuffer(v);
            var v2    = (Regulus.CustomType.Vector2)ser.BufferToObject(array);

            NUnit.Framework.Assert.AreEqual(99, v2.X);
            NUnit.Framework.Assert.AreEqual(22, v2.Y);
        }
Ejemplo n.º 3
0
        private void _UnityDrawLine(float hitAngle, Vector2 pos, UnityEngine.Color color, float distance, float decision_time)
        {
            var trunForce = Vector2.AngleToVector(hitAngle);
            var forcePos  = pos + trunForce * (distance);

            UnityEngine.Debug.DrawLine(
                new UnityEngine.Vector3(pos.X, 0, pos.Y),
                new UnityEngine.Vector3(forcePos.X, 0, forcePos.Y),
                color,
                decision_time);
        }
Ejemplo n.º 4
0
 public CrossStage(Remoting.ISoulBinder provider 
                 , Regulus.Project.SamebestKeys.IWorld world
                 , string target_map
                 , Regulus.CustomType.Vector2 target_position
                 , string current_map
                 , Regulus.CustomType.Vector2 current_position)
 {
     this._World = world;
     this._TargetMap = target_map;
     this._TargetPosition = target_position;
     this._CurrentMap = current_map;
     this._CurrentPosition = current_position;
     _Provider = provider;
 }
Ejemplo n.º 5
0
        void _Act(ActionStatue action_statue, float move_speed, float direction /* ��V���� 0~360 */)
        {
            if (_CanSwitch(_CurrentAction, action_statue))
            {
                // ���⭱��@�ɪ���V
                _Direction = (direction + _Direction) % 360;

                _CurrentAction = action_statue;
                _MoveSpeed = move_speed;

                var t = (float)((_Direction - 180) * Math.PI / 180);

                // ���ʦV�q
                //_UnitVector = new Types.Vector2() { X = (float)Math.Cos(t), Y = (float)Math.Sin(t) };
                _UnitVector = new CustomType.Vector2() { X = -(float)Math.Sin(t), Y = -(float)Math.Cos(t) };
                _Update = _First;
            }
        }
Ejemplo n.º 6
0
        public TICKRESULT Detect(float delta, float decision_time, Entity entiry, StandardBehavior standard_behavior, float view_distance, int scan_angle)
        {
            var decisionTime = decision_time;
            var _Entiry      = entiry;

            if (_Entiry == null)
            {
                throw new ArgumentNullException("_Entiry");
            }
            var goblinWisdom = standard_behavior;
            var distance     = view_distance;
            var scanAngle    = scan_angle;

            var pos = _Entiry.GetPosition();

            _TimeCounter += delta;
            if (_TimeCounter < decisionTime)
            {
                var view = (float)distance;
                var x    = Math.PI * _TimeCounter / decisionTime;
                var y    = (float)Math.Sin(x);
                var a    = scanAngle * y - (scanAngle / 2);


                var target = goblinWisdom.Detect(a + _Entiry.Direction, view);

                if (target.Visible == null || (target.Visible != null && goblinWisdom.IsWall(target.Visible.EntityType)))
                {
                    var hitDistnace = target.HitPoint.DistanceTo(pos);
                    hitDistnace = (float)Math.Floor(hitDistnace);
                    var vector   = target.HitPoint - pos;
                    var hitAngle = Vector2.VectorToAngle(vector.GetNormalized());
                    hitAngle += 360;
                    hitAngle %= 360;
                    //Unity Debug Code
#if UNITY_EDITOR
                    _UnityDrawLine(hitAngle, pos, UnityEngine.Color.red, view_distance, decisionTime);
#endif

                    _Nears.Add(new Exit()
                    {
                        Distance = hitDistnace, Direction = hitAngle
                    });
                }


                return(TICKRESULT.RUNNING);
            }


            var sortedDirections = from e in _Nears
                                   let diff = Math.Abs(e.Direction - _Entiry.Direction)
                                              where diff > 0.0f
                                              orderby diff
                                              select e;
            var soteds = from e in sortedDirections orderby e.Distance descending select e;
            var first  = soteds.FirstOrDefault();

            OutputEvent(first.Direction - _Entiry.Direction);
            _Nears.Clear();
            _TimeCounter = 0.0f;

#if UNITY_EDITOR
            var trunForce = Vector2.AngleToVector(first.Direction);
            var forcePos  = pos + trunForce * (distance);
            UnityEngine.Debug.DrawLine(new UnityEngine.Vector3(pos.X, 0, pos.Y), new UnityEngine.Vector3(forcePos.X, 0, forcePos.Y), UnityEngine.Color.yellow, decisionTime);
            //UnityEngine.Debug.Log("TurnDirection = " + _StandardBehavior.TurnDirection);
#endif
            return(TICKRESULT.SUCCESS);
        }