public void Execute() { foreach (var e in gravityEntities) { Vector2 entityVelocity = e.velocity.value; Vector2 entityPosition = e.position.value; float entityMass = e.mass.value; foreach (var other in gravityEntities) { if (other == e) { continue; } if (entityMass > other.mass.value) { continue; } entityVelocity += PhysicsService.GravitationalPotentialVector(entityMass, other.mass.value, entityPosition, other.position.value) * Time.fixedDeltaTime; } e.ReplaceVelocity(entityVelocity); } }
public void Execute() { foreach (var e in collideables) { var castOrigin = e.position.value; var castDirection = e.velocity.value * Time.fixedDeltaTime; var castRadius = e.radius.value; var circleCastDatas = PhysicsService.CircleCastAll(castOrigin, castRadius, castDirection, castDirection.magnitude, e); if (circleCastDatas.Length > 0) { foreach (var data in circleCastDatas) { if (data.entity.mass.value > e.mass.value) { continue; } //data.entity.isDestroyed = true; //ViewService.LoadAsset(contexts, null, "CollisionEffectTest", data.point); DamageService.DealDamageOnCollision(e, data.entity); } } } }
public void Initialize(Contexts contexts) { PhysicsService = new PhysicsService(contexts); InventoryService = new InventoryService(contexts); AttackService = new AttackService(contexts); CameraService = new CameraService(contexts); EventManager = new EventManager(contexts); }
public PhysicsTestLogic( MtaServer server, IElementRepository elementRepository, PhysicsService physicsService, CommandService commandService, ILogger logger) { this.server = server; this.elementRepository = elementRepository; this.physicsService = physicsService; this.commandService = commandService; this.logger = logger; this.commandService.AddCommand("physics").Triggered += (source, args) => InitEmpty(); this.commandService.AddCommand("physicsfull").Triggered += (source, args) => InitFull(); }
public PhysicsTestLogic( MtaServer server, IElementCollection elementCollection, PhysicsService physicsService, CommandService commandService, ILogger logger) { this.server = server; this.elementCollection = elementCollection; this.physicsService = physicsService; this.commandService = commandService; this.logger = logger; this.commandService.AddCommand("physics").Triggered += (source, args) => InitEmpty(); this.commandService.AddCommand("physicshighres").Triggered += (source, args) => InitFullDff(); this.commandService.AddCommand("physicslowres").Triggered += (source, args) => InitFullCol(); }
private static void ArrangeServices() { var spriteBatchService = new SpriteBatchService(new SpriteBatch(CurrentGraphicsDevice)); var physicsService = new PhysicsService(); var settingsService = new SettingsService(); services = new Dictionary <Type, object>() { { typeof(IDrawableService), new DrawableService(spriteBatchService) }, { typeof(IContentManagerService), new ContentManagerService(CurrentContentManager) }, { typeof(ISpriteBatchService), spriteBatchService }, { typeof(IPhysicsService), physicsService }, { typeof(ISettingsService), settingsService }, { typeof(IGameControls), new GameControls(physicsService, settingsService) }, { typeof(IJudgeService), new JudgeService() } }; }
public void Initialize(Contexts contexts) { PhysicsService = new PhysicsService(contexts); }
public void Initialize(Contexts contexts) { PhysicsService = new PhysicsService(contexts); UnityTimeService = new UnityTimeService(contexts); CameraServices = new CameraServices(contexts); }
public void Initialize() { var settings = contexts.meta.celestialBodySettings.value; //Star var starEntity = contexts.game.CreateEntity(); ViewService.LoadAsset(contexts, starEntity, GameControllerMono.starAssetName); starEntity.ReplaceMass(settings.starMass); starEntity.ReplacePosition(Vector2.zero); starEntity.ReplaceVelocity(Vector2.zero); starEntity.ReplaceRadius(5f); starEntity.isCollideable = true; //starEntity.ReplaceHealth(20f); //Planet(s) var planetSettings = settings.planetSettings; if (planetSettings == null || planetSettings.Length <= 0) { return; } var sectorAngle = 360f / planetSettings.Length; for (int i = 0; i < planetSettings.Length; i++) { var currentPlanetSettings = planetSettings[i]; var startOnPeriapsis = true; //Calculate orbit ellipse var orbitEccentricity = (settings.overrideOrbitEccentricity) ? settings.orbitEccentricity : currentPlanetSettings.orbitEccentricity; var orbitSemiMajorAxis = settings.firstOrbitSemiMajorAxis + (i * settings.orbitSemiMajorAxisIncrement); var orbitFocusDistanceFromCenter = PhysicsService.OrbitFocusPosition(orbitSemiMajorAxis, orbitEccentricity); var planetInitialDistanceFromFocus = (startOnPeriapsis) ? orbitSemiMajorAxis - orbitFocusDistanceFromCenter : orbitSemiMajorAxis + orbitFocusDistanceFromCenter; //Calculate initial values var planetInitialPosition = (settings.placePlanetOnDifferentSectors) ? starEntity.position.value + (Vector2)(Quaternion.Euler(0f, 0f, sectorAngle * i) * (Vector2.up * planetInitialDistanceFromFocus)) : starEntity.position.value + (Vector2.up * planetInitialDistanceFromFocus); var directionFromOrbitCenter = planetInitialPosition - starEntity.position.value; var orbitalVelocity = PhysicsService.OrbitalVelocity(settings.starMass + currentPlanetSettings.mass, planetInitialDistanceFromFocus, orbitEccentricity, startOnPeriapsis); var planetInitialVelocity = Quaternion.Euler(0f, 0f, 90f) * (directionFromOrbitCenter.normalized * orbitalVelocity); var orbitalPeriod = PhysicsService.OrbitalPeriod(orbitSemiMajorAxis, settings.starMass); //Create planet var planetEntity = contexts.game.CreateEntity(); ViewService.LoadAsset(contexts, planetEntity, GameControllerMono.planetAssetName, planetInitialPosition); planetEntity.ReplaceColor(currentPlanetSettings.color); planetEntity.ReplaceRadius(currentPlanetSettings.scale); planetEntity.ReplaceMass(currentPlanetSettings.mass); planetEntity.ReplacePosition(planetInitialPosition); planetEntity.ReplaceVelocity(planetInitialVelocity); planetEntity.ReplaceOrbitalPeriod(orbitalPeriod); planetEntity.isCollideable = true; planetEntity.ReplaceHealth(1f); if (i == 2) { planetEntity.isPlayerControlledShooter = true; planetEntity.RemoveHealth(); } } }