Cat and ghosts moving
parent
4be05cff2d
commit
0229f9f055
File diff suppressed because one or more lines are too long
@ -1,68 +1,139 @@
|
||||
{
|
||||
"name": "cat",
|
||||
"image": "catsandghosts",
|
||||
"image": "Master-no-background-01",
|
||||
"width": 32,
|
||||
"height": 32,
|
||||
"animations": [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Idle",
|
||||
"name": "Walk Left",
|
||||
"frames": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 32,
|
||||
"y": 64,
|
||||
"timer": 8
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 64,
|
||||
"y": 64,
|
||||
"timer": 8
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 0,
|
||||
"y": 32,
|
||||
"timer": 0
|
||||
"y": 64,
|
||||
"timer": 8
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "Walk X",
|
||||
"name": "Walk Right",
|
||||
"frames": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 64,
|
||||
"y": 32,
|
||||
"x": 32,
|
||||
"y": 96,
|
||||
"timer": 8
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 32,
|
||||
"y": 32,
|
||||
"x": 64,
|
||||
"y": 96,
|
||||
"timer": 8
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 0,
|
||||
"y": 32,
|
||||
"y": 96,
|
||||
"timer": 8
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "Walk Y",
|
||||
"name": "Walk Up",
|
||||
"frames": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 32,
|
||||
"y": 64,
|
||||
"timer": 8
|
||||
"y": 128,
|
||||
"timer": 6
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 64,
|
||||
"y": 64,
|
||||
"timer": 8
|
||||
"x": 0,
|
||||
"y": 128,
|
||||
"timer": 6
|
||||
}
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "Scared",
|
||||
"name": "Walk Down",
|
||||
"frames": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 32,
|
||||
"y": 160,
|
||||
"timer": 6
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 0,
|
||||
"y": 160,
|
||||
"timer": 6
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "Scared Left",
|
||||
"frames": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 96,
|
||||
"y": 64,
|
||||
"timer": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "Scared Right",
|
||||
"frames": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 96,
|
||||
"y": 96,
|
||||
"timer": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "Scared Up",
|
||||
"frames": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 64,
|
||||
"y": 128,
|
||||
"timer": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "Scared Down",
|
||||
"frames": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 64,
|
||||
"y": 160,
|
||||
"timer": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
@ -0,0 +1,80 @@
|
||||
{
|
||||
"name": "ghost",
|
||||
"image": "Master-no-background-01",
|
||||
"width": 32,
|
||||
"height": 32,
|
||||
"animations": [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Walk Left",
|
||||
"frames": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 0,
|
||||
"y": 32,
|
||||
"timer": 6
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 32,
|
||||
"y": 32,
|
||||
"timer": 6
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "Walk Right",
|
||||
"frames": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"timer": 6
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 32,
|
||||
"y": 0,
|
||||
"timer": 6
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "Walk Up",
|
||||
"frames": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 64,
|
||||
"y": 0,
|
||||
"timer": 6
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 64,
|
||||
"y": 32,
|
||||
"timer": 6
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "Walk Down",
|
||||
"frames": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 96,
|
||||
"y": 0,
|
||||
"timer": 6
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 96,
|
||||
"y": 32,
|
||||
"timer": 6
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Content;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using SeeNoEvil.Level;
|
||||
using SeeNoEvil.Tiled;
|
||||
|
||||
namespace SeeNoEvil.Character {
|
||||
public class GhostController {
|
||||
public List<Ghost> Ghosts {get; set;}
|
||||
public GhostController(IEnumerable<ObjectCoordinate> coordinates) {
|
||||
Ghosts = coordinates.Select(
|
||||
coord => new Ghost(new Vector2(coord.X, coord.Y))
|
||||
).ToList();
|
||||
}
|
||||
|
||||
public void LoadAll(ContentManager content, PlayField playField) {
|
||||
Ghosts.ForEach(ghost => ghost.Load(content, playField));
|
||||
}
|
||||
|
||||
public void DrawAll(SpriteBatch spriteBatch) {
|
||||
Ghosts.ForEach(ghost => ghost.Draw(spriteBatch));
|
||||
}
|
||||
|
||||
public void UpdateAll() {
|
||||
Ghosts.ForEach(ghost => ghost.Update());
|
||||
}
|
||||
|
||||
public void MoveGhosts() {
|
||||
Ghosts.ForEach(ghost => ghost.DecideMove());
|
||||
}
|
||||
}
|
||||
|
||||
public class Ghost : Character {
|
||||
public Ghost(Vector2 position) : base(position) {
|
||||
AnimationController = new AnimationController(AnimationParser.ReadAnimationJson("SeeNoEvil/Animation/ghost.json"));
|
||||
Width = AnimationController.Width;
|
||||
Height = AnimationController.Height;
|
||||
Facing = Direction.Down;
|
||||
}
|
||||
|
||||
public void DecideMove() {
|
||||
Array values = Enum.GetValues(typeof(Direction));
|
||||
Random random = new Random();
|
||||
Direction randomDirection = (Direction)values.GetValue(random.Next(values.Length));
|
||||
switch(randomDirection) {
|
||||
case Direction.Up:
|
||||
AnimationController.ChangeAnimation(3);
|
||||
break;
|
||||
case Direction.Down:
|
||||
AnimationController.ChangeAnimation(4);
|
||||
break;
|
||||
case Direction.Left:
|
||||
AnimationController.ChangeAnimation(1);
|
||||
break;
|
||||
case Direction.Right:
|
||||
AnimationController.ChangeAnimation(2);
|
||||
break;
|
||||
}
|
||||
|
||||
base.Move(randomDirection);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.Xna.Framework;
|
||||
|
||||
using SeeNoEvil.Tiled;
|
||||
|
||||
namespace SeeNoEvil.Level {
|
||||
public class PlayField {
|
||||
private IEnumerable<TileLocation> Tiles {get; set;}
|
||||
|
||||
public PlayField(IEnumerable<TileLocation> tiles) {
|
||||
Tiles = tiles;
|
||||
}
|
||||
|
||||
public bool TryWalk(Vector2 newLocation) =>
|
||||
Tiles.Any(tile => tile.location.Equals(newLocation));
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
//TODO Do all these need to be public?
|
||||
namespace SeeNoEvil.Tiled {
|
||||
//TODO Can probably be a struct?
|
||||
public class ObjectLayer {
|
||||
public IEnumerable<ObjectCoordinate> Objects {get; private set;}
|
||||
public string Name {get; private set;}
|
||||
public ObjectLayer(MapLayerModel model) {
|
||||
Name = model.Name;
|
||||
Objects = model.Objects.Select(o => new ObjectCoordinate(o.Id,
|
||||
o.X,
|
||||
o.Y));
|
||||
}
|
||||
}
|
||||
|
||||
public struct ObjectCoordinate {
|
||||
public ObjectCoordinate(int id, float x, float y) {
|
||||
X = (int)Math.Round(x / 32)*32;
|
||||
Y = (int)Math.Round(y / 32)*32;
|
||||
Id = id;
|
||||
}
|
||||
|
||||
public int X {get; set;}
|
||||
public int Y {get; set;}
|
||||
public int Id {get; set;}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue