private void Update_CheckIfINeedToHitStuff(Player plr, GameTime gt) { Vector2 a; if (_position.X < ConvertUnits.ToDisplayUnits(-plr.Position.X) && _position.Y < ConvertUnits.ToDisplayUnits(-plr.Position.Y)) a = ConvertUnits.ToDisplayUnits(-plr.Position) - _position; else a = _position - ConvertUnits.ToDisplayUnits(-plr.Position); if (direction) { if (a.X <= 100 && eCurrentState == EnemyState.Alarmed && Update_CheckForPlayersInViewField(plr)) { eCurrentState = EnemyState.Attacking; amountOfFrames = 3; dealDamage(plr, gt); } else if (ConvertUnits.ToDisplayUnits(-eBody.Position.Y) > ConvertUnits.ToDisplayUnits(-plr.bPlayer.Position.Y) && eCurrentState == EnemyState.Alarmed && canJump) { eBody.ApplyLinearImpulse(new Vector2(0, 250)); eCurrentState = EnemyState.Jumping; canJump = false; } } if (!direction) { if (a.X <= 100 && eCurrentState == EnemyState.Alarmed && a.Y < 100 && Update_CheckForPlayersInViewField(plr)) { eCurrentState = EnemyState.Attacking; amountOfFrames = 3; dealDamage(plr, gt); } else if (ConvertUnits.ToDisplayUnits(-eBody.Position.Y) > ConvertUnits.ToDisplayUnits(-plr.bPlayer.Position.Y) && eCurrentState == EnemyState.Alarmed && canJump) { eBody.ApplyLinearImpulse(new Vector2(0, 250)); canJump = false; eCurrentState = EnemyState.Jumping; } } }
private void Update_CheckState(Player plr) { if ((Update_CheckForPlayersInViewField(plr) && plr.mCurrentState != Player.State.Dead) || haveSeenRecently && plr.mCurrentState != Player.State.Dead) { eCurrentState = EnemyState.Alarmed; } else if (eCurrentState != EnemyState.Jumping) { eCurrentState = EnemyState.Walking; _sprite = idleAnimation; currentFrame = new Point(0, 0); amountOfFrames = 1; } }
private void dealDamage(Player plr, GameTime gt) { damageTimer += gt.ElapsedGameTime; if (eCurrentState == EnemyState.Attacking) { if (damageTimer > TimeSpan.FromMilliseconds(500)) { damageTimer -= TimeSpan.FromMilliseconds(500); plr.GetHit(damage); } } }
private bool Update_CheckForPlayersInViewField(Player plr) { Vector2 startLeft = eBody.Position; Vector2 endLeft = startLeft + new Vector2(ConvertUnits.ToSimUnits(-250), 0); Vector2 startRight = eBody.Position; Vector2 endRight = startRight + new Vector2(ConvertUnits.ToSimUnits(250), 0); float fracture = 1; bool iHaveHit = false; if (!direction) { try { Game1._world.RayCast((f, p, n, fr) => { fracture = fr; if (f != null && f != plr.bPlayer.FixtureList[0]) { iHaveHit = true; return 0; } return fr; }, startLeft, endLeft); } catch { } } if (direction) { try { Game1._world.RayCast((f, p, n, fr) => { fracture = fr; if (f != null && f != plr.bPlayer.FixtureList[0]) { iHaveHit = true; // fracture = fr; return 0; } return fr; }, startRight, endRight); } catch { } } //if (plr.hitBox.Intersects(viewRectangle)) { // return true; //} globalFracture = fracture; Texture2D rect = new Texture2D(Game1.graphics.GraphicsDevice, 250, currentAnim.frameSize.Y); Color[] data = new Color[250 * currentAnim.frameSize.Y]; for (int i = 0; i < data.Length; ++i) data[i] = Color.AntiqueWhite; rect.SetData(data); Rectangle left = new Rectangle(); left.Height = currentAnim.frameSize.Y; left.Width = (int)(250 * fracture); left.X = (int)ConvertUnits.ToDisplayUnits(eBody.Position.X) - (int)(250 * fracture); left.Y = (int)ConvertUnits.ToDisplayUnits(eBody.Position.Y); Rectangle right = new Rectangle(); right.Height = currentAnim.frameSize.Y; right.Width = (int)(250 * fracture); right.X = (int)ConvertUnits.ToDisplayUnits(eBody.Position.X); right.Y = (int)ConvertUnits.ToDisplayUnits(eBody.Position.Y); int d = -1; if (direction) d = 1; else d = 0; if (d == 1 && right.Intersects(new Rectangle((int)((ConvertUnits.ToDisplayUnits(Game1.player.bPlayer.Position.X) - Game1.player.currentAnim.frameSize.X / 2)), (int)((ConvertUnits.ToDisplayUnits(-Game1.player.bPlayer.Position.Y - (ConvertUnits.ToSimUnits(Game1.player.currentAnim.frameSize.Y / 2))))), Game1.player.currentAnim.frameSize.X, Game1.player.currentAnim.frameSize.Y))) { aggroTimer = 0; haveSeenRecently = true; return true; } if (d == 0 && left.Intersects(new Rectangle((int)((ConvertUnits.ToDisplayUnits(plr.bPlayer.Position.X) - plr.currentAnim.frameSize.X / 2)), (int)((ConvertUnits.ToDisplayUnits(plr.bPlayer.Position.Y)) + plr.currentAnim.frameSize.Y / 2), plr.currentAnim.frameSize.X, plr.currentAnim.frameSize.Y))) { aggroTimer = 0; haveSeenRecently = true; return true; } return false; }
public void Update(Player plr, GameTime gt) { // mCurrentState = EnemyState.Idle; CIMKTJ = false; if (direction) holeRectangle.X = (int)ConvertUnits.ToDisplayUnits(eBody.Position.X) + 10; else holeRectangle.X = (int)ConvertUnits.ToDisplayUnits(eBody.Position.X) - 60; holeRectangle.Y = (int)ConvertUnits.ToDisplayUnits(-eBody.Position.Y) + 30; if (!canJump) { jumpTimer += (float)gt.ElapsedGameTime.Milliseconds; if (jumpTimer >= 1000.0f) { jumpTimer = 0.0f; canJump = true; } } if (haveSeenRecently && !Update_CheckForPlayersInViewField(plr)) aggroTimer += (float)gt.ElapsedGameTime.Milliseconds; if (aggroTimer >= TimeSpan.FromSeconds(6).TotalMilliseconds) { haveSeenRecently = false; aggroTimer = 0; } for (int i = 0; i < Game1.lightingEngine.Hulls.Count; i++) { if (Game1.lightingEngine.Hulls[i] == h) { Game1.lightingEngine.Hulls[i].Position = ConvertUnits.ToDisplayUnits(new Vector2(eBody.Position.X, -eBody.Position.Y)); } } enemyHealth = (int)MathHelper.Clamp(enemyHealth, 0, maxHealth); if (eCurrentState != EnemyState.Dead) { if (!direction) { vaPosition.X = _position.X - viewAreaSprite.Width + 40; } if (direction) { vaPosition.X = _position.X + 40; } enemyRectangle.X = (int)ConvertUnits.ToDisplayUnits(eBody.Position.X) - frameSize.X / 2; enemyRectangle.Y = (int)ConvertUnits.ToDisplayUnits(-eBody.Position.Y) - frameSize.Y / 2; Update_CheckState(plr); if (Update_CheckForHolesInFrontOfMe()) { if (Update_CheckIfICanMakeTheJump()) { if (!direction && canJump) { eBody.ApplyLinearImpulse(new Vector2(-100, 250)); eCurrentState = EnemyState.Jumping; canJump = false; } else if (direction && canJump) { eBody.ApplyLinearImpulse(new Vector2(100, 250)); eCurrentState = EnemyState.Jumping; canJump = false; } } else if (eCurrentState != EnemyState.Jumping) { eBody.LinearVelocity = new Vector2(0, eBody.LinearVelocity.Y); eCurrentState = EnemyState.Idle; } } Update_Move(plr); _position = ConvertUnits.ToDisplayUnits(new Vector2(eBody.Position.X, -eBody.Position.Y)); Update_CheckIfINeedToHitStuff(plr, gt); turnTimer += gt.ElapsedGameTime; if (eCurrentState == EnemyState.Idle || eCurrentState == EnemyState.Suspicious || eCurrentState == EnemyState.Walking) { if (turnTimer > TimeSpan.FromSeconds(2)) { if (!direction) { direction = true; turnTimer -= TimeSpan.FromSeconds(2); goto end; } if (direction) { direction = false; turnTimer -= TimeSpan.FromSeconds(2); goto end; } } } else // Ei käänny toiseen suuntaan kun alarmed turnTimer = TimeSpan.Zero; end: if (!direction) viewRectangle.X = (int)ConvertUnits.ToDisplayUnits(eBody.Position.X) - currentFrame.X - viewAreaSprite.Width + 10; else viewRectangle.X = (int)ConvertUnits.ToDisplayUnits(eBody.Position.X); viewRectangle.Y = (int)ConvertUnits.ToDisplayUnits(-eBody.Position.Y) - viewAreaSprite.Height; } Update_Animation(gt); // Facing right Update_Direction(); animTimer += (float)gt.ElapsedGameTime.TotalMilliseconds; if (animTimer > currentAnim.animInterval && (!deathLooped)) { currentAnim.currentFrame.X++; if (currentAnim.currentFrame.X >= currentAnim.amountOfFrames) { if (eCurrentState == EnemyState.Dead && !deathLooped) { deathLooped = true; currentAnim.currentFrame = new Point(3, 2); currentAnim.amountOfFrames = 1; animTimer = 0.0f; return; } currentAnim.currentFrame.X = 0; } animTimer = 0.0f; } }
public void takeDamage(Player plr, GameTime gt, bool shuriken, bool fall) { if (plr.readyToDealDamage && !shuriken) { enemyHealth -= 20; if (eCurrentState != EnemyState.Alarmed) { eCurrentState = EnemyState.Alarmed; haveSeenRecently = true; } plr.readyToDealDamage = false; } else { enemyHealth -= 50; eCurrentState = EnemyState.Alarmed; haveSeenRecently = true; } if (fall) { enemyHealth -= maxHealth; } if (enemyHealth < 1) { eCurrentState = EnemyState.Dead; eBody.LinearVelocity = Vector2.Zero; eBody.Enabled = false; } }
private void Update_Move(Player plr) { if (eCurrentState != EnemyState.Dead) { if (eCurrentState == EnemyState.Attacking) { eBody.LinearVelocity = Vector2.Zero; } if (eCurrentState == EnemyState.Alarmed) { Vector2 a; a = ConvertUnits.ToDisplayUnits(-plr.Position) - _position; if (!holeDetected) { if (a.X > 0) { eBody.LinearVelocity = new Vector2(7.5f, eBody.LinearVelocity.Y); direction = true; } else { eBody.LinearVelocity = new Vector2(-7.5f, eBody.LinearVelocity.Y); direction = false; } } else if (eCurrentState != EnemyState.Jumping) { eBody.LinearVelocity = new Vector2(0, eBody.LinearVelocity.Y); // eCurrentState = EnemyState.Idle; } } if (!holeDetected) { if (!direction && eCurrentState == EnemyState.Walking) { eBody.LinearVelocity = new Vector2(-5f, eBody.LinearVelocity.Y); eCurrentState = EnemyState.Walking; } if (direction && eCurrentState == EnemyState.Walking) { eBody.LinearVelocity = new Vector2(5f, eBody.LinearVelocity.Y); eCurrentState = EnemyState.Walking; } } else if (eCurrentState != EnemyState.Jumping) { eBody.LinearVelocity = new Vector2(0, eBody.LinearVelocity.Y); // eCurrentState = EnemyState.Idle; } if (eCurrentState == EnemyState.Suspicious) { eBody.LinearVelocity = new Vector2(0, 0); eCurrentState = EnemyState.Idle; } } else if (eBody.LinearVelocity != Vector2.Zero && eCurrentState == EnemyState.Dead) { eBody.LinearVelocity = Vector2.Zero; } }
internal void Initialize(Player plr, Texture2D nPS) { connectedPlayers.Add(plr); newPlayerSprite = nPS; connectedPlayers = new List<Player>(); PlayerIDs = new List<int>(); ConnectToServer(); }
public void Initialize(Texture2D sprite, ProjectileType type, Player plr, Body b, Texture2D shadow) { B = b; alreadyCollidedOnceOrMore = false; shade = shadow; foreach (var item in Game1.projectiles) { B.IgnoreCollisionWith(item.B); } B.OnCollision += new OnCollisionEventHandler(B_OnCollision); uint[] d = new uint[shade.Width * shade.Height]; shade.GetData(d); Vertices v = PolygonTools.CreatePolygon(d, shade.Width, true); Vector2[] a = v.ToArray(); h = ShadowHull.CreateConvex(ref a); if (plr.direction == 1) dir = 1; lock (Game1.projectileLock) Game1.lightingEngine.Hulls.Add(h); // B.ApplyLinearImpulse(new Vector2(50, -10)); if (plr.direction == 1) { B.Position = new Vector2(-plr.Position.X, plr.Position.Y + 1); B.ApplyTorque(-250f); B.LinearVelocity = new Vector2(-65, 7); } else { B.Position = new Vector2(-plr.Position.X, plr.Position.Y + 1); B.ApplyTorque(250f); B.LinearVelocity = new Vector2(65, 7); } Active = true; position = ConvertUnits.ToDisplayUnits(-plr.Position); texture = sprite; Type = type; Pelaaja = plr; hitBox.Width = 17; hitBox.Height = 17; hitBox.X = (int)position.X; hitBox.Y = (int)position.Y; }