added scaling
This commit is contained in:
parent
1120f68e93
commit
bf3ad4a1b0
|
|
@ -1,4 +1,4 @@
|
|||
var window = new Window("ASDLteroids", 800, 600);
|
||||
var window = new Window("ASDLteroids", (int)(800 * Scene.SCALE), (int)(600 * Scene.SCALE));
|
||||
var renderer = new Renderer(window);
|
||||
var scene = new Scene(renderer);
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,9 @@ using static SDL2.SDL;
|
|||
|
||||
class Scene
|
||||
{
|
||||
public const int SCREEN_WIDTH = 800;
|
||||
public const int SCREEN_HEIGHT = 600;
|
||||
public const double SCALE = 1.5;
|
||||
public const int SCREEN_WIDTH = (int)(800 * SCALE);
|
||||
public const int SCREEN_HEIGHT = (int)(600 * SCALE);
|
||||
private Ship ship;
|
||||
private UI ui;
|
||||
private Renderer renderer;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ enum Size : int
|
|||
|
||||
class Asteroid : Renderable, Logic
|
||||
{
|
||||
const double SPEED = 100;
|
||||
const double SPEED = 100 * Scene.SCALE;
|
||||
private double dx, dy;
|
||||
public double X, Y;
|
||||
public Size Size;
|
||||
|
|
@ -26,8 +26,8 @@ class Asteroid : Renderable, Logic
|
|||
{
|
||||
var rad = i * Math.PI * 2 / shape.Length;
|
||||
shape[i] = new double[2];
|
||||
shape[i][0] = Math.Cos(rad) * (0.5 + random.NextDouble() / 2) * (int)size / 2;
|
||||
shape[i][1] = Math.Sin(rad) * (0.5 + random.NextDouble() / 2) * (int)size / 2;
|
||||
shape[i][0] = Math.Cos(rad) * (0.5 + random.NextDouble() / 2) * (int)size / 2 * Scene.SCALE;
|
||||
shape[i][1] = Math.Sin(rad) * (0.5 + random.NextDouble() / 2) * (int)size / 2 * Scene.SCALE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -35,15 +35,16 @@ class Asteroid : Renderable, Logic
|
|||
{
|
||||
renderer.setColor(255, 255, 255);
|
||||
double[][] drawLines = new double[shape.Length + 1][];
|
||||
var halfSize = (int)Size / 2 * Scene.SCALE;
|
||||
for (int i = 0; i < shape.Length; i++)
|
||||
{
|
||||
drawLines[i] = new double[2];
|
||||
drawLines[i][0] = shape[i][0] + X - (int)Size / 2;
|
||||
drawLines[i][1] = shape[i][1] + Y - (int)Size / 2;
|
||||
drawLines[i][0] = shape[i][0] + X - halfSize;
|
||||
drawLines[i][1] = shape[i][1] + Y - halfSize;
|
||||
}
|
||||
drawLines[drawLines.Length - 1] = new double[2];
|
||||
drawLines[drawLines.Length - 1][0] = shape[0][0] + X - (int)Size / 2;
|
||||
drawLines[drawLines.Length - 1][1] = shape[0][1] + Y - (int)Size / 2;
|
||||
drawLines[drawLines.Length - 1][0] = shape[0][0] + X - halfSize;
|
||||
drawLines[drawLines.Length - 1][1] = shape[0][1] + Y - halfSize;
|
||||
renderer.DrawLines(drawLines);
|
||||
}
|
||||
|
||||
|
|
@ -64,8 +65,8 @@ class Asteroid : Renderable, Logic
|
|||
|
||||
foreach (var shot in Scene.Instance.Shots)
|
||||
{
|
||||
var halfSize = (int)Size / 2;
|
||||
if (Point.Distance(shot.X, shot.Y, X - halfSize, Y - halfSize) < (int)Size / 2)
|
||||
var halfSize = (int)Size / 2 * Scene.SCALE;
|
||||
if (Point.Distance(shot.X, shot.Y, X - halfSize, Y - halfSize) < halfSize)
|
||||
{
|
||||
shot.Destroy();
|
||||
this.Destroy();
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
class Ship : Logic, Renderable
|
||||
{
|
||||
const double SPEED = 3;
|
||||
const double SPEED = 3 * Scene.SCALE;
|
||||
const double ROTATION_SPEED = 5;
|
||||
|
||||
double rotation = 0;
|
||||
|
|
@ -61,8 +61,8 @@ class Ship : Logic, Renderable
|
|||
}
|
||||
foreach (var asteroid in Scene.Instance.Asteroids)
|
||||
{
|
||||
var halfAsteroidSize = (int)asteroid.Size / 2;
|
||||
if (Point.Distance(x, y, asteroid.X - halfAsteroidSize, asteroid.Y - halfAsteroidSize) < halfAsteroidSize + 3)
|
||||
var halfAsteroidSize = (int)asteroid.Size / 2 * Scene.SCALE;
|
||||
if (Point.Distance(x, y, asteroid.X - halfAsteroidSize, asteroid.Y - halfAsteroidSize) < halfAsteroidSize)
|
||||
{
|
||||
Scene.Instance.Loose();
|
||||
}
|
||||
|
|
@ -73,14 +73,14 @@ class Ship : Logic, Renderable
|
|||
{
|
||||
renderer.setColor(255, 255, 255);
|
||||
renderer.DrawLines(new double[][] {
|
||||
new double[] { x + Math.Cos(rotation) * 10, y + Math.Sin(rotation) * 10 },
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3) * 10, y + Math.Sin(rotation + (Math.PI * 2) / 3) * 10 },
|
||||
new double[] { x + Math.Cos(rotation) * 10, y + Math.Sin(rotation) * 10 },
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3 * 2) * 10, y + Math.Sin(rotation + (Math.PI * 2) / 3 * 2) * 10 },
|
||||
new double[] { x + Math.Cos(rotation) * 10 * Scene.SCALE, y + Math.Sin(rotation) * 10 * Scene.SCALE },
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3) * 10 * Scene.SCALE, y + Math.Sin(rotation + (Math.PI * 2) / 3) * 10 * Scene.SCALE},
|
||||
new double[] { x + Math.Cos(rotation) * 10 * Scene.SCALE, y + Math.Sin(rotation) * 10 * Scene.SCALE},
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3 * 2) * 10 * Scene.SCALE, y + Math.Sin(rotation + (Math.PI * 2) / 3 * 2) * 10 * Scene.SCALE },
|
||||
});
|
||||
renderer.DrawLines(new double[][] {
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3) * 5, y + Math.Sin(rotation + (Math.PI * 2) / 3) * 5 },
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3 * 2) * 5, y + Math.Sin(rotation + (Math.PI * 2) / 3 * 2) * 5 },
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3) * 5 * Scene.SCALE, y + Math.Sin(rotation + (Math.PI * 2) / 3) * 5 * Scene.SCALE },
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3 * 2) * 5 * Scene.SCALE, y + Math.Sin(rotation + (Math.PI * 2) / 3 * 2) * 5 * Scene.SCALE },
|
||||
});
|
||||
|
||||
if (thrust)
|
||||
|
|
@ -89,12 +89,12 @@ class Ship : Logic, Renderable
|
|||
var random = new Random();
|
||||
// Draw flame behind ship
|
||||
renderer.DrawLines(new double[][] {
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3) * 10, y + Math.Sin(rotation + (Math.PI * 2) / 3) * 10 },
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3 * 1.2) * 5+random.Next(5), y + Math.Sin(rotation + (Math.PI * 2) / 3 * 1.2) * 5+random.Next(5) },
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3 * 1.4) * 10, y + Math.Sin(rotation + (Math.PI * 2) / 3 * 1.4) * 10 },
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3 * 1.6) * 6+random.Next(5), y + Math.Sin(rotation + (Math.PI * 2) / 3 * 1.6) * 5+random.Next(4) },
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3 * 1.8) * 10, y + Math.Sin(rotation + (Math.PI * 2) / 3 * 1.8) * 10 },
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3 * 2) * 5+random.Next(5), y + Math.Sin(rotation + (Math.PI * 2) / 3 * 2) * 5+random.Next(5) },
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3) * 10 * Scene.SCALE, y + Math.Sin(rotation + (Math.PI * 2) / 3) * 10 * Scene.SCALE},
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3 * 1.2) * 5+random.Next(5) * Scene.SCALE, y + Math.Sin(rotation + (Math.PI * 2) / 3 * 1.2) * 5+random.Next(5) * Scene.SCALE },
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3 * 1.4) * 10 * Scene.SCALE, y + Math.Sin(rotation + (Math.PI * 2) / 3 * 1.4) * 10 * Scene.SCALE },
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3 * 1.6) * 6+random.Next(5) * Scene.SCALE, y + Math.Sin(rotation + (Math.PI * 2) / 3 * 1.6) * 5+random.Next(4) * Scene.SCALE },
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3 * 1.8) * 10 * Scene.SCALE, y + Math.Sin(rotation + (Math.PI * 2) / 3 * 1.8) * 10 * Scene.SCALE },
|
||||
new double[] { x + Math.Cos(rotation + (Math.PI * 2) / 3 * 2) * 5+random.Next(5) * Scene.SCALE, y + Math.Sin(rotation + (Math.PI * 2) / 3 * 2) * 5+random.Next(5) * Scene.SCALE },
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
class Shot : Renderable, Logic
|
||||
{
|
||||
const double SPEED = 300;
|
||||
const double SPEED = 300 * Scene.SCALE;
|
||||
private double dx, dy;
|
||||
public double X, Y;
|
||||
|
||||
|
|
|
|||
|
|
@ -4,10 +4,16 @@ using static SDL2.SDL;
|
|||
class UI : Renderable
|
||||
{
|
||||
IntPtr font;
|
||||
SDL_Color color;
|
||||
|
||||
public UI()
|
||||
{
|
||||
TTF_Init();
|
||||
color = new SDL_Color();
|
||||
color.r = 255;
|
||||
color.g = 255;
|
||||
color.b = 255;
|
||||
color.a = 255;
|
||||
var assemblyName = this.GetType().Assembly.GetName().Name!;
|
||||
var fontStream = this.GetType().Assembly.GetManifestResourceStream($"{assemblyName}.assets.font.ttf");
|
||||
var fontFile = System.IO.Path.GetTempPath() + "asdlteroids-font.ttf";
|
||||
|
|
@ -21,12 +27,18 @@ class UI : Renderable
|
|||
|
||||
public void Render(Renderer renderer, double dx)
|
||||
{
|
||||
var white = new SDL_Color();
|
||||
white.r = 255;
|
||||
white.g = 255;
|
||||
white.b = 255;
|
||||
white.a = 255;
|
||||
var surfaceMessage = TTF_RenderText_Solid(this.font, "Score: " + Scene.Instance.Score, white);
|
||||
RenderText(renderer, "Score: " + Scene.Instance.Score, 0, 0);
|
||||
RenderText(renderer, "Level: " + Scene.Instance.Level, 0, 20);
|
||||
|
||||
if (!Scene.Instance.running && DateTime.Now.Second % 2 == 0)
|
||||
{
|
||||
RenderText(renderer, "Press r to restart", Scene.SCREEN_WIDTH / 2, Scene.SCREEN_HEIGHT / 2, true);
|
||||
}
|
||||
}
|
||||
|
||||
public void RenderText(Renderer renderer, String text, int x, int y, bool center = false)
|
||||
{
|
||||
var surfaceMessage = TTF_RenderText_Solid(this.font, text, this.color);
|
||||
|
||||
var texture = SDL_CreateTextureFromSurface(renderer.GetRaw(), surfaceMessage);
|
||||
int width;
|
||||
|
|
@ -35,29 +47,17 @@ class UI : Renderable
|
|||
SDL_QueryTexture(texture, out _, out _, out width, out height);
|
||||
|
||||
SDL_Rect rect = new SDL_Rect();
|
||||
rect.x = 0;
|
||||
rect.y = 0;
|
||||
rect.x = x;
|
||||
rect.y = y;
|
||||
rect.w = width;
|
||||
rect.h = height;
|
||||
|
||||
SDL_RenderCopy(renderer.GetRaw(), texture, IntPtr.Zero, ref rect);
|
||||
|
||||
if (!Scene.Instance.running)
|
||||
if (center)
|
||||
{
|
||||
var surfaceMessage2 = TTF_RenderText_Solid(this.font, "Press r to restart", white);
|
||||
var texture2 = SDL_CreateTextureFromSurface(renderer.GetRaw(), surfaceMessage2);
|
||||
int width2;
|
||||
int height2;
|
||||
|
||||
SDL_QueryTexture(texture2, out _, out _, out width2, out height2);
|
||||
|
||||
SDL_Rect rect2 = new SDL_Rect();
|
||||
rect2.x = Scene.SCREEN_WIDTH / 2 - width2 / 2;
|
||||
rect2.y = Scene.SCREEN_HEIGHT / 2 - height2 / 2;
|
||||
rect2.w = width2;
|
||||
rect2.h = height2;
|
||||
|
||||
SDL_RenderCopy(renderer.GetRaw(), texture2, IntPtr.Zero, ref rect2);
|
||||
rect.x -= width / 2;
|
||||
rect.y -= height / 2;
|
||||
}
|
||||
|
||||
SDL_RenderCopy(renderer.GetRaw(), texture, IntPtr.Zero, ref rect);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue