using Microsoft.Xna.Framework; using MonoGame.Extended; using MonoGame.Extended.Entities; using MonoGame.Extended.Entities.Systems; using Sandbox.Components; namespace Sandbox.Systems { public class RainfallSystem : EntityUpdateSystem { private ComponentMapper _transformMapper; private ComponentMapper _raindropMapper; public RainfallSystem() : base(Aspect.All(typeof(Transform2), typeof(Raindrop))) { } public override void Initialize(IComponentMapperService mapperService) { _transformMapper = mapperService.GetMapper(); _raindropMapper = mapperService.GetMapper(); } public override void Update(GameTime gameTime) { var elapsedSeconds = gameTime.GetElapsedSeconds(); foreach (var entity in ActiveEntities) { var transform = _transformMapper.Get(entity); var raindrop = _raindropMapper.Get(entity); raindrop.Velocity += new Vector2(0, 10) * elapsedSeconds; transform.Position += raindrop.Velocity * elapsedSeconds; if (transform.Position.Y >= 480) DestroyEntity(entity); } } } }