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); } 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); }
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; }