示例#1
0
    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);
        }
    }
示例#2
0
    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);
                }
            }
        }
    }
示例#3
0
 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);
 }
示例#4
0
    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();
    }
示例#6
0
        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() }
            };
        }
示例#7
0
 public void Initialize(Contexts contexts)
 {
     PhysicsService = new PhysicsService(contexts);
 }
示例#8
0
 public void Initialize(Contexts contexts)
 {
     PhysicsService   = new PhysicsService(contexts);
     UnityTimeService = new UnityTimeService(contexts);
     CameraServices   = new CameraServices(contexts);
 }
示例#9
0
    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();
            }
        }
    }