move Player into World

This commit is contained in:
Colin McMillen 2020-03-03 13:04:29 -05:00
parent 602a8297e6
commit d270efe643
4 changed files with 23 additions and 19 deletions

View File

@ -1,7 +1,5 @@
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics;
using System;
using System.Collections.Generic;
namespace SemiColinGames { namespace SemiColinGames {
class NPC { class NPC {

View File

@ -56,8 +56,7 @@ namespace SemiColinGames {
GC.SuppressFinalize(this); GC.SuppressFinalize(this);
} }
public void Draw( public void Draw(bool isRunningSlowly, World world, LinesOfSight linesOfSight, bool paused) {
bool isRunningSlowly, World world, Player player, LinesOfSight linesOfSight, bool paused) {
graphics.SetRenderTarget(null); graphics.SetRenderTarget(null);
graphics.Clear(backgroundColor); graphics.Clear(backgroundColor);
@ -100,7 +99,7 @@ namespace SemiColinGames {
world.DrawBackground(spriteBatch); world.DrawBackground(spriteBatch);
// Draw player. // Draw player.
player.Draw(spriteBatch); world.Player.Draw(spriteBatch);
// Draw foreground tiles. // Draw foreground tiles.
world.DrawForeground(spriteBatch); world.DrawForeground(spriteBatch);
@ -112,9 +111,9 @@ namespace SemiColinGames {
// Draw in-world UI on top of everything. // Draw in-world UI on top of everything.
spriteBatch.Begin( spriteBatch.Begin(
SpriteSortMode.Deferred, null, SamplerState.PointClamp, null, null, null, null); SpriteSortMode.Deferred, null, SamplerState.PointClamp, null, null, null, null);
for (int i = 0; i < player.MaxHealth; i++) { for (int i = 0; i < world.Player.MaxHealth; i++) {
Vector2 pos = new Vector2(16 + 15 * i, 8); Vector2 pos = new Vector2(16 + 15 * i, 8);
if (player.Health > i) { if (world.Player.Health > i) {
spriteBatch.Draw(Textures.Heart.Get, pos, new Rectangle(0, 0, 16, 16), Color.White); spriteBatch.Draw(Textures.Heart.Get, pos, new Rectangle(0, 0, 16, 16), Color.White);
} else { } else {
spriteBatch.Draw(Textures.Heart.Get, pos, new Rectangle(16, 0, 16, 16), Color.White); spriteBatch.Draw(Textures.Heart.Get, pos, new Rectangle(16, 0, 16, 16), Color.White);

View File

@ -23,7 +23,6 @@ namespace SemiColinGames {
int levelIdx = -1; int levelIdx = -1;
Scene scene; Scene scene;
Player player;
World world; World world;
LinesOfSight linesOfSight; LinesOfSight linesOfSight;
Camera camera = new Camera(); Camera camera = new Camera();
@ -68,7 +67,6 @@ namespace SemiColinGames {
private void LoadLevel() { private void LoadLevel() {
camera = new Camera(); camera = new Camera();
player = new Player();
levelIdx++; levelIdx++;
world = new World(Levels.ALL_LEVELS[levelIdx % Levels.ALL_LEVELS.Length]); world = new World(Levels.ALL_LEVELS[levelIdx % Levels.ALL_LEVELS.Length]);
scene?.Dispose(); scene?.Dispose();
@ -115,14 +113,9 @@ namespace SemiColinGames {
if (!paused) { if (!paused) {
float modelTime = (float) gameTime.ElapsedGameTime.TotalSeconds; float modelTime = (float) gameTime.ElapsedGameTime.TotalSeconds;
Clock.AddModelTime(modelTime); Clock.AddModelTime(modelTime);
player.Update(modelTime, input, world.CollisionTargets); world.Update(modelTime, input);
world.Update(modelTime); linesOfSight.Update(world.Player, world.CollisionTargets);
linesOfSight.Update(player, world.CollisionTargets); camera.Update(world.Player.Position, world.Width);
camera.Update(player.Position, world.Width);
if (player.Health <= 0) {
world = new World(Levels.ALL_LEVELS[levelIdx % Levels.ALL_LEVELS.Length]);
player = new Player();
}
} }
base.Update(gameTime); base.Update(gameTime);
@ -144,7 +137,7 @@ namespace SemiColinGames {
Debug.SetFpsText(fpsText); Debug.SetFpsText(fpsText);
scene.Draw(gameTime.IsRunningSlowly, world, player, linesOfSight, paused); scene.Draw(gameTime.IsRunningSlowly, world, linesOfSight, paused);
base.Draw(gameTime); base.Draw(gameTime);
drawTimer.Stop(); drawTimer.Stop();

View File

@ -91,12 +91,17 @@ namespace SemiColinGames {
readonly Tile[] tiles; readonly Tile[] tiles;
readonly Tile[] decorations; readonly Tile[] decorations;
Player player;
readonly NPC[] npcs = new NPC[1]; readonly NPC[] npcs = new NPC[1];
// Size of World in terms of tile grid. // Size of World in terms of tile grid.
private readonly int tileWidth; private readonly int tileWidth;
private readonly int tileHeight; private readonly int tileHeight;
public Player Player {
get { return player; }
}
// Size of World in pixels. // Size of World in pixels.
public int Width { public int Width {
get { return tileWidth * TileSize; } get { return tileWidth * TileSize; }
@ -107,6 +112,7 @@ namespace SemiColinGames {
} }
public World(string levelSpecification) { public World(string levelSpecification) {
player = new Player();
npcs[0] = new NPC(new Point(16 * 38, 16 * 12)); npcs[0] = new NPC(new Point(16 * 38, 16 * 12));
var tilesList = new List<Tile>(); var tilesList = new List<Tile>();
var decorationsList = new List<Tile>(); var decorationsList = new List<Tile>();
@ -155,10 +161,18 @@ namespace SemiColinGames {
new Vector2(Width + 1, 0), new Vector2(1, float.MaxValue)); new Vector2(Width + 1, 0), new Vector2(1, float.MaxValue));
} }
public void Update(float modelTime) { public void Update(float modelTime, History<Input> input) {
player.Update(modelTime, input, CollisionTargets);
foreach (NPC npc in npcs) { foreach (NPC npc in npcs) {
npc.Update(modelTime); npc.Update(modelTime);
} }
if (player.Health <= 0) {
Reset();
}
}
void Reset() {
player = new Player();
} }
public void DrawBackground(SpriteBatch spriteBatch) { public void DrawBackground(SpriteBatch spriteBatch) {