- Clean up code, Add Unit class
- Add Timer class
- Assign Globals.screenWidth/Height
- Create Projectile class
- Create Fireball Class
- Add PassObject to Globals, then Add PassProjectile to GameGlobals
- Add list of Projectiles to world, loop, update, and draw
- Have hero create Projectiles on click
- Gameplay → World Copiar la clase
Hero.csy llamarloUnit.cs Unit.csBorrar contenido deUpdate()Hero.cscambiar clase que hereda, ya no lo hace deBasic2dahora lo hace deUnit- Crear carpeta Gameplay → World → Units
- Meter
Hero.csen carpeta Gameplay → World → Units Añadir este codigo a
Main.cs→Initialize()Globals.screenWidth = 1600; Globals.screenHeight = 900; graphics.PreferredBackBufferWidth = Globals.screenWidth; graphics.PreferredBackBufferHeight = Globals.screenHeight; graphics.ApplyChanges();
- Añadir el archivo
McTimer.csa Engine - Crear en
Globals.csotra variable mas que se llamepublic static GameTime gameTime; - En
Main.cs→Update()añadir este codigoGlobals.gameTime = gameTime; - Nueva clase en Gameplay → World nombre
Projectile2d.cs Projectile2d.csHacer la clase public y heredar de Basic2d- Copiar el constructor de Hero.cs y la variable speed y pegarlo en Projectile
- Crear la variable
public Unit owner; - Modificar el constructor y que tenga que recibir un parametro mas
…, Unit OWNER) - Setear la variable de arriba owner con la nueva variable en el constructor
owner = OWNER - Crear variable
public Vector2 direction;,public bool done;public McTimer timer; - Modificar el constructor y añadir
…, Vector2 TARGET) - Setear en el constructor
done = false; - Modificar speed a 5.0f
- Setear direction
direction= TARGET - owner.pos; - Normalizar la direccion
direction.Normalize(); - Setear timer
timer = new McTimer(1200)Creo que son milisegundos - Crear el metodo Update y meter este codigo
public virtual Update(Vector2 OFFSET, List
UNITS) { pos += direction \* speed; timer.UpdateTimer(); if(timer.Test()) { done = true; } if(HitSomething(UNITS)) { done = true; } } public virtual bool HitSomething(List UNITS) { return false; } public override void Draw(Vector2 OFFSET) { base.Draw(OFFSET); } - Añadir carpeta GamePlay → World → Projectiles
- Crear archivo
Fireball.csen Projectiles y es una copia deProjectile2d.cs- Fireball hereda de Projectile2d por lo tanto hay que actualizar el constructor
- Borrar contenido de constructor
- Borrar contenido de Update
- Añadir
base.Update(OFFSET, UNITS)a Update - Modificar el constructor para que quede tal que asi →
public Fireball(Vector2 POS, Unit OWNER, Vector2 TARGET): base("", POS, new Vetor2(20,20), OWNER, TARJET)
- Nueva carpeta Content → 2d → Projectiles
- Meter el png de fireball en la carpeta Projectiles
- Modificar el constructor de Fireball, cambiar “” por “2d\\Projectiles//Fireball”
- Crear nueva clase
GameGlobals.csal mismo nivel queMain.cs Añadir este codigo en
Globals.cspublic delegate void PassObject(object i); public delegate object PassObjectAndReturn(object i); public class Globals { …
- Crear en
GameGlobals.csuna variable que espublic static PassObject PassProjectile; Anadir ester codigo a
Hero.cspublic virtual void addProjectile(object INFO) { }
- Añadir este codigo a
World()enWorld.cs→GameGlobals.PassProjectile = addProjectile; - Crear una variable de tipo lista en
Hero.cs→public List<Projectile2d> projectiles = new List<Projectile2d>(); - Añadir un proyectil a la lista de proyectiles en
Hero.cs→addProjectile()→projectiles.add((Projectile2d)INFO); - Crear esta variable en
Hero.cs→public Vector2 offset; - Inicializar offset en el constructor de
Hero.cs→offset = new Vector2(0,0); Añadir este codigo en
Hero.cs→Update()… hero.Update() for(int i=0; i<projectiles.Count; i++) { if(projectile[i].done) { projectiles.RemoveAt(i); i–; } projectiles[i].Update(offset, null); }
Añadir este codigo en
Hero.cs→Draw()… hero.Draw(OFFSET); for(int i = 0: i < projectiles.Count: i++) { projectiles[i].Draw(OFFSET); }
Añadir este codigo en
Hero.cs→Update()(al final del metodo)… if(Globals.mouse.leftClick()) { GameGlobals.PassProjectile(new Fireball(new Vector2(pos.X, pos.Y), this, new Vector2(Globals.mouse.newMousePos.X, Globals.mouse.newMousePos.Y))); }
Projectile2d.csen el constructor añadir esta linea para que rote el disparo →rot = Globals.RotateTowards(pos, new Vector2(TARGET.X, TARGET.Y))