add rockets
This commit is contained in:
parent
8c53885621
commit
91001e09ba
Binary file not shown.
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.2 KiB |
1
build.sh
1
build.sh
@ -1,5 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
export PACKAGES_PATH=$PWD:$PWD/edk2
|
export PACKAGES_PATH=$PWD:$PWD/edk2
|
||||||
|
magick assets/rocket_orig.bmp -type TrueColor -define bmp:format=bmp3 -compress None assets/rocket.bmp
|
||||||
xxd -i assets/rocket.bmp > src/UEFI_fireworks/rocket.c
|
xxd -i assets/rocket.bmp > src/UEFI_fireworks/rocket.c
|
||||||
if [ "$1" == "debug" ]; then
|
if [ "$1" == "debug" ]; then
|
||||||
build -a X64 -t GCC5 -p UEFI_fireworks.dsc -b DEBUG
|
build -a X64 -t GCC5 -p UEFI_fireworks.dsc -b DEBUG
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
#include "rng.h"
|
#include "rng.h"
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include <../MdeModulePkg/Include/Library/BmpSupportLib.h>
|
|
||||||
#include <Base.h>
|
#include <Base.h>
|
||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
@ -55,6 +54,7 @@ EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE imgHandle,
|
|||||||
(EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)GraphicsOutput->Mode->FrameBufferBase;
|
(EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)GraphicsOutput->Mode->FrameBufferBase;
|
||||||
|
|
||||||
init_rng();
|
init_rng();
|
||||||
|
init_rocket_blt();
|
||||||
|
|
||||||
if (SerialPortInitialize() == RETURN_SUCCESS) {
|
if (SerialPortInitialize() == RETURN_SUCCESS) {
|
||||||
SERIAL_PRINT("Serial initialized\n");
|
SERIAL_PRINT("Serial initialized\n");
|
||||||
@ -74,6 +74,13 @@ EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE imgHandle,
|
|||||||
milisleep(1);
|
milisleep(1);
|
||||||
clear_screen();
|
clear_screen();
|
||||||
|
|
||||||
|
/*rocket_instance rocket = {
|
||||||
|
.x = GraphicsOutput->Mode->Info->HorizontalResolution / 2,
|
||||||
|
.y = GraphicsOutput->Mode->Info->VerticalResolution - 50};
|
||||||
|
while (step_rocket(&rocket, 100)) {
|
||||||
|
milisleep(10);
|
||||||
|
}*/
|
||||||
|
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
UINT8 random;
|
UINT8 random;
|
||||||
fill_random_bytes(&random, sizeof(random));
|
fill_random_bytes(&random, sizeof(random));
|
||||||
@ -88,7 +95,8 @@ EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE imgHandle,
|
|||||||
*new_firework_instence = create_firework();
|
*new_firework_instence = create_firework();
|
||||||
|
|
||||||
for (UINT8 i = 0; i < ARRAY_SIZE(firework_array); i++) {
|
for (UINT8 i = 0; i < ARRAY_SIZE(firework_array); i++) {
|
||||||
if (firework_array[i] == NULL || firework_array[i]->status != TRUE) {
|
if (firework_array[i] == NULL ||
|
||||||
|
firework_array[i]->status == INACTIVE) {
|
||||||
if (firework_array[i] != NULL) {
|
if (firework_array[i] != NULL) {
|
||||||
FreePool(firework_array[i]); // free firework
|
FreePool(firework_array[i]); // free firework
|
||||||
firework_array[i] = NULL;
|
firework_array[i] = NULL;
|
||||||
@ -106,6 +114,10 @@ EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE imgHandle,
|
|||||||
if (!step_firework(firework_array[i])) {
|
if (!step_firework(firework_array[i])) {
|
||||||
firework_array[i]->status = INACTIVE;
|
firework_array[i]->status = INACTIVE;
|
||||||
}
|
}
|
||||||
|
} else if (firework_array[i]->status == LAUNCHING) {
|
||||||
|
if (!step_rocket(&firework_array[i]->rocket, firework_array[i]->y)) {
|
||||||
|
firework_array[i]->status = ACTIVE;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
FreePool(firework_array[i]); // free firework
|
FreePool(firework_array[i]); // free firework
|
||||||
firework_array[i] = NULL;
|
firework_array[i] = NULL;
|
||||||
@ -138,6 +150,8 @@ firework_instance create_firework() {
|
|||||||
firework.y = random % GraphicsOutput->Mode->Info->VerticalResolution /
|
firework.y = random % GraphicsOutput->Mode->Info->VerticalResolution /
|
||||||
2; // spawn only on upper half of the screen
|
2; // spawn only on upper half of the screen
|
||||||
|
|
||||||
firework.status = ACTIVE; // TODO set to LAUNCHING when implemented
|
firework.rocket.x = firework.x + rocket_asset.width / 2;
|
||||||
|
firework.rocket.y = GraphicsOutput->Mode->Info->VerticalResolution;
|
||||||
|
firework.status = LAUNCHING; // TODO set to LAUNCHING when implemented
|
||||||
return firework;
|
return firework;
|
||||||
}
|
}
|
@ -1,8 +1,11 @@
|
|||||||
#include "Base.h"
|
#include "Base.h"
|
||||||
|
#include "Library/UefiLib.h"
|
||||||
#include "ProcessorBind.h"
|
#include "ProcessorBind.h"
|
||||||
|
#include "bmp.h"
|
||||||
#include "const.h"
|
#include "const.h"
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
#include <../MdeModulePkg/Include/Library/BmpSupportLib.h>
|
||||||
#include <Library/UefiApplicationEntryPoint.h>
|
#include <Library/UefiApplicationEntryPoint.h>
|
||||||
#include <Protocol/GraphicsOutput.h>
|
#include <Protocol/GraphicsOutput.h>
|
||||||
|
|
||||||
@ -104,5 +107,52 @@ BOOLEAN step_firework(firework_instance *firework) {
|
|||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
rocket_blt rocket_asset;
|
||||||
|
|
||||||
BOOLEAN step_rocket(rocket_instance *rocket) {}
|
EFI_GRAPHICS_OUTPUT_BLT_PIXEL **mask_stack;
|
||||||
|
BOOLEAN **rocket_alfa_mask;
|
||||||
|
|
||||||
|
void init_rocket_blt() {
|
||||||
|
EFI_STATUS Status = TranslateBmpToGopBlt(
|
||||||
|
assets_rocket_bmp, assets_rocket_bmp_len, &rocket_asset.blt,
|
||||||
|
&rocket_asset.blt_size, &rocket_asset.height, &rocket_asset.width);
|
||||||
|
if (EFI_ERROR(Status)) {
|
||||||
|
Print(L"Failed to load rocket asset: %r\n", Status);
|
||||||
|
Exit(Status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN step_rocket(rocket_instance *rocket, UINT32 max_y) {
|
||||||
|
GraphicsOutput->Blt(GraphicsOutput,
|
||||||
|
rocket_asset.blt, // BltBuffer
|
||||||
|
EfiBltBufferToVideo, // BltOperation
|
||||||
|
0, // src X
|
||||||
|
0, // src Y
|
||||||
|
rocket->x, // dst X
|
||||||
|
rocket->y, // dst Y
|
||||||
|
rocket_asset.width, rocket_asset.height,
|
||||||
|
0 // unused Delta
|
||||||
|
);
|
||||||
|
|
||||||
|
if (rocket->y <= max_y) {
|
||||||
|
GraphicsOutput->Blt(
|
||||||
|
GraphicsOutput,
|
||||||
|
&night_sky, // BltBuffer
|
||||||
|
EfiBltVideoFill, // BltOperation
|
||||||
|
0, // SourceX
|
||||||
|
0, // SourceY
|
||||||
|
rocket->x, // DestinationX
|
||||||
|
rocket->y, // DestinationY
|
||||||
|
rocket_asset.width, // Width
|
||||||
|
rocket_asset.height + 1, // Height // remove trail from previous frame
|
||||||
|
0 // Delta (not used for fill operations)
|
||||||
|
);
|
||||||
|
return FALSE;
|
||||||
|
} else {
|
||||||
|
for (UINT8 i = 0; i < rocket_asset.width; i++) {
|
||||||
|
draw_pixel(rocket->x + i, rocket->y + rocket_asset.height, night_sky);
|
||||||
|
}
|
||||||
|
rocket->y--;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
@ -4,4 +4,6 @@
|
|||||||
void draw_circle(int xc, int yc, int r,
|
void draw_circle(int xc, int yc, int r,
|
||||||
const EFI_GRAPHICS_OUTPUT_BLT_PIXEL color);
|
const EFI_GRAPHICS_OUTPUT_BLT_PIXEL color);
|
||||||
void clear_screen();
|
void clear_screen();
|
||||||
BOOLEAN step_firework(firework_instance *firework);
|
BOOLEAN step_firework(firework_instance *firework);
|
||||||
|
void init_rocket_blt();
|
||||||
|
BOOLEAN step_rocket(rocket_instance *rocket, UINT32 max_y);
|
@ -1,4 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#include "types.h"
|
||||||
#include <Protocol/GraphicsOutput.h>
|
#include <Protocol/GraphicsOutput.h>
|
||||||
extern EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
|
extern EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
|
||||||
extern EFI_GRAPHICS_OUTPUT_BLT_PIXEL *framebuffer;
|
extern EFI_GRAPHICS_OUTPUT_BLT_PIXEL *framebuffer;
|
||||||
|
extern rocket_blt rocket_asset;
|
@ -19,3 +19,10 @@ typedef struct {
|
|||||||
UINT16 cleanup_r;
|
UINT16 cleanup_r;
|
||||||
rocket_instance rocket;
|
rocket_instance rocket;
|
||||||
} firework_instance;
|
} firework_instance;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *blt;
|
||||||
|
UINTN blt_size;
|
||||||
|
UINTN height;
|
||||||
|
UINTN width;
|
||||||
|
} rocket_blt;
|
Loading…
x
Reference in New Issue
Block a user