func (game *Game) Setup(w *engi.World) { engi.SetBg(0x2d3739) // Add all of the systems w.AddSystem(&engi.RenderSystem{}) w.AddSystem(&engi.CollisionSystem{}) w.AddSystem(&DeathSystem{}) w.AddSystem(&FallingSystem{}) w.AddSystem(&ControlSystem{}) w.AddSystem(&RockSpawnSystem{}) // Create new entity subscribed to all the systems! guy := engi.NewEntity([]string{"RenderSystem", "ControlSystem", "RockSpawnSystem", "CollisionSystem", "DeathSystem"}) texture := engi.Files.Image("icon.png") render := engi.NewRenderComponent(texture, engi.Point{4, 4}, "guy") // Tell the collision system that this player is solid collision := &engi.CollisionComponent{Solid: true, Main: true} width := texture.Width() * render.Scale.X height := texture.Height() * render.Scale.Y space := &engi.SpaceComponent{engi.Point{(engi.Width() - width) / 2, (engi.Height() - height) / 2}, width, height} guy.AddComponent(render) guy.AddComponent(space) guy.AddComponent(collision) w.AddEntity(guy) }
func (pong *PongGame) Setup(w *ecs.World) { engi.SetBg(0x2d3739) w.AddSystem(&engi.RenderSystem{}) w.AddSystem(&engi.CollisionSystem{}) w.AddSystem(&SpeedSystem{}) w.AddSystem(&ControlSystem{}) w.AddSystem(&BallSystem{}) w.AddSystem(&ScoreSystem{}) basicFont = (&engi.Font{URL: "Roboto-Regular.ttf", Size: 32, FG: color.NRGBA{255, 255, 255, 255}}) if err := basicFont.CreatePreloaded(); err != nil { log.Fatalln("Could not load font:", err) } ball := ecs.NewEntity([]string{"RenderSystem", "CollisionSystem", "SpeedSystem", "BallSystem"}) ballTexture := engi.Files.Image("ball.png") ballRender := engi.NewRenderComponent(ballTexture, engi.Point{2, 2}, "ball") ballSpace := &engi.SpaceComponent{engi.Point{(engi.Width() - ballTexture.Width()) / 2, (engi.Height() - ballTexture.Height()) / 2}, ballTexture.Width() * ballRender.Scale().X, ballTexture.Height() * ballRender.Scale().Y} ballCollision := &engi.CollisionComponent{Main: true, Solid: true} ballSpeed := &SpeedComponent{} ballSpeed.Point = engi.Point{300, 100} ball.AddComponent(ballRender) ball.AddComponent(ballSpace) ball.AddComponent(ballCollision) ball.AddComponent(ballSpeed) w.AddEntity(ball) score := ecs.NewEntity([]string{"RenderSystem", "ScoreSystem"}) scoreRender := engi.NewRenderComponent(basicFont.Render(" "), engi.Point{1, 1}, "YOLO <3") scoreSpace := &engi.SpaceComponent{engi.Point{100, 100}, 100, 100} score.AddComponent(scoreRender) score.AddComponent(scoreSpace) w.AddEntity(score) schemes := []string{"WASD", ""} for i := 0; i < 2; i++ { paddle := ecs.NewEntity([]string{"RenderSystem", "CollisionSystem", "ControlSystem"}) paddleTexture := engi.Files.Image("paddle.png") paddleRender := engi.NewRenderComponent(paddleTexture, engi.Point{2, 2}, "paddle") x := float32(0) if i != 0 { x = 800 - 16 } paddleSpace := &engi.SpaceComponent{engi.Point{x, (engi.Height() - paddleTexture.Height()) / 2}, paddleRender.Scale().X * paddleTexture.Width(), paddleRender.Scale().Y * paddleTexture.Height()} paddleControl := &ControlComponent{schemes[i]} paddleCollision := &engi.CollisionComponent{Main: false, Solid: true} paddle.AddComponent(paddleRender) paddle.AddComponent(paddleSpace) paddle.AddComponent(paddleControl) paddle.AddComponent(paddleCollision) w.AddEntity(paddle) } }
func (pong *PongGame) Setup(w *engi.World) { engi.SetBg(0x2d3739) w.AddSystem(&engi.RenderSystem{}) w.AddSystem(&engi.CollisionSystem{}) w.AddSystem(&SpeedSystem{}) w.AddSystem(&ControlSystem{}) w.AddSystem(&BallSystem{}) w.AddSystem(&ScoreSystem{}) ball := engi.NewEntity([]string{"RenderSystem", "CollisionSystem", "SpeedSystem", "BallSystem"}) ballTexture := engi.Files.Image("ball.png") ballRender := engi.NewRenderComponent(ballTexture, engi.Point{2, 2}, "ball") ballSpace := &engi.SpaceComponent{engi.Point{(engi.Width() - ballTexture.Width()) / 2, (engi.Height() - ballTexture.Height()) / 2}, ballTexture.Width() * ballRender.Scale.X, ballTexture.Height() * ballRender.Scale.Y} ballCollision := &engi.CollisionComponent{Main: true, Solid: true} ballSpeed := &SpeedComponent{} ballSpeed.Point = engi.Point{300, 100} ball.AddComponent(ballRender) ball.AddComponent(ballSpace) ball.AddComponent(ballCollision) ball.AddComponent(ballSpeed) w.AddEntity(ball) score := engi.NewEntity([]string{"RenderSystem", "ScoreSystem"}) scoreRender := engi.NewRenderComponent(basicFont.Render(" "), engi.Point{1, 1}, "YOLO <3") scoreSpace := &engi.SpaceComponent{engi.Point{100, 100}, 100, 100} score.AddComponent(scoreRender) score.AddComponent(scoreSpace) w.AddEntity(score) schemes := []string{"WASD", ""} for i := 0; i < 2; i++ { paddle := engi.NewEntity([]string{"RenderSystem", "CollisionSystem", "ControlSystem"}) paddleTexture := engi.Files.Image("paddle.png") paddleRender := engi.NewRenderComponent(paddleTexture, engi.Point{2, 2}, "paddle") x := float32(0) if i != 0 { x = 800 - 16 } paddleSpace := &engi.SpaceComponent{engi.Point{x, (engi.Height() - paddleTexture.Height()) / 2}, paddleRender.Scale.X * paddleTexture.Width(), paddleRender.Scale.Y * paddleTexture.Height()} paddleControl := &ControlComponent{schemes[i]} paddleCollision := &engi.CollisionComponent{Main: false, Solid: true} paddle.AddComponent(paddleRender) paddle.AddComponent(paddleSpace) paddle.AddComponent(paddleControl) paddle.AddComponent(paddleCollision) w.AddEntity(paddle) } }
func (game *GameWorld) Setup(w *ecs.World) { engi.SetBg(0x2d3739) w.AddSystem(&engi.RenderSystem{}) w.AddSystem(&HideSystem{}) guy := ecs.NewEntity([]string{"RenderSystem", "HideSystem"}) texture := engi.Files.Image("rock.png") render := engi.NewRenderComponent(texture, engi.Point{8, 8}, "guy") collision := &engi.CollisionComponent{Solid: true, Main: true} width := texture.Width() * render.Scale().X height := texture.Height() * render.Scale().Y space := &engi.SpaceComponent{engi.Point{(engi.Width() - width) / 2, (engi.Height() - height) / 2}, width, height} guy.AddComponent(render) guy.AddComponent(space) guy.AddComponent(collision) w.AddEntity(guy) }
func (game *RockScene) Setup(w *ecs.World) { engi.SetBg(0x2d3739) w.AddSystem(&engi.RenderSystem{}) w.AddSystem(&ScaleSystem{}) w.AddSystem(&SceneSwitcherSystem{NextScene: "IconScene", WaitTime: time.Second * 3}) guy := ecs.NewEntity([]string{"RenderSystem", "ScaleSystem"}) texture := engi.Files.Image("rock.png") render := engi.NewRenderComponent(texture, engi.Point{8, 8}, "rock") collision := &engi.CollisionComponent{Solid: true, Main: true} width := texture.Width() * render.Scale().X height := texture.Height() * render.Scale().Y space := &engi.SpaceComponent{engi.Point{(engi.Width() - width) / 2, (engi.Height() - height) / 2}, width, height} guy.AddComponent(render) guy.AddComponent(space) guy.AddComponent(collision) w.AddEntity(guy) }
func (m *Menu) openMenu() { m.menuFocus = 0 // Create the visual menu // - background backgroundWidth := engi.Width() backgroundHeight := engi.Height() menuBackground := helpers.GenerateSquare( MenuColorBackground, MenuColorBackground, backgroundWidth, backgroundHeight, 0, 0, engi.HUDGround, "AudioSystem", ) //menuBackground.AddComponent(&engi.UnpauseComponent{}) menuBackground.AddComponent(&engi.AudioComponent{File: "click_x.wav", Repeat: false, Background: true}) m.menuEntities = append(m.menuEntities, menuBackground) m.World.AddEntity(menuBackground) // - box menuWidth := (engi.Width() - 2*menuPadding) menuHeight := (engi.Height() - 2*menuPadding) menuEntity := helpers.GenerateSquare( MenuColorBox, MenuColorBox, menuWidth, menuHeight, menuPadding, menuPadding, engi.HUDGround+1, ) //menuEntity.AddComponent(&engi.UnpauseComponent{}) m.menuEntities = append(m.menuEntities, menuEntity) m.World.AddEntity(menuEntity) // - items - font itemFont := (&engi.Font{URL: "Roboto-Regular.ttf", Size: 64, FG: MenuColorItemForeground}) if err := itemFont.CreatePreloaded(); err != nil { log.Fatalln("Could not load font:", err) } labelFontScale := float32(36 / itemFont.Size) // - items - entities offsetY := float32(menuPadding + menuItemPadding) var itemList []*MenuItem if m.itemSelected == nil { itemList = m.items } else { itemList = m.itemSelected.SubItems } for itemID, item := range itemList { item.menuBackground = ecs.NewEntity([]string{"RenderSystem"}) if itemID == m.menuFocus { item.menuBackground.AddComponent(m.focusBackground) } else { item.menuBackground.AddComponent(m.defaultBackground) } item.menuBackground.AddComponent(&engi.SpaceComponent{ engi.Point{menuItemOffsetX, offsetY}, menuWidth - 2*menuItemPadding, menuItemHeight}) //item.menuBackground.AddComponent(&engi.UnpauseComponent{}) m.menuEntities = append(m.menuEntities, item.menuBackground) m.World.AddEntity(item.menuBackground) item.menuLabel = ecs.NewEntity([]string{"RenderSystem"}) menuItemLabelRender := &engi.RenderComponent{ Display: itemFont.Render(item.Text), Scale: engi.Point{labelFontScale, labelFontScale}, Transparency: 1, Color: color.RGBA{255, 255, 255, 255}, } menuItemLabelRender.SetPriority(engi.HUDGround + 3) item.menuLabel.AddComponent(menuItemLabelRender) item.menuLabel.AddComponent(&engi.SpaceComponent{ Position: engi.Point{ menuItemOffsetX + (menuItemHeight-float32(itemFont.Size)*labelFontScale)/2, offsetY + menuItemFontPadding + (menuItemHeight-float32(itemFont.Size)*labelFontScale)/2, }}) //item.menuLabel.AddComponent(&engi.UnpauseComponent{}) m.menuEntities = append(m.menuEntities, item.menuLabel) m.World.AddEntity(item.menuLabel) offsetY += menuItemHeight + menuItemPadding } m.menuActive = true }