public virtual void LandscapeCollision(Landscape landscape) { if (CollisionResolver.DetectCollision(Hitbox, landscape.Hitbox)) { Position = CollisionResolver.SolidObjectsCollision(Hitbox, landscape.Hitbox, Position, LastPosition); } }
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; } } }
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); }
public void LandscapeCollision(Landscape landscape) { if (CollisionResolver.DetectCollision(Hitbox, landscape.Hitbox)) { moveHandler.TurnAround(); } }
public int ItemCollision(Item item, int frame) { if (CollisionResolver.DetectCollision(Hitbox, item.Hitbox) && moveHandler.IsPickingUp()) { return(item.Die(frame)); } return(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); }
/// 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); }; }
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(); }
/// 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); }
// 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; } }
/// 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)); }