protected override bool TickCore(RealmTime time)
        {
            if (Host.Self.HasConditionEffect(ConditionEffects.Paralyzed))
            {
                return(true);
            }
            var speed = this.speed * GetSpeedMultiplier(Host.Self);

            CirclingState state;
            object        o;

            if (!Host.StateStorage.TryGetValue(Key, out o))
            {
                float dist = sight;
                Host.StateStorage[Key] = state = new CirclingState()
                {
                    target = WeakReference <Entity> .Create(GetNearestEntity(ref dist, objType)),
                    angle  = (float)(2 * Math.PI * rand.NextDouble())
                };
            }
            else
            {
                state = (CirclingState)o;

                state.angle += angularSpeed * (time.thisTickTimes / 1000f);
                if (!state.target.IsAlive)
                {
                    Host.StateStorage.Remove(Key);
                    return(false);
                }
                var target = state.target.Target;
                if (target == null || target.Owner == null)
                {
                    Host.StateStorage.Remove(Key);
                    return(false);
                }

                double x = target.X + Math.Cos(state.angle) * radius;
                double y = target.Y + Math.Sin(state.angle) * radius;
                if (x != Host.Self.X || y != Host.Self.Y)
                {
                    Vector2 vect = new Vector2((float)x, (float)y) - new Vector2(Host.Self.X, Host.Self.Y);
                    vect.Normalize();
                    vect *= (speed / 1.5f) * (time.thisTickTimes / 1000f);
                    ValidateAndMove(Host.Self.X + vect.X, Host.Self.Y + vect.Y);
                    Host.Self.UpdateCount++;
                }
            }

            if (state.angle >= Math.PI * 2)
            {
                state.angle -= (float)(Math.PI * 2);
            }
            return(true);
        }
Exemple #2
0
        protected override bool TickCore(RealmTime time)
        {
            if (Host.Self.HasConditionEffect(ConditionEffects.Paralyzed))
            {
                return(true);
            }
            float speed = this.speed * GetSpeedMultiplier(Host.Self);


            CirclingState state;
            object        o;

            if (!Host.StateStorage.TryGetValue(Key, out o))
            {
                float  dist = radius + 1;
                double SP   = startPercent;
                Host.StateStorage[Key] = state = new CirclingState
                {
                    target = WeakReference <Entity> .Create(GetNearestEntity(ref dist, objType)),
                    angle  = (float)(2 * Math.PI * SP)
                };
            }
            else
            {
                state = (CirclingState)o;


                state.angle += angularSpeed * (time.thisTickTimes / 1000f);
                if (!state.target.IsAlive)
                {
                    Host.StateStorage.Remove(Key);
                    return(false);
                }
                Entity target = state.target.Target;
                if (target == null || target.Owner == null)
                {
                    Host.StateStorage.Remove(Key);
                    return(false);
                }
                double x = target.X + Math.Cos(state.angle) * radius;
                double y = target.Y + Math.Sin(state.angle) * radius;
                ValidateAndMove((float)x, (float)y);
                Host.Self.UpdateCount++;
            }


            if (state.angle >= Math.PI * 2)
            {
                state.angle -= (float)(Math.PI * 2);
            }
            return(true);
        }
