move Player into World
This commit is contained in:
parent
602a8297e6
commit
d270efe643
@ -1,7 +1,5 @@
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SemiColinGames {
|
||||
class NPC {
|
||||
|
@ -56,8 +56,7 @@ namespace SemiColinGames {
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
public void Draw(
|
||||
bool isRunningSlowly, World world, Player player, LinesOfSight linesOfSight, bool paused) {
|
||||
public void Draw(bool isRunningSlowly, World world, LinesOfSight linesOfSight, bool paused) {
|
||||
graphics.SetRenderTarget(null);
|
||||
graphics.Clear(backgroundColor);
|
||||
|
||||
@ -100,7 +99,7 @@ namespace SemiColinGames {
|
||||
world.DrawBackground(spriteBatch);
|
||||
|
||||
// Draw player.
|
||||
player.Draw(spriteBatch);
|
||||
world.Player.Draw(spriteBatch);
|
||||
|
||||
// Draw foreground tiles.
|
||||
world.DrawForeground(spriteBatch);
|
||||
@ -112,9 +111,9 @@ namespace SemiColinGames {
|
||||
// Draw in-world UI on top of everything.
|
||||
spriteBatch.Begin(
|
||||
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);
|
||||
if (player.Health > i) {
|
||||
if (world.Player.Health > i) {
|
||||
spriteBatch.Draw(Textures.Heart.Get, pos, new Rectangle(0, 0, 16, 16), Color.White);
|
||||
} else {
|
||||
spriteBatch.Draw(Textures.Heart.Get, pos, new Rectangle(16, 0, 16, 16), Color.White);
|
||||
|
@ -23,7 +23,6 @@ namespace SemiColinGames {
|
||||
int levelIdx = -1;
|
||||
|
||||
Scene scene;
|
||||
Player player;
|
||||
World world;
|
||||
LinesOfSight linesOfSight;
|
||||
Camera camera = new Camera();
|
||||
@ -68,7 +67,6 @@ namespace SemiColinGames {
|
||||
|
||||
private void LoadLevel() {
|
||||
camera = new Camera();
|
||||
player = new Player();
|
||||
levelIdx++;
|
||||
world = new World(Levels.ALL_LEVELS[levelIdx % Levels.ALL_LEVELS.Length]);
|
||||
scene?.Dispose();
|
||||
@ -115,14 +113,9 @@ namespace SemiColinGames {
|
||||
if (!paused) {
|
||||
float modelTime = (float) gameTime.ElapsedGameTime.TotalSeconds;
|
||||
Clock.AddModelTime(modelTime);
|
||||
player.Update(modelTime, input, world.CollisionTargets);
|
||||
world.Update(modelTime);
|
||||
linesOfSight.Update(player, world.CollisionTargets);
|
||||
camera.Update(player.Position, world.Width);
|
||||
if (player.Health <= 0) {
|
||||
world = new World(Levels.ALL_LEVELS[levelIdx % Levels.ALL_LEVELS.Length]);
|
||||
player = new Player();
|
||||
}
|
||||
world.Update(modelTime, input);
|
||||
linesOfSight.Update(world.Player, world.CollisionTargets);
|
||||
camera.Update(world.Player.Position, world.Width);
|
||||
}
|
||||
|
||||
base.Update(gameTime);
|
||||
@ -144,7 +137,7 @@ namespace SemiColinGames {
|
||||
|
||||
Debug.SetFpsText(fpsText);
|
||||
|
||||
scene.Draw(gameTime.IsRunningSlowly, world, player, linesOfSight, paused);
|
||||
scene.Draw(gameTime.IsRunningSlowly, world, linesOfSight, paused);
|
||||
|
||||
base.Draw(gameTime);
|
||||
drawTimer.Stop();
|
||||
|
@ -91,12 +91,17 @@ namespace SemiColinGames {
|
||||
readonly Tile[] tiles;
|
||||
readonly Tile[] decorations;
|
||||
|
||||
Player player;
|
||||
readonly NPC[] npcs = new NPC[1];
|
||||
|
||||
// Size of World in terms of tile grid.
|
||||
private readonly int tileWidth;
|
||||
private readonly int tileHeight;
|
||||
|
||||
public Player Player {
|
||||
get { return player; }
|
||||
}
|
||||
|
||||
// Size of World in pixels.
|
||||
public int Width {
|
||||
get { return tileWidth * TileSize; }
|
||||
@ -107,6 +112,7 @@ namespace SemiColinGames {
|
||||
}
|
||||
|
||||
public World(string levelSpecification) {
|
||||
player = new Player();
|
||||
npcs[0] = new NPC(new Point(16 * 38, 16 * 12));
|
||||
var tilesList = new List<Tile>();
|
||||
var decorationsList = new List<Tile>();
|
||||
@ -155,10 +161,18 @@ namespace SemiColinGames {
|
||||
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) {
|
||||
npc.Update(modelTime);
|
||||
}
|
||||
if (player.Health <= 0) {
|
||||
Reset();
|
||||
}
|
||||
}
|
||||
|
||||
void Reset() {
|
||||
player = new Player();
|
||||
}
|
||||
|
||||
public void DrawBackground(SpriteBatch spriteBatch) {
|
||||
|
Loading…
Reference in New Issue
Block a user