Exemplo n.º 1
0
 public virtual void LandscapeCollision(Landscape landscape)
 {
     if (CollisionResolver.DetectCollision(Hitbox, landscape.Hitbox))
     {
         Position = CollisionResolver.SolidObjectsCollision(Hitbox, landscape.Hitbox, Position, LastPosition);
     }
 }
Exemplo n.º 2
0
        public void Run()
        {
            this.soundEffects.PlayStart();

            CollisionResolver    collisionResolver    = new CollisionResolver(this.soundEffects, this.scoreContainer);
            DifficultyController difficultyController =
                new DifficultyController(
                    this.graphicalObjects,
                    this.objectGenerator,
                    this.scoreContainer);

            while (true)
            {
                Thread.Sleep(this.threadSleepTime);

                this.ReadAndProcessCommands(this.graphicalObjects);

                this.UpdateObjects();

                collisionResolver.Resolve(this.graphicalObjects);

                this.DrawObjects();

                this.scoreContainer.DrawScore();

                difficultyController.UpdateDifficulty();

                // Go to game over screen condition
                if (this.graphicalObjects.SpaceShipPlayerOne.HealthPoints == 0)
                {
                    this.soundEffects.PlayExplosion();
                    break;
                }
            }
        }
Exemplo n.º 3
0
    public void Awake()
    {
        CellSpace                    = (SimDomain.width + SimDomain.height) / 32.0f;
        particleMass                 = (CellSpace * 20.0f);
        m_gravity                    = new Vector3(0.0f, -9.81f, 0.0f) * particleMass;
        m_fluidSim                   = new SPHSimulation(CellSpace, SimDomain);
        m_collisionSolver            = new CollisionResolver();
        m_collisionSolver.Bounciness = 0.2f;
        m_collisionSolver.Friction   = 0.01f;

        m_particleSystem = new ParticleSystem();
        float freq    = 40;
        int   maxPart = 100;

        m_particleSystem.MaxParticles = maxPart;
        m_particleSystem.MaxLife      = (int)((double)maxPart / freq / 0.01f);

        FluidParticleEmitter emitter = new FluidParticleEmitter();

        emitter.Position     = new Vector3(SimDomain.xMax / 2, SimDomain.yMax - SimDomain.yMax / 8, 0.0f);
        emitter.VelocityMin  = 2.5f;
        emitter.VelocityMax  = 3.0f;
        emitter.Direction    = new Vector3(0.8f, -0.25f, 0.0f);
        emitter.Distribution = SimDomain.width * 0.1f;
        emitter.Frequency    = freq;
        emitter.ParticleMass = particleMass;
        m_particleSystem.Emitters.Add(emitter);
    }
Exemplo n.º 4
0
 public void LandscapeCollision(Landscape landscape)
 {
     if (CollisionResolver.DetectCollision(Hitbox, landscape.Hitbox))
     {
         moveHandler.TurnAround();
     }
 }
Exemplo n.º 5
0
 public int ItemCollision(Item item, int frame)
 {
     if (CollisionResolver.DetectCollision(Hitbox, item.Hitbox) && moveHandler.IsPickingUp())
     {
         return(item.Die(frame));
     }
     return(0);
 }
Exemplo n.º 6
0
 public int LethalCollision(ForegroundObject enemy, int frameWhenDied)
 {
     if (CollisionResolver.DetectCollision(Hitbox, enemy.Hitbox))
     {
         if (!(LastPosition.Y < Position.Y))
         {
             return(Die(frameWhenDied));
         }
         else
         {
             return(enemy.Die(frameWhenDied));
         }
     }
     return(0);
 }
Exemplo n.º 7
0
        /// Initializes event handler and similiar
        protected virtual void initHandler()
        {
            MoveStartedEvent  = null;
            MoveFinishedEvent = null;
            CollisionResolver = (x, y, mos) => {
                foreach (MapObject mo in mos)
                {
                    Tile tile = mo as Tile;
                    if (tile != null && tile.Occupied)
                    {
                        return(Point.Zero);
                    }
                }

                return(null);
            };
        }
Exemplo n.º 8
0
    void Start()
    {
        //cameraManager = Camera.main.GetComponent<CameraManager>();

        grid.Generate();
        cameraManager.FitContent();
        CollisionResolver.Init(this);

        for (int i = 0; i < musorCount; i++)
        {
            Spawn <MusorkaEntity>(grid.GetRandomCell());
        }
        //Spawn<Musor>(grid.GetCell(0, 0));
        Spawn <BomzhEntity>(grid.GetRandomCell());
        Spawn(EntityType.Dvornik, grid.GetRandomCell());

        mainSlot.game = this;
        mainSlot.grid = grid;
        mainSlot.SetRandomItem();
    }
Exemplo n.º 9
0
        /// Moves this object distanceX tiles on the x-axis and
        /// distanceY tiles on the y-axis relative to its own
        /// position. Collisions are resolved by the passed
        /// collision resolver.
        public virtual bool move(int distanceX, int distanceY, CollisionResolver resolve)
        {
            if (!Moving && (distanceX != 0 || distanceY != 0))
            {
                // TODO sprite is updated with delay
                //      when turning, not sure why
                Facing = distanceY > 0
                    ? Facing.South : distanceY < 0
                    ? Facing.North : distanceX > 0
                    ? Facing.East : distanceX < 0
                    ? Facing.West : Facing;

                int positionX = (int)Position.X;
                int positionY = (int)Position.Y;
                Target = new Point(
                    positionX + distanceX,
                    positionY + distanceY);

                List <MapObject> targets = ContainingMap
                                           .getTiles(Target.X, Target.Y).Cast <MapObject>()
                                           .Concat(ContainingMap.getEntities(Target.X, Target.Y)).ToList();

                Point?newDistance = resolve(distanceX, distanceY, targets);
                if (newDistance != null)
                {
                    move(newDistance.Value.X, newDistance.Value.Y, resolve);
                    return(false);
                }

                Moving = true;
                onMoveStarted(new MoveEventArgs(
                                  Position.ToPoint(), Target));

                return(true);
            }

            return(false);
        }
Exemplo n.º 10
0
        // TODO: Check for potential bug with 1-tile width water
        static void Prefix(ref GravityComponents __instance, float dt)
        {
            gravComponentState.Clear();

            var data = __instance.GetDataList();

            for (int i = 0; i < data.Count; i++)
            {
                GravityComponent grav = data[i];
                if (!Helpers.ShouldFloat(grav.transform))
                {
                    continue;
                }

                ApplyXVelocityChanges(ref grav, dt);
                ApplyYVelocityChanges(ref grav, dt);

                Vector3 pos         = grav.transform.GetPosition();
                Vector3 newPosition = (Vector2)pos + grav.velocity * dt;

                // Resolve collisions
                CollisionResolver resolver = new CollisionResolver(grav, newPosition);
                resolver.ResolveCollisions();

                // Apply the new gravity/position
                newPosition   = resolver.bestPosition;
                newPosition.z = pos.z;
                grav          = resolver.grav;

                grav.transform.SetPosition(newPosition);
                grav.elapsedTime += dt;

                gravComponentState.Add(i, grav);
                data[i] = NULL_COMPONENT;
            }
        }
Exemplo n.º 11
0
 /// Moves this object to the absolute target coordinate
 public bool moveTo(int x, int y, CollisionResolver resolve)
 {
     return(move(x - (int)Position.X, y - (int)Position.Y, resolve));
 }