added game font rendering using etxt to player hud, fixed current level
This commit is contained in:
		
							parent
							
								
									ae8058e052
								
							
						
					
					
						commit
						a2ed7782b2
					
				| @ -1,4 +1,4 @@ | ||||
| Description: test obstacles | ||||
| Description: open the door | ||||
| MinMoves: 2 | ||||
| Background: background-lila | ||||
|                      | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| Description: find the fruit | ||||
| Description: collect all yellow dots | ||||
| MinMoves: 7 | ||||
| Background: background-lila | ||||
|                      | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| Description: win | ||||
| Description: some enemies can be moved | ||||
| MinMoves: 5 | ||||
| Background: background-lila | ||||
|                      | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| Description: use multiple players | ||||
| Description: the more players the better | ||||
| MinMoves: 4 | ||||
| Background: background-lila | ||||
|                      | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| Description: space | ||||
| Description: don't fall off the world | ||||
| MinMoves: 3 | ||||
| Background: background-lila | ||||
|                      | ||||
|  | ||||
| @ -201,6 +201,7 @@ type TileRegistry map[byte]*Tile | ||||
| // Each level data must be 20 chars wide (= 640 px width) and 15 chars | ||||
| // high (=480 px height). | ||||
| type RawLevel struct { | ||||
| 	Number      int | ||||
| 	Name        string | ||||
| 	Description string | ||||
| 	Background  *ebiten.Image | ||||
| @ -249,10 +250,11 @@ func LoadLevels(dir string) []RawLevel { | ||||
| 		return entries[i].Name() < entries[j].Name() | ||||
| 	}) | ||||
| 
 | ||||
| 	for _, levelfile := range entries { | ||||
| 	for idx, levelfile := range entries { | ||||
| 		if levelfile.Type().IsRegular() && strings.Contains(levelfile.Name(), ".lvl") { | ||||
| 			path := filepath.Join("assets", dir) | ||||
| 			level := ParseRawLevel(path, levelfile) | ||||
| 			level.Number = idx | ||||
| 
 | ||||
| 			levels = append(levels, level) | ||||
| 
 | ||||
| @ -271,6 +273,7 @@ func ParseRawLevel(dir string, levelfile fs.DirEntry) RawLevel { | ||||
| 	defer fd.Close() | ||||
| 
 | ||||
| 	name := strings.TrimSuffix(levelfile.Name(), ".lvl") | ||||
| 	name = name[3:] | ||||
| 	des := "" | ||||
| 	background := &ebiten.Image{} | ||||
| 	data := []byte{} | ||||
|  | ||||
| @ -29,6 +29,7 @@ func NewLevelScene(game *Game, startlevel int) Scene { | ||||
| func (scene *LevelScene) GenerateLevels(game *Game) { | ||||
| 	min := []int{} | ||||
| 	for _, level := range assets.Levels { | ||||
| 		level := level | ||||
| 		scene.Levels = append(scene.Levels, NewLevel(game, 32, &level)) | ||||
| 		min = append(min, level.MinMoves) | ||||
| 	} | ||||
|  | ||||
| @ -91,7 +91,7 @@ func (scene *NextlevelScene) SetupUILast() { | ||||
| 
 | ||||
| 	rowContainer := gameui.NewRowContainer(false) | ||||
| 	label1text := "Last level, congratulations!" | ||||
| 	label2text := fmt.Sprintf("Your final score: %d", observer.GetLevelScore()) | ||||
| 	label2text := fmt.Sprintf("Your final score: %d", observer.GetScore()) | ||||
| 
 | ||||
| 	buttonMenu := gameui.NewMenuButton("Menu", *assets.FontRenderer.FontNormal, | ||||
| 		func(args *widget.ButtonClickedEventArgs) { | ||||
|  | ||||
| @ -134,7 +134,7 @@ func (scene *SelectScene) SetupUI() { | ||||
| 		}), | ||||
| 		// This required function returns the string displayed in the list | ||||
| 		widget.ListOpts.EntryLabelFunc(func(e interface{}) string { | ||||
| 			return e.(LevelEntry).Name | ||||
| 			return fmt.Sprintf("%02d %s", e.(LevelEntry).Id, e.(LevelEntry).Name) | ||||
| 		}), | ||||
| 		// Padding for each entry | ||||
| 		widget.ListOpts.EntryTextPadding(widget.NewInsetsSimple(5)), | ||||
|  | ||||
| @ -2,11 +2,11 @@ package systems | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"image/color" | ||||
| 	"openquell/assets" | ||||
| 	"openquell/observers" | ||||
| 
 | ||||
| 	"github.com/hajimehoshi/ebiten/v2" | ||||
| 	"github.com/hajimehoshi/ebiten/v2/ebitenutil" | ||||
| 	"github.com/mlange-42/arche/ecs" | ||||
| ) | ||||
| 
 | ||||
| @ -34,13 +34,33 @@ func (system *HudSystem) Update() error { | ||||
| func (system *HudSystem) Draw(screen *ebiten.Image) { | ||||
| 	op := &ebiten.DrawImageOptions{} | ||||
| 	screen.DrawImage(assets.Assets["hud"], op) | ||||
| 	ebitenutil.DebugPrintAt(screen, fmt.Sprintf( | ||||
| 		"FPS: %02.f  TPS: %02.f      Level %s: %s", | ||||
| 		ebiten.ActualFPS(), | ||||
| 		ebiten.ActualTPS(), | ||||
| 		system.Plan.Name, | ||||
| 		system.Plan.Description, | ||||
| 	), 10, 10) | ||||
| 	/* | ||||
| 		ebitenutil.DebugPrintAt(screen, fmt.Sprintf( | ||||
| 			"FPS: %02.f  TPS: %02.f      Level %s: %s", | ||||
| 			ebiten.ActualFPS(), | ||||
| 			ebiten.ActualTPS(), | ||||
| 			system.Plan.Name, | ||||
| 			system.Plan.Description, | ||||
| 		), 10, 10) | ||||
| 	*/ | ||||
| 
 | ||||
| 	ebitenutil.DebugPrintAt(screen, fmt.Sprintf("Score: %d", system.Observer.GetScore()), 10, 455) | ||||
| 	score := fmt.Sprintf("Score: %d", system.Observer.GetScore()) | ||||
| 	level := fmt.Sprintf("Level %d %s", system.Plan.Number, system.Plan.Name) | ||||
| 
 | ||||
| 	assets.FontRenderer.Renderer.SetSizePx(20) | ||||
| 	assets.FontRenderer.Renderer.SetTarget(screen) | ||||
| 
 | ||||
| 	system.Print(score, 515, 22) | ||||
| 	system.Print(system.Plan.Description, 10, 470) | ||||
| 	system.Print(level, 10, 22) | ||||
| } | ||||
| 
 | ||||
| func (system *HudSystem) Print(text string, x, y int) { | ||||
| 	fg := &color.RGBA{0x4c, 0, 0xff, 255} | ||||
| 	bg := &color.RGBA{0x9a, 0x6f, 0xff, 255} | ||||
| 
 | ||||
| 	assets.FontRenderer.Renderer.SetColor(bg) | ||||
| 	assets.FontRenderer.Renderer.Draw(text, x, y) | ||||
| 	assets.FontRenderer.Renderer.SetColor(fg) | ||||
| 	assets.FontRenderer.Renderer.Draw(text, x-1, y-1) | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user