public int detPos(Entity entity, Entity dstEntity) { if (entity.getPosition().X + entity.getSize().X < dstEntity.getPosition().X + 1 && entity.getPosition().Y + entity.getSize().Y > dstEntity.getPosition().Y && entity.getPosition().Y < dstEntity.getPosition().Y + dstEntity.getSize().Y) { return(0); // 0 -> left } if (entity.getPosition().X > dstEntity.getPosition().X + dstEntity.getSize().X - 1 && entity.getPosition().Y + entity.getSize().Y > dstEntity.getPosition().Y && entity.getPosition().Y < dstEntity.getPosition().Y + dstEntity.getSize().Y) { return(1); // 1 -> right } if (entity.getPosition().Y + entity.getSize().Y > dstEntity.getPosition().Y + dstEntity.getSize().Y && entity.getPosition().X + entity.getSize().X > dstEntity.getPosition().X && entity.getPosition().X < dstEntity.getPosition().X + dstEntity.getSize().X) { return(2); // 2 -> up } if (entity.getPosition().Y < dstEntity.getPosition().Y + dstEntity.getSize().Y) { return(3); // 3 -> down } return(-1); //-1 nothing just in case }
internal override void updateCollisionWith(Entity a_collider) { if (a_collider is Player) { Player t_player = (Player) a_collider; if (Game.keyClicked(GameState.getActionKey()) && !t_player.isChase() && t_player.getLastState() != Player.State.Hiding && t_player.getCurrentState() != Player.State.Jumping && t_player.getCurrentState() != Player.State.Slide && t_player.getCurrentState() != Player.State.Climbing) { Vector2 t_playerGlobal = a_collider.getPosition().getGlobalCartesianCoordinates(); float t_myPositionX = m_position.getGlobalCartesianCoordinates().X; if (t_playerGlobal.X < t_myPositionX) { t_player.setNextPositionX(t_myPositionX - a_collider.getHitBox().getOutBox().Width); t_player.setFacingRight(true); } else { t_player.setNextPositionX(t_myPositionX + m_img.getSize().X); t_player.setFacingRight(false); } t_player.setState(Player.State.Hiding); t_player.setHidingImage(Player.STANDHIDINGIMAGE); t_player.setSpeedX(0); } } }
internal override void updateCollisionWith(Entity a_collider) { if (a_collider is Player) { Player t_player = (Player)a_collider; Vector2 t_playerGlobalPosition = a_collider.getPosition().getGlobalCartesian(); Rectangle t_playerOutBox = a_collider.getHitBox().getOutBox(); if (CollisionManager.Contains(this.getHitBox(), new Vector2(t_playerGlobalPosition.X + t_playerOutBox.Width / 2, t_playerGlobalPosition.Y + t_playerOutBox.Height / 2)) && !t_player.isChase() && t_player.getLastState() != Player.State.Hiding && t_player.getCurrentState() != Player.State.Rolling ) { if (KeyboardHandler.keyClicked(GameState.getActionKey())) { t_player.setState(Player.State.Hiding); t_player.setHidingImage(Player.DUCKHIDINGIMAGE); t_player.setSpeedX(0); t_player.setInteractionVisibility(false); t_player.getHideSound().play(); } else if (t_player.getCurrentState() != Player.State.Hiding) { t_player.setInteractionVisibility(true); } } } }
public Vector2 getMove(Vector2 location) { Vector2 direction = Vector2.Subtract(target.getPosition(), location); direction.Normalize(); return(direction); }
public List <Entity> getBlockList(Entity collider, int type) { List <Entity> list = new List <Entity>(); int x = (int)((collider.getPosition().X) / blockSize) - 1; int y = (int)((collider.getPosition().Y) / blockSize) - 1; if (x < 0) { x = 0; } if (y < 0) { y = 0; } if (x + 5 > size.X) { x = (int)size.X - 5; } if (y + 5 > size.Y) { y = (int)size.Y - 5; } for (int i = x; i < x + 5; i++) { for (int j = y; j < y + 5; j++) { if (type == 0) { if (level[i, j] != null && level[i, j].GetType().Name.ToLower().Equals("block")) { list.Add(level[i, j]); } } if (type == 1) { if (level[i, j] != null && level[i, j].GetType().Name.ToLower().Equals("collectible")) { list.Add(level[i, j]); } } } } return(list); }
public void searchCollision(Entity collider) { int x = (int)((collider.getPosition().X) / blockSize) - 1; int y = (int)((collider.getPosition().Y) / blockSize) - 1; if (x < 0) { x = 0; } if (y < 0) { y = 0; } if (x + 5 > size.X) { x = (int)size.X - 5; } if (y + 5 > size.Y) { y = (int)size.Y - 5; } for (int i = x; i < x + 5; i++) { for (int j = y; j < y + 5; j++) { if (level[i, j] != null && level[i, j].GetType().Name.ToLower().Equals("collectible")) { if (collider.getRect().Intersects(level[i, j].getRect())) { SoundPlayer.playPoint(); ((Player)collider).addPoints(((Collectible)level[i, j]).getValue()); level[i, j] = null; } } if (level[i, j] != null && level[i, j].GetType().Name.ToLower().Equals("trap")) { if (collider.getRect().Intersects(level[i, j].getRect())) { ((Player)collider).die(); } } } } }
public void changeMode(Entity a_collider) { float t_startX = m_line.getStartPoint().getGlobalX(); float t_startY = m_line.getStartPoint().getGlobalY(); float t_endX = m_line.getEndPoint().getGlobalX(); float t_endY = m_line.getEndPoint().getGlobalY(); float t_colliderY = a_collider.getPosition().getGlobalY() + a_collider.getHitBox().getOutBox().Height; m_isReady = true; setStartPoint(new Vector2(((-t_startX * t_endY) + (t_startX * t_colliderY) + (t_startY * t_endX) - (t_endX * t_colliderY)) / (t_startY -t_endY), t_colliderY - 1)); setEndPoint(m_player.getPosition().getGlobalCartesian() + new Vector2(m_player.getHitBox().getOutBox().Width / 2, m_player.getHitBox().getOutBox().Height / 2)); m_rotate = m_startPosition.getAngleTo(m_endPosition.getGlobalCartesian()); LinkedList<GameObject> t_gameObjects = Game.getInstance().getState().getCurrentList(); bool t_isStartAtPlatform = false; foreach (GameObject t_go in t_gameObjects) { if (t_go is Platform) if (((Platform)t_go).getBox().Contains((int)m_startPosition.getGlobalX(), (int)m_startPosition.getGlobalY())) { t_isStartAtPlatform = true; break; } } if (t_isStartAtPlatform) { m_player.setState(Player.State.Swinging); if (!(Vector2.Distance(m_player.getPosition().getGlobalCartesian(), m_line.getStartPoint().getGlobalCartesian()) < Math.Min(Vector2.Distance(new Vector2(m_player.getPosition().getGlobalCartesian().X + m_player.getHitBox().getOutBox().Width, m_player.getPosition().getGlobalCartesian().Y), m_line.getStartPoint().getGlobalCartesian()), Vector2.Distance(new Vector2(m_player.getPosition().getGlobalCartesian().X + m_player.getHitBox().getOutBox().Width / 2, m_player.getPosition().getGlobalCartesian().Y), m_line.getStartPoint().getGlobalCartesian())))) { if (Vector2.Distance(new Vector2(m_player.getPosition().getGlobalCartesian().X + m_player.getHitBox().getOutBox().Width, m_player.getPosition().getGlobalCartesian().Y), m_line.getStartPoint().getGlobalCartesian()) < Vector2.Distance(new Vector2(m_player.getPosition().getGlobalCartesian().X + m_player.getHitBox().getOutBox().Width / 2, m_player.getPosition().getGlobalCartesian().Y), m_line.getStartPoint().getGlobalCartesian())) { m_player.addPositionXAfterDraw(m_player.getHitBox().getOutBox().Width); } else { m_player.addPositionXAfterDraw(m_player.getHitBox().getOutBox().Width / 2); } } m_player.setRope(this); m_player.changePositionToPolar(); m_player.getPosition().setParentPositionWithoutMoving(m_line.getStartPoint()); m_player.setState(Player.State.Swinging); if (m_player.getPosition().getLength() < 50) { m_player.getPosition().setLength(50); } m_moveToStart = false; } else { m_moveToStart = true; } }
internal override void updateCollisionWith(Entity a_collider) { if (a_collider is Player) { Player t_player = (Player) a_collider; if (!t_player.isChase() && t_player.getLastState() != Player.State.Hiding && t_player.getCurrentState() != Player.State.Jumping && t_player.getCurrentState() != Player.State.Slide && t_player.getCurrentState() != Player.State.Climbing) { if (!t_player.isStunned()) { if (KeyboardHandler.keyClicked(GameState.getActionKey())) { Vector2 t_playerGlobal = a_collider.getPosition().getGlobalCartesian(); float t_myPositionX = m_position.getGlobalCartesian().X; float t_newPos; if (t_playerGlobal.X < t_myPositionX) { t_newPos = t_myPositionX - a_collider.getHitBox().getOutBox().Width; t_player.setFacingRight(true); } else { t_newPos = t_myPositionX + m_img.getSize().X; t_player.setFacingRight(false); } Game.getInstance().m_camera.getPosition().plusXWith(t_player.getPosition().getGlobalX() - t_newPos); t_player.setNextPositionX(t_newPos); t_player.setState(Player.State.Hiding); t_player.setHidingImage(Player.STANDHIDINGIMAGE); t_player.setSpeedX(0); t_player.getHideSound().play(); t_player.getImg().setSprite("Images//Sprite//Hero//hero_wallhide"); t_player.updateFlip(); } else if (t_player.getCurrentState() != Player.State.Hiding) { t_player.setInteractionVisibility(true); } } } } }
internal override void updateCollisionWith(Entity a_collider) { if (a_collider is Player) { Player t_player = (Player)a_collider; Vector2 t_playerGlobalPosition = a_collider.getPosition().getGlobalCartesianCoordinates(); Rectangle t_playerOutBox = a_collider.getHitBox().getOutBox(); if (CollisionManager.Contains(this.getHitBox(), new Vector2(t_playerGlobalPosition.X + t_playerOutBox.Width/2, t_playerGlobalPosition.Y + t_playerOutBox.Height/2))) { if (Game.keyClicked(GameState.getActionKey()) && !t_player.isChase() && t_player.getLastState() != Player.State.Hiding) { t_player.setState(Player.State.Hiding); t_player.setHidingImage(Player.DUCKHIDINGIMAGE); t_player.setSpeedX(0); } } } }
internal override void updateCollisionWith(Entity a_collid) { if (a_collid is Player) { Vector2 t_playerGlobalCoordinate = a_collid.getPosition().getGlobalCartesianCoordinates(); if (CollisionManager.Contains(this.getHitBox(), t_playerGlobalCoordinate)) { Player t_player = (Player)a_collid; if ( (Game.keyClicked(GameState.getUpKey()) && (t_player.getCurrentState() == Player.State.Walking || t_player.getCurrentState() == Player.State.Stop)) || (t_player.getCurrentState() != Player.State.Walking && t_player.getCurrentState() != Player.State.Stop) ) { if (this.m_spriteEffects == SpriteEffects.FlipHorizontally) t_player.setIsOnLadderWithDirection(Player.Direction.Left); else t_player.setIsOnLadderWithDirection(Player.Direction.Right); } } } }
public void dealWithCollisions(Entity entity, Entity block) { /* theory * ent.pos.x+ent.vel.x+ent.siz.x<block.pos.x * * */ int pos = -1; if (entity.getPosition().X + entity.getVelocity().X + entity.getSize().X > block.getPosition().X && //lewo entity.getPosition().X + entity.getVelocity().X < block.getPosition().X + block.getSize().X && //prawo entity.getPosition().Y + entity.getVelocity().Y < block.getPosition().Y + block.getSize().Y && //down entity.getPosition().Y + entity.getVelocity().Y + entity.getSize().Y > block.getPosition().Y //up ) { pos = detPos(entity, block); if (pos == 0) { entity.setPosition(new Vector2(block.getPosition().X - entity.getSize().X, entity.getPosition().Y)); entity.setForce(new Vector2(0, entity.getVelocity().Y)); Debug.WriteLine("lewo"); } if (pos == 1) { entity.setPosition(new Vector2(block.getPosition().X + block.getSize().X, entity.getPosition().Y)); entity.setForce(new Vector2(0, entity.getVelocity().Y)); Debug.WriteLine("prawo"); } if (pos == 2) { entity.setPosition(new Vector2(entity.getPosition().X, block.getPosition().Y + block.getSize().Y)); entity.setForce(new Vector2(entity.getVelocity().X, 0)); } if (pos == 3) //from up - STANDING { entity.setPosition(new Vector2(entity.getPosition().X, block.getPosition().Y - entity.getSize().Y)); entity.setForce(new Vector2(entity.getVelocity().X, 0)); if (entity.isJumpLocked() && entity.getVelocity().Y == 0) { entity.unlockJump(); } } } }
public void hang(Entity a_collider) { if (!m_stunned) { Rectangle t_colliderBox = a_collider.getHitBox().getOutBox(); Rectangle t_playerBox = getHitBox().getOutBox(); if (!t_colliderBox.Contains((int)m_lastPosition.X + t_playerBox.Width + 4, (int)m_lastPosition.Y) && t_colliderBox.Contains((int)m_position.getGlobalX() + t_playerBox.Width + 4, (int)m_position.getGlobalY()) && m_lastPosition.Y < t_colliderBox.Y && m_speed.Y >= 0 && (m_currentState == State.Jumping || m_currentState == State.Slide)) { m_position.setLocalY(a_collider.getPosition().getGlobalY()); m_nextPosition.Y = m_position.getGlobalY(); m_speed.Y = 0; m_speed.X = 0; m_currentState = State.Hanging; m_facingRight = true; m_hangSound.play(); } else if (!t_colliderBox.Contains((int)m_lastPosition.X - 4, (int)m_lastPosition.Y) && t_colliderBox.Contains((int)m_position.getGlobalX() - 4, (int)m_position.getGlobalY()) && m_lastPosition.Y < t_colliderBox.Y && m_speed.Y >= 0 && (m_currentState == State.Jumping || m_currentState == State.Slide)) { m_position.setLocalY(a_collider.getPosition().getGlobalY()); m_nextPosition.Y = m_position.getGlobalY(); m_speed.Y = 0; m_speed.X = 0; m_currentState = State.Hanging; m_facingRight = false; m_hangSound.play(); } } }