Exemple #1
0
        public virtual void WorkEnds()
        {
            if (!CurrentPos.Equals(ParkingPos))
            {
                Move(ParkingPos);
            }

            //Charge
        }
Exemple #2
0
        public virtual async Task <bool> WorkBegins()
        {
            bool b = await this.MoveAsync(CurrentPos, WorkingPos);

            if (CurrentPos.Equals(WorkingPos))
            {
                this.IsWorking = true;
            }
            return(b);
        }
Exemple #3
0
        //BaseUnit = new BaseUnit();
        public virtual void  WorkBegins()
        {
            if (!CurrentPos.Equals(WorkingPos))
            {
                Move(WorkingPos);
            }

            //lancer le travail
            // ....
        }
Exemple #4
0
        public virtual async Task <bool> WorkEndsAsync()
        {
            var result = await MoveAsync(base.CurrentPos, ParkingPos);

            if (CurrentPos.Equals(ParkingPos))
            {
                IsWorking = false;

                OnStatusChanged(this, new StatusChangedEventArgs("JE TERMINE DE TRAVAILLER"));
            }

            return(result && !IsWorking);
        }
Exemple #5
0
        /// <summary>
        /// see http://www.e-naxos.com/Blog/post/De-la-bonne-utilisation-de-AsyncAwait-en-C.aspx
        /// </summary>
        /// <returns></returns>
        public virtual async Task <bool> WorkBeginsAsync()
        {
            var result = await MoveAsync(base.CurrentPos, WorkingPos);

            if (CurrentPos.Equals(WorkingPos))
            {
                IsWorking = true;

                OnStatusChanged(this, new StatusChangedEventArgs("JE COMMENCE À TRAVAILLER"));
            }

            return(result && IsWorking);
        }
        /// <summary>
        /// Déplacement du robot vers sa position de stationnement
        /// </summary>
        /// <returns>
        ///     true : si la position a été atteinte
        ///     sinon false
        /// </returns>
        public virtual async Task <bool> WorkEnds()
        {
            OnStatusChanged(new StatusChangedEventArgs("Move Parking Position => Working Position"));
            await Move(ParkingPos.X, ParkingPos.Y);

            IsWorking = false;
            if (CurrentPos.Equals(ParkingPos))
            {
                OnStatusChanged(new StatusChangedEventArgs("Park Position"));
                return(true);
            }
            else
            {
                return(false);
            }
        }
        /// <summary>
        /// Déplacement du robot vers sa position de travail
        /// </summary>
        /// <returns>
        ///     true : si la position a été atteinte
        ///     sinon false
        /// </returns>
        public virtual async Task <bool> WorkBegins()
        {
            OnStatusChanged(new StatusChangedEventArgs("Move Parking Position => Working Position"));
            await Move(WorkingPos.X, WorkingPos.Y);

            if (CurrentPos.Equals(WorkingPos))
            {
                IsWorking = true;
                OnStatusChanged(new StatusChangedEventArgs("Work Position"));
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public override int GetAvailableTime(Vector2 pos)
        {
            var dist1 =
                Math.Abs((FixedEndPos.Y - CurrentPos.Y) * pos.X - (FixedEndPos.X - CurrentPos.X) * pos.Y +
                         FixedEndPos.X * CurrentPos.Y - FixedEndPos.Y * CurrentPos.X) / CurrentPos.Distance(FixedEndPos);

            var actualDist = Math.Sqrt(CurrentPos.Distance(pos).Pow() - dist1.Pow());

            var time = OwnSpellData.MissileSpeed > 0 ? (int)(actualDist / OwnSpellData.MissileSpeed * 1000) : 0;

            if (Missile == null)
            {
                return(Math.Max(0, OwnSpellData.Delay - (Environment.TickCount - TimeDetected)));
            }

            return(time);
        }
Exemple #9
0
        public Bullet(Logic m, Unit owner)
        {
            _logic = m;
            Owner  = owner;
            Speed  = owner.Gun.BulletSpeed;

            MoveState    moveState       = new MoveState(this);
            RespawnState respawningState = new RespawnState(this, this, moveState);
            ExplodeState explodeState    = new ExplodeState(this, this, _logic);

            MovingDirection = Owner.Gun.WeaponOpinion;

            CurrentPos = Owner.Gun.GunPos;
            CurrentPos = CurrentPos.Addition(MovingDirection.Multiplication(Speed * 4));

            moveState.transitions.Add(5, explodeState);
            State        = respawningState;
            State.Direct = Direction.Right;
        }
        Vector2[] GetBeginEdgePoints(Vector2[] edges)
        {
            var endEdges = edges;

            Vector2 direction    = (FixedEndPos - FixedStartPos).To2D();
            var     perpVecStart = CurrentPos.To2D() + direction.Normalized().Perpendicular();
            var     perpVecEnd   = CurrentPos.To2D() + direction.Normalized().Perpendicular() * 1500;

            //right side is not the same?
            var perpVecStart2 = CurrentPos.To2D() + direction.Normalized().Perpendicular2();
            var perpVecEnd2   = CurrentPos.To2D() + direction.Normalized().Perpendicular2() * 1500;


            Geometry.Polygon.Line leftEdgeLine  = new Geometry.Polygon.Line(FixedStartPos.To2D(), endEdges[1]);
            Geometry.Polygon.Line rightEdgeLine = new Geometry.Polygon.Line(FixedStartPos.To2D(), endEdges[0]);

            var     inters = leftEdgeLine.GetIntersectionPointsWithLineSegment(perpVecStart, perpVecEnd);
            var     inters2 = rightEdgeLine.GetIntersectionPointsWithLineSegment(perpVecStart2, perpVecEnd2);
            Vector2 p1 = Vector2.Zero, p2 = Vector2.Zero;



            if (inters.Any())
            {
                var closestInter = inters.OrderBy(x => x.Distance(CurrentPos)).First();
                p2 = closestInter;
            }
            if (inters2.Any())
            {
                var closestInter = inters2.OrderBy(x => x.Distance(CurrentPos)).First();
                p1 = closestInter;
            }

            if (!p1.IsZero && !p2.IsZero)
            {
                return new[] { p1, p2 }
            }
            ;


            return(new[] { CurrentPos.To2D(), CurrentPos.To2D() });
        }