Exemple #3
0
        protected override bool TickCore(RealmTime time)
        {
            if (Host.Self.HasConditionEffect(ConditionEffects.Paralyzed)) return true;
            var speed = this.speed * GetSpeedMultiplier(Host.Self);

            CirclingState state;
            object o;
            if (!Host.StateStorage.TryGetValue(Key, out o))
            {
                float dist = sight;
                Host.StateStorage[Key] = state = new CirclingState()
                {
                    target = WeakReference<Entity>.Create(GetNearestEntity(ref dist, objType)),
                    angle = (float)(2 * Math.PI * rand.NextDouble())
                };
            }
            else
            {
                state = (CirclingState)o;

                state.angle += angularSpeed * (time.thisTickTimes / 1000f);
                if (!state.target.IsAlive)
                {
                    Host.StateStorage.Remove(Key);
                    return false;
                }
                var target = state.target.Target;
                if (target == null || target.Owner == null)
                {
                    Host.StateStorage.Remove(Key);
                    return false;
                }

                double x = target.X + Math.Cos(state.angle) * radius;
                double y = target.Y + Math.Sin(state.angle) * radius;
                if (x != Host.Self.X || y != Host.Self.Y)
                {
                    Vector2 vect = new Vector2((float)x, (float)y) - new Vector2(Host.Self.X, Host.Self.Y);
                    vect.Normalize();
                    vect *= (speed / 1.5f) * (time.thisTickTimes / 1000f);
                    ValidateAndMove(Host.Self.X + vect.X, Host.Self.Y + vect.Y);
                    Host.Self.UpdateCount++;
                }
            }

            if (state.angle >= Math.PI * 2)
                state.angle -= (float)(Math.PI * 2);
            return true;
        }
        protected override bool TickCore(RealmTime time)
        {
            if (Host.Self.HasConditionEffect(ConditionEffects.Paralyzed))
            {
                return(true);
            }
            var speed = this.speed * GetSpeedMultiplier(Host.Self);

            CirclingState state;
            object        o;

            if (!Host.StateStorage.TryGetValue(Key, out o))
            {
                float dist = radius;
                Host.StateStorage[Key] = state = new CirclingState()
                {
                    center = new Position()
                    {
                        X = Host.Self.X, Y = Host.Self.Y
                    },
                    angle = (float)(2 * Math.PI * rand.NextDouble())
                };
            }
            else
            {
                state = (CirclingState)o;

                state.angle += angularSpeed * (time.thisTickTimes / 1000f);
                double x = state.center.X + Math.Cos(state.angle) * radius;
                double y = state.center.Y + Math.Sin(state.angle) * radius;
                if (x != Host.Self.X && y != Host.Self.Y)
                {
                    Vector2 vect = new Vector2((float)x, (float)y) - new Vector2(Host.Self.X, Host.Self.Y);
                    vect.Normalize();
                    vect *= (speed / 1.5f) * (time.thisTickTimes / 1000f);
                    ValidateAndMove(Host.Self.X + vect.X, Host.Self.Y + vect.Y);
                    Host.Self.UpdateCount++;
                }
            }

            if (state.angle >= Math.PI * 2)
            {
                state.angle -= (float)(Math.PI * 2);
            }
            return(true);
        }
        protected override bool TickCore(RealmTime time)
        {
            if (Host.Self.HasConditionEffect(ConditionEffects.Paralyzed)) return true;
            var speed = this.speed*GetSpeedMultiplier(Host.Self);

            CirclingState state;
            object o;
            if (!Host.StateStorage.TryGetValue(Key, out o))
            {
                var dist = radius;
                Host.StateStorage[Key] = state = new CirclingState
                {
                    target = WeakReference<Entity>.Create(GetNearestEntityByGroup(ref dist, group)),
                    angle = (float) (2*Math.PI*rand.NextDouble())
                };
            }
            else
            {
                state = (CirclingState) o;

                state.angle += angularSpeed*(time.thisTickTimes/1000f);
                if (!state.target.IsAlive)
                {
                    Host.StateStorage.Remove(Key);
                    return false;
                }
                var target = state.target.Target;
                if (target == null || target.Owner == null)
                {
                    Host.StateStorage.Remove(Key);
                    return false;
                }
                var x = target.X + Math.Cos(state.angle)*radius;
                var y = target.Y + Math.Sin(state.angle)*radius;
                ValidateAndMove((float) x, (float) y);
                Host.Self.UpdateCount++;
            }

            if (state.angle >= Math.PI*2)
                state.angle -= (float) (Math.PI*2);
            return true;
        }
        protected override bool TickCore(RealmTime time)
        {
            if (Host.Self.HasConditionEffect(ConditionEffects.Paralyzed)) return true;
            var speed = this.speed * GetSpeedMultiplier(Host.Self);

            CirclingState state;
            object o;
            if (!Host.StateStorage.TryGetValue(Key, out o))
            {
                var dist = radius;
                Host.StateStorage[Key] = state = new CirclingState
                {
                    center = new Position { X = Host.Self.X, Y = Host.Self.Y },
                    angle = (float)(2 * Math.PI * rand.NextDouble())
                };
            }
            else
            {
                state = (CirclingState)o;

                state.angle += angularSpeed * (time.thisTickTimes / 1000f);
                var x = state.center.X + Math.Cos(state.angle) * radius;
                var y = state.center.Y + Math.Sin(state.angle) * radius;
                if (x != Host.Self.X && y != Host.Self.Y)
                {
                    var vect = new Vector2((float)x, (float)y) - new Vector2(Host.Self.X, Host.Self.Y);
                    vect.Normalize();
                    vect *= speed / 1.5f * (time.thisTickTimes / 1000f);
                    ValidateAndMove(Host.Self.X + vect.X, Host.Self.Y + vect.Y);
                    Host.Self.UpdateCount++;
                }
            }

            if (state.angle >= Math.PI * 2)
                state.angle -= (float)(Math.PI * 2);
            return true;
        }