cleaned up UIElement code
This commit is contained in:
parent
6149b983a5
commit
fff1ac4907
|
@ -15,13 +15,14 @@ export default abstract class CanvasNode extends GameNode implements Region {
|
||||||
|
|
||||||
constructor(){
|
constructor(){
|
||||||
super();
|
super();
|
||||||
this.position.setOnChange(this.positionChanged);
|
|
||||||
this._size = new Vec2(0, 0);
|
this._size = new Vec2(0, 0);
|
||||||
this._size.setOnChange(this.sizeChanged);
|
this._size.setOnChange(() => this.sizeChanged());
|
||||||
this._scale = new Vec2(1, 1);
|
this._scale = new Vec2(1, 1);
|
||||||
this._scale.setOnChange(this.scaleChanged);
|
this._scale.setOnChange(() => this.scaleChanged());
|
||||||
this._boundary = new AABB();
|
this._boundary = new AABB();
|
||||||
this.updateBoundary();
|
this.updateBoundary();
|
||||||
|
|
||||||
|
this.size.set(101, 101);
|
||||||
}
|
}
|
||||||
|
|
||||||
get size(): Vec2 {
|
get size(): Vec2 {
|
||||||
|
@ -30,7 +31,8 @@ export default abstract class CanvasNode extends GameNode implements Region {
|
||||||
|
|
||||||
set size(size: Vec2){
|
set size(size: Vec2){
|
||||||
this._size = size;
|
this._size = size;
|
||||||
this._size.setOnChange(this.sizeChanged);
|
// Enter as a lambda to bind "this"
|
||||||
|
this._size.setOnChange(() => this.sizeChanged());
|
||||||
this.sizeChanged();
|
this.sizeChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,23 +42,21 @@ export default abstract class CanvasNode extends GameNode implements Region {
|
||||||
|
|
||||||
set scale(scale: Vec2){
|
set scale(scale: Vec2){
|
||||||
this._scale = scale;
|
this._scale = scale;
|
||||||
this._scale.setOnChange(this.scaleChanged);
|
// Enter as a lambda to bind "this"
|
||||||
|
this._scale.setOnChange(() => this.scaleChanged());
|
||||||
this.scaleChanged();
|
this.scaleChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected positionChanged(): void {
|
||||||
protected positionChanged = (): void => {
|
super.positionChanged();
|
||||||
if(this.hasPhysics){
|
|
||||||
this.collisionShape.center = this.position;
|
|
||||||
}
|
|
||||||
this.updateBoundary();
|
this.updateBoundary();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected sizeChanged = (): void => {
|
protected sizeChanged(): void {
|
||||||
this.updateBoundary();
|
this.updateBoundary();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected scaleChanged = (): void => {
|
protected scaleChanged(): void {
|
||||||
this.updateBoundary();
|
this.updateBoundary();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ export default abstract class GameNode implements Positioned, Unique, Updateable
|
||||||
constructor(){
|
constructor(){
|
||||||
this.input = InputReceiver.getInstance();
|
this.input = InputReceiver.getInstance();
|
||||||
this._position = new Vec2(0, 0);
|
this._position = new Vec2(0, 0);
|
||||||
this._position.setOnChange(this.positionChanged);
|
this._position.setOnChange(() => this.positionChanged());
|
||||||
this.receiver = new Receiver();
|
this.receiver = new Receiver();
|
||||||
this.emitter = new Emitter();
|
this.emitter = new Emitter();
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,7 @@ export default abstract class GameNode implements Positioned, Unique, Updateable
|
||||||
|
|
||||||
set position(pos: Vec2) {
|
set position(pos: Vec2) {
|
||||||
this._position = pos;
|
this._position = pos;
|
||||||
this._position.setOnChange(this.positionChanged);
|
this._position.setOnChange(() => this.positionChanged());
|
||||||
this.positionChanged();
|
this.positionChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -220,8 +220,7 @@ export default abstract class GameNode implements Positioned, Unique, Updateable
|
||||||
/**
|
/**
|
||||||
* Called if the position vector is modified or replaced
|
* Called if the position vector is modified or replaced
|
||||||
*/
|
*/
|
||||||
// TODO - For some reason this isn't recognized in the child class
|
protected positionChanged(): void {
|
||||||
protected positionChanged = (): void => {
|
|
||||||
if(this.hasPhysics){
|
if(this.hasPhysics){
|
||||||
this.collisionShape.center = this.position;
|
this.collisionShape.center = this.position;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,18 +5,13 @@ import Vec2 from "../DataTypes/Vec2";
|
||||||
/**
|
/**
|
||||||
* The representation of a UIElement - the parent class of things like buttons
|
* The representation of a UIElement - the parent class of things like buttons
|
||||||
*/
|
*/
|
||||||
export default class UIElement extends CanvasNode {
|
export default abstract class UIElement extends CanvasNode {
|
||||||
// Style attributes
|
// Style attributes
|
||||||
protected textColor: Color;
|
|
||||||
protected backgroundColor: Color;
|
protected backgroundColor: Color;
|
||||||
protected borderColor: Color;
|
protected borderColor: Color;
|
||||||
protected text: string;
|
|
||||||
protected font: string;
|
|
||||||
protected fontSize: number;
|
|
||||||
protected hAlign: string;
|
|
||||||
protected vAlign: string;
|
|
||||||
protected borderRadius: number;
|
protected borderRadius: number;
|
||||||
protected borderWidth: number;
|
protected borderWidth: number;
|
||||||
|
protected padding: Vec2;
|
||||||
|
|
||||||
// EventAttributes
|
// EventAttributes
|
||||||
onClick: Function;
|
onClick: Function;
|
||||||
|
@ -35,16 +30,11 @@ export default class UIElement extends CanvasNode {
|
||||||
super();
|
super();
|
||||||
this.position = position;
|
this.position = position;
|
||||||
|
|
||||||
this.textColor = new Color(0, 0, 0, 1);
|
|
||||||
this.backgroundColor = new Color(0, 0, 0, 0);
|
this.backgroundColor = new Color(0, 0, 0, 0);
|
||||||
this.borderColor = new Color(0, 0, 0, 0);
|
this.borderColor = new Color(0, 0, 0, 0);
|
||||||
this.text = "";
|
|
||||||
this.font = "Arial";
|
|
||||||
this.fontSize = 30;
|
|
||||||
this.hAlign = "center";
|
|
||||||
this.vAlign = "center";
|
|
||||||
this.borderRadius = 5;
|
this.borderRadius = 5;
|
||||||
this.borderWidth = 1;
|
this.borderWidth = 1;
|
||||||
|
this.padding = Vec2.ZERO;
|
||||||
|
|
||||||
this.onClick = null;
|
this.onClick = null;
|
||||||
this.onClickEventId = null;
|
this.onClickEventId = null;
|
||||||
|
@ -60,16 +50,12 @@ export default class UIElement extends CanvasNode {
|
||||||
this.isEntered = false;
|
this.isEntered = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
setText(text: string): void {
|
|
||||||
this.text = text;
|
|
||||||
}
|
|
||||||
|
|
||||||
setBackgroundColor(color: Color): void {
|
setBackgroundColor(color: Color): void {
|
||||||
this.backgroundColor = color;
|
this.backgroundColor = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
setTextColor(color: Color): void {
|
setPadding(padding: Vec2): void {
|
||||||
this.textColor = color;
|
this.padding.copy(padding);
|
||||||
}
|
}
|
||||||
|
|
||||||
update(deltaT: number): void {
|
update(deltaT: number): void {
|
||||||
|
@ -126,36 +112,6 @@ export default class UIElement extends CanvasNode {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculate the offset of the text - this is useful for rendering text with different alignments
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
protected calculateOffset(ctx: CanvasRenderingContext2D): Vec2 {
|
|
||||||
let textWidth = ctx.measureText(this.text).width;
|
|
||||||
|
|
||||||
let offset = new Vec2(0, 0);
|
|
||||||
|
|
||||||
let hDiff = this.size.x - textWidth;
|
|
||||||
if(this.hAlign === "center"){
|
|
||||||
offset.x = hDiff/2;
|
|
||||||
} else if (this.hAlign === "right"){
|
|
||||||
offset.x = hDiff;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.vAlign === "top"){
|
|
||||||
ctx.textBaseline = "top";
|
|
||||||
offset.y = 0;
|
|
||||||
} else if (this.vAlign === "bottom"){
|
|
||||||
ctx.textBaseline = "bottom";
|
|
||||||
offset.y = this.size.y;
|
|
||||||
} else {
|
|
||||||
ctx.textBaseline = "middle";
|
|
||||||
offset.y = this.size.y/2;
|
|
||||||
}
|
|
||||||
|
|
||||||
return offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Overridable method for calculating background color - useful for elements that want to be colored on different after certain events
|
* Overridable method for calculating background color - useful for elements that want to be colored on different after certain events
|
||||||
*/
|
*/
|
||||||
|
@ -169,42 +125,4 @@ export default class UIElement extends CanvasNode {
|
||||||
protected calculateBorderColor(): string {
|
protected calculateBorderColor(): string {
|
||||||
return this.borderColor.toStringRGBA();
|
return this.borderColor.toStringRGBA();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Overridable method for calculating text color - useful for elements that want to be colored on different after certain events
|
|
||||||
*/
|
|
||||||
protected calculateTextColor(): string {
|
|
||||||
return this.textColor.toStringRGBA();
|
|
||||||
}
|
|
||||||
|
|
||||||
render(ctx: CanvasRenderingContext2D): void {
|
|
||||||
// Grab the global alpha so we can adjust it for this render
|
|
||||||
let previousAlpha = ctx.globalAlpha;
|
|
||||||
ctx.globalAlpha = this.getLayer().getAlpha();
|
|
||||||
|
|
||||||
let origin = this.scene.getViewTranslation(this);
|
|
||||||
|
|
||||||
ctx.font = this.fontSize + "px " + this.font;
|
|
||||||
let offset = this.calculateOffset(ctx);
|
|
||||||
|
|
||||||
// Stroke and fill a rounded rect and give it text
|
|
||||||
ctx.fillStyle = this.calculateBackgroundColor();
|
|
||||||
ctx.fillRoundedRect(this.position.x - origin.x - this.size.x/2, this.position.y - origin.y - this.size.y/2,
|
|
||||||
this.size.x, this.size.y, this.borderRadius);
|
|
||||||
|
|
||||||
ctx.strokeStyle = this.calculateBorderColor();
|
|
||||||
ctx.lineWidth = this.borderWidth;
|
|
||||||
ctx.strokeRoundedRect(this.position.x - origin.x - this.size.x/2, this.position.y - origin.y - this.size.y/2,
|
|
||||||
this.size.x, this.size.y, this.borderRadius);
|
|
||||||
|
|
||||||
ctx.fillStyle = this.calculateTextColor();
|
|
||||||
ctx.fillText(this.text, this.position.x + offset.x - origin.x - this.size.x/2, this.position.y + offset.y - origin.y - this.size.y/2);
|
|
||||||
|
|
||||||
ctx.globalAlpha = previousAlpha;
|
|
||||||
|
|
||||||
ctx.lineWidth = 4;
|
|
||||||
ctx.strokeStyle = "#00FF00"
|
|
||||||
let b = this.boundary;
|
|
||||||
ctx.strokeRect(b.x - b.hw - origin.x, b.y - b.hh - origin.y, b.hw*2, b.hh*2);
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1,12 +1,11 @@
|
||||||
import UIElement from "../UIElement";
|
import Label from "./Label";
|
||||||
import Color from "../../Utils/Color";
|
import Color from "../../Utils/Color";
|
||||||
import Vec2 from "../../DataTypes/Vec2";
|
import Vec2 from "../../DataTypes/Vec2";
|
||||||
|
|
||||||
export default class Button extends UIElement{
|
export default class Button extends Label {
|
||||||
|
|
||||||
constructor(position: Vec2, text: string){
|
constructor(position: Vec2, text: string){
|
||||||
super(position);
|
super(position, text);
|
||||||
this.text = text;
|
|
||||||
|
|
||||||
this.backgroundColor = new Color(150, 75, 203);
|
this.backgroundColor = new Color(150, 75, 203);
|
||||||
this.borderColor = new Color(41, 46, 30);
|
this.borderColor = new Color(41, 46, 30);
|
||||||
|
|
|
@ -1,9 +1,130 @@
|
||||||
import Vec2 from "../../DataTypes/Vec2";
|
import Vec2 from "../../DataTypes/Vec2";
|
||||||
|
import Color from "../../Utils/Color";
|
||||||
import UIElement from "../UIElement";
|
import UIElement from "../UIElement";
|
||||||
|
|
||||||
export default class Label extends UIElement{
|
export default class Label extends UIElement{
|
||||||
|
protected textColor: Color;
|
||||||
|
protected text: string;
|
||||||
|
protected font: string;
|
||||||
|
protected fontSize: number;
|
||||||
|
protected hAlign: string;
|
||||||
|
protected vAlign: string;
|
||||||
|
|
||||||
|
/** A flag for if the width of the text has been measured on the canvas for auto width assignment */
|
||||||
|
protected sizeAssigned: boolean;
|
||||||
|
|
||||||
constructor(position: Vec2, text: string){
|
constructor(position: Vec2, text: string){
|
||||||
super(position);
|
super(position);
|
||||||
this.text = text;
|
this.text = text;
|
||||||
|
this.textColor = new Color(0, 0, 0, 1);
|
||||||
|
this.font = "Arial";
|
||||||
|
this.fontSize = 30;
|
||||||
|
this.hAlign = "center";
|
||||||
|
this.vAlign = "center";
|
||||||
|
|
||||||
|
this.sizeAssigned = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
setText(text: string): void {
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
setTextColor(color: Color): void {
|
||||||
|
this.textColor = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overridable method for calculating text color - useful for elements that want to be colored on different after certain events
|
||||||
|
*/
|
||||||
|
protected calculateTextColor(): string {
|
||||||
|
return this.textColor.toStringRGBA();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected calculateTextWidth(ctx: CanvasRenderingContext2D): number {
|
||||||
|
ctx.font = this.fontSize + "px " + this.font;
|
||||||
|
return ctx.measureText(this.text).width;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculate the offset of the text - this is useful for rendering text with different alignments
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected calculateTextOffset(ctx: CanvasRenderingContext2D): Vec2 {
|
||||||
|
let textWidth = this.calculateTextWidth(ctx);
|
||||||
|
|
||||||
|
let offset = new Vec2(0, 0);
|
||||||
|
|
||||||
|
let hDiff = this.size.x - textWidth;
|
||||||
|
if(this.hAlign === "center"){
|
||||||
|
offset.x = hDiff/2;
|
||||||
|
} else if (this.hAlign === "right"){
|
||||||
|
offset.x = hDiff;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.vAlign === "top"){
|
||||||
|
ctx.textBaseline = "top";
|
||||||
|
offset.y = 0;
|
||||||
|
} else if (this.vAlign === "bottom"){
|
||||||
|
ctx.textBaseline = "bottom";
|
||||||
|
offset.y = this.size.y;
|
||||||
|
} else {
|
||||||
|
ctx.textBaseline = "middle";
|
||||||
|
offset.y = this.size.y/2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected sizeChanged(): void {
|
||||||
|
super.sizeChanged();
|
||||||
|
this.sizeAssigned = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected autoSize(ctx: CanvasRenderingContext2D){
|
||||||
|
let width = this.calculateTextWidth(ctx);
|
||||||
|
let height = this.fontSize;
|
||||||
|
this.size.set(width + this.padding.x*2, height + this.padding.y*2);
|
||||||
|
this.sizeAssigned = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** On the next render, size this element to it's current text using its current font size */
|
||||||
|
sizeToText(): void {
|
||||||
|
this.sizeAssigned = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
render(ctx: CanvasRenderingContext2D): void {
|
||||||
|
// If the size is unassigned (by the user or automatically) assign it
|
||||||
|
if(!this.sizeAssigned){
|
||||||
|
this.autoSize(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Grab the global alpha so we can adjust it for this render
|
||||||
|
let previousAlpha = ctx.globalAlpha;
|
||||||
|
ctx.globalAlpha = this.getLayer().getAlpha();
|
||||||
|
|
||||||
|
let origin = this.scene.getViewTranslation(this);
|
||||||
|
|
||||||
|
ctx.font = this.fontSize + "px " + this.font;
|
||||||
|
let offset = this.calculateTextOffset(ctx);
|
||||||
|
|
||||||
|
// Stroke and fill a rounded rect and give it text
|
||||||
|
ctx.fillStyle = this.calculateBackgroundColor();
|
||||||
|
ctx.fillRoundedRect(this.position.x - origin.x - this.size.x/2, this.position.y - origin.y - this.size.y/2,
|
||||||
|
this.size.x, this.size.y, this.borderRadius);
|
||||||
|
|
||||||
|
ctx.strokeStyle = this.calculateBorderColor();
|
||||||
|
ctx.lineWidth = this.borderWidth;
|
||||||
|
ctx.strokeRoundedRect(this.position.x - origin.x - this.size.x/2, this.position.y - origin.y - this.size.y/2,
|
||||||
|
this.size.x, this.size.y, this.borderRadius);
|
||||||
|
|
||||||
|
ctx.fillStyle = this.calculateTextColor();
|
||||||
|
ctx.fillText(this.text, this.position.x + offset.x - origin.x - this.size.x/2, this.position.y + offset.y - origin.y - this.size.y/2);
|
||||||
|
|
||||||
|
ctx.globalAlpha = previousAlpha;
|
||||||
|
|
||||||
|
ctx.lineWidth = 4;
|
||||||
|
ctx.strokeStyle = "#00FF00"
|
||||||
|
let b = this.boundary;
|
||||||
|
ctx.strokeRect(b.x - b.hw - origin.x, b.y - b.hh - origin.y, b.hw*2, b.hh*2);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -13,6 +13,7 @@ export default class Viewport {
|
||||||
private view: AABB;
|
private view: AABB;
|
||||||
private boundary: AABB;
|
private boundary: AABB;
|
||||||
private following: GameNode;
|
private following: GameNode;
|
||||||
|
private focus: Vec2;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A queue of previous positions of what this viewport is following. Used for smoothing viewport movement
|
* A queue of previous positions of what this viewport is following. Used for smoothing viewport movement
|
||||||
|
@ -35,6 +36,7 @@ export default class Viewport {
|
||||||
this.smoothingFactor = 10;
|
this.smoothingFactor = 10;
|
||||||
this.scrollZoomEnabled = false;
|
this.scrollZoomEnabled = false;
|
||||||
this.canvasSize = Vec2.ZERO;
|
this.canvasSize = Vec2.ZERO;
|
||||||
|
this.focus = Vec2.ZERO;
|
||||||
}
|
}
|
||||||
|
|
||||||
enableZoom(): void {
|
enableZoom(): void {
|
||||||
|
@ -131,6 +133,14 @@ export default class Viewport {
|
||||||
this.smoothingFactor = smoothingFactor;
|
this.smoothingFactor = smoothingFactor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tells the viewport to focus on a point. Overidden by "following".
|
||||||
|
* @param focus
|
||||||
|
*/
|
||||||
|
setFocus(focus: Vec2): void {
|
||||||
|
this.focus.copy(focus);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the CanvasNode is inside of the viewport
|
* Returns true if the CanvasNode is inside of the viewport
|
||||||
* @param node
|
* @param node
|
||||||
|
@ -223,6 +233,7 @@ export default class Viewport {
|
||||||
|
|
||||||
this.view.center.copy(pos);
|
this.view.center.copy(pos);
|
||||||
} else {
|
} else {
|
||||||
|
this.lastPositions.enqueue(this.focus);
|
||||||
if(this.lastPositions.getSize() > this.smoothingFactor){
|
if(this.lastPositions.getSize() > this.smoothingFactor){
|
||||||
this.lastPositions.dequeue();
|
this.lastPositions.dequeue();
|
||||||
}
|
}
|
||||||
|
|
37
src/_DemoClasses/Mario/MainMenu.ts
Normal file
37
src/_DemoClasses/Mario/MainMenu.ts
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
import Vec2 from "../../DataTypes/Vec2";
|
||||||
|
import Debug from "../../Debug/Debug";
|
||||||
|
import InputHandler from "../../Input/InputHandler";
|
||||||
|
import InputReceiver from "../../Input/InputReceiver";
|
||||||
|
import { GraphicType } from "../../Nodes/Graphics/GraphicTypes";
|
||||||
|
import Button from "../../Nodes/UIElements/Button";
|
||||||
|
import { UIElementType } from "../../Nodes/UIElements/UIElementTypes";
|
||||||
|
import Scene from "../../Scene/Scene";
|
||||||
|
import Color from "../../Utils/Color";
|
||||||
|
|
||||||
|
export default class MainMenu extends Scene {
|
||||||
|
|
||||||
|
playBtn: Button;
|
||||||
|
|
||||||
|
loadScene(): void {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
startScene(): void {
|
||||||
|
this.addUILayer("Main");
|
||||||
|
|
||||||
|
let size = this.viewport.getHalfSize();
|
||||||
|
this.viewport.setFocus(size);
|
||||||
|
|
||||||
|
this.playBtn = <Button>this.add.uiElement(UIElementType.BUTTON, "Main", {position: new Vec2(size.x, size.y), text: "Play Game"});
|
||||||
|
this.playBtn.setBackgroundColor(Color.GREEN);
|
||||||
|
this.playBtn.setPadding(new Vec2(50, 10));
|
||||||
|
this.playBtn.onClick = () => {
|
||||||
|
console.log("Play");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updateScene(): void {
|
||||||
|
Debug.log("mp", InputReceiver.getInstance().getMousePosition().toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import GameLoop from "./Loop/GameLoop";
|
import GameLoop from "./Loop/GameLoop";
|
||||||
import {} from "./index";
|
import {} from "./index";
|
||||||
|
import MainMenu from "./_DemoClasses/Mario/MainMenu";
|
||||||
import Level1 from "./_DemoClasses/Mario/Level1";
|
import Level1 from "./_DemoClasses/Mario/Level1";
|
||||||
|
|
||||||
function main(){
|
function main(){
|
||||||
|
@ -26,7 +27,7 @@ function main(){
|
||||||
}
|
}
|
||||||
|
|
||||||
let sm = game.getSceneManager();
|
let sm = game.getSceneManager();
|
||||||
sm.addScene(Level1, sceneOptions);
|
sm.addScene(MainMenu, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
CanvasRenderingContext2D.prototype.roundedRect = function(x: number, y: number, w: number, h: number, r: number): void {
|
CanvasRenderingContext2D.prototype.roundedRect = function(x: number, y: number, w: number, h: number, r: number): void {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user