Compare commits

..

No commits in common. "4299a009b7bf8d3f6a98f1c284ae3632dd618e62" and "9633bcca35277430b621e40febfff94404a9bed5" have entirely different histories.

5 changed files with 20 additions and 82 deletions

62
.gitattributes vendored
View File

@ -1,62 +0,0 @@
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
*.cs text eol=lf
*.py text eol=lf
*.sh text eol=lf
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
*.jpg binary
*.png binary
*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain

View File

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

View File

@ -56,7 +56,8 @@ namespace SemiColinGames {
GC.SuppressFinalize(this);
}
public void Draw(bool isRunningSlowly, World world, LinesOfSight linesOfSight, bool paused) {
public void Draw(
bool isRunningSlowly, World world, Player player, LinesOfSight linesOfSight, bool paused) {
graphics.SetRenderTarget(null);
graphics.Clear(backgroundColor);
@ -99,7 +100,7 @@ namespace SemiColinGames {
world.DrawBackground(spriteBatch);
// Draw player.
world.Player.Draw(spriteBatch);
player.Draw(spriteBatch);
// Draw foreground tiles.
world.DrawForeground(spriteBatch);
@ -111,9 +112,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 < world.Player.MaxHealth; i++) {
for (int i = 0; i < player.MaxHealth; i++) {
Vector2 pos = new Vector2(16 + 15 * i, 8);
if (world.Player.Health > i) {
if (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);

View File

@ -23,6 +23,7 @@ namespace SemiColinGames {
int levelIdx = -1;
Scene scene;
Player player;
World world;
LinesOfSight linesOfSight;
Camera camera = new Camera();
@ -67,6 +68,7 @@ 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();
@ -113,9 +115,14 @@ namespace SemiColinGames {
if (!paused) {
float modelTime = (float) gameTime.ElapsedGameTime.TotalSeconds;
Clock.AddModelTime(modelTime);
world.Update(modelTime, input);
linesOfSight.Update(world.Player, world.CollisionTargets);
camera.Update(world.Player.Position, world.Width);
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();
}
}
base.Update(gameTime);
@ -137,7 +144,7 @@ namespace SemiColinGames {
Debug.SetFpsText(fpsText);
scene.Draw(gameTime.IsRunningSlowly, world, linesOfSight, paused);
scene.Draw(gameTime.IsRunningSlowly, world, player, linesOfSight, paused);
base.Draw(gameTime);
drawTimer.Stop();

View File

@ -90,14 +90,13 @@ namespace SemiColinGames {
public const int TileSize = 16;
readonly Tile[] tiles;
readonly Tile[] decorations;
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; private set; }
// Size of World in pixels.
public int Width {
get { return tileWidth * TileSize; }
@ -108,7 +107,6 @@ 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>();
@ -157,18 +155,10 @@ namespace SemiColinGames {
new Vector2(Width + 1, 0), new Vector2(1, float.MaxValue));
}
public void Update(float modelTime, History<Input> input) {
Player.Update(modelTime, input, CollisionTargets);
public void Update(float modelTime) {
foreach (NPC npc in npcs) {
npc.Update(modelTime);
}
if (Player.Health <= 0) {
Reset();
}
}
void Reset() {
Player = new Player();
}
public void DrawBackground(SpriteBatch spriteBatch) {