fix wu line iface, pending opacity
This commit is contained in:
@@ -3,6 +3,7 @@ package ecs
|
||||
// ECS system by jcerise, github.com/jcerise/gogue
|
||||
|
||||
const TerrainRenderSystem = "levelrender"
|
||||
const UiRenderSystem = "uirender"
|
||||
|
||||
type System interface {
|
||||
Process()
|
||||
|
||||
36
engine/gamelog/messages.go
Normal file
36
engine/gamelog/messages.go
Normal file
@@ -0,0 +1,36 @@
|
||||
package gamelog
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
var Log = &GameLog{RedrawLogs: true}
|
||||
|
||||
type GameLog struct {
|
||||
Messages []Message
|
||||
MaxHeight int
|
||||
RedrawLogs bool
|
||||
}
|
||||
|
||||
type Message struct {
|
||||
GameTS uint64
|
||||
RealTS time.Time
|
||||
Message string
|
||||
}
|
||||
|
||||
func (gl *GameLog) GetMaxHeight() int {
|
||||
return gl.MaxHeight
|
||||
}
|
||||
|
||||
func (gl *GameLog) SetMaxHeight(i int) {
|
||||
gl.MaxHeight = i
|
||||
}
|
||||
|
||||
func (gl *GameLog) Msg(msg string) {
|
||||
gl.Messages = append(gl.Messages, Message{
|
||||
GameTS: 0, //fixme
|
||||
RealTS: time.Now(),
|
||||
Message: msg,
|
||||
})
|
||||
gl.RedrawLogs = true
|
||||
}
|
||||
@@ -1,19 +1,18 @@
|
||||
package mapgens
|
||||
|
||||
import (
|
||||
"context"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/gamemap"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/types"
|
||||
"lab.zaar.be/thefish/alchemyst-go/util"
|
||||
"lab.zaar.be/thefish/alchemyst-go/util/delaunay"
|
||||
)
|
||||
|
||||
func DelaunayPureGen(ctx context.Context, l *gamemap.Level) (*gamemap.Level, []gamemap.Room) {
|
||||
func DelaunayPureGen(l *gamemap.Level) (*gamemap.Level, []gamemap.Room) {
|
||||
|
||||
rng := util.NewRNG()
|
||||
|
||||
//fill with walls
|
||||
for i := 0; i < l.W; i ++ {
|
||||
for i := 0; i < l.W; i++ {
|
||||
for j := 0; j < l.H; j++ {
|
||||
l.SetTileByXY(i, j, gamemap.NewWall())
|
||||
}
|
||||
@@ -33,6 +32,3 @@ func DelaunayPureGen(ctx context.Context, l *gamemap.Level) (*gamemap.Level, []g
|
||||
|
||||
return l, rooms
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package items
|
||||
import (
|
||||
"fmt"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/ecs"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/gamelog"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/types"
|
||||
)
|
||||
|
||||
@@ -52,6 +53,7 @@ func (c Carried) Pickup(who, what ecs.Entity) error {
|
||||
//remove coords instead (does not exist on map anymore)
|
||||
Controller.RemoveComponent(what, ecs.CoordsComponent)
|
||||
bp.items = append(bp.items, what)
|
||||
gamelog.Log.Msg(fmt.Sprintf("Picked up %s.", Controller.GetComponent(what, ecs.NamedComponent).(Named).GetName()))
|
||||
//fuck that, we need to update constantly
|
||||
Controller.UpdateComponent(who, ecs.BackpackComponent, bp)
|
||||
return nil
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package movement
|
||||
|
||||
import (
|
||||
"lab.zaar.be/thefish/alchemyst-go/effects"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/ecs"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/gamemap"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/gamestate"
|
||||
@@ -10,7 +11,7 @@ import (
|
||||
|
||||
type Moveable struct {
|
||||
Controller *ecs.Controller
|
||||
Level *gamemap.Level
|
||||
Level *gamemap.Level
|
||||
}
|
||||
|
||||
func (mov Moveable) Type() string {
|
||||
@@ -21,12 +22,12 @@ func (mov Moveable) Walk() {
|
||||
|
||||
}
|
||||
|
||||
//fixme change it to WhatsOnTile
|
||||
// fixme change it to WhatsOnTile
|
||||
func (mov Moveable) IsBlocked(c types.Coords) bool {
|
||||
if mov.Level.GetTile(c).BlocksPass {
|
||||
return true
|
||||
}
|
||||
list := mov.Controller.GetEntitiesWithComponent(ecs.MobComponent)
|
||||
list := mov.Controller.GetEntitiesWithComponent(ecs.MobComponent)
|
||||
for idx := range list {
|
||||
coords := mov.Controller.GetComponent(list[idx], ecs.CoordsComponent)
|
||||
if coords == nil {
|
||||
@@ -59,7 +60,7 @@ func Walk(entity ecs.Entity, state *gamestate.GameState, dx, dy int) {
|
||||
return
|
||||
}
|
||||
if !movable.(Moveable).IsBlocked(newCoords) ||
|
||||
controller.GetComponent(entity, "pass_wall") != nil {
|
||||
controller.GetComponent(entity, effects.BuffPassWall) != nil {
|
||||
controller.UpdateComponent(state.Player, ecs.CoordsComponent, newCoords)
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/ecs/systems"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/fov"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/fov/precomputed_shade"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/gamelog"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/gamestate"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/items"
|
||||
"lab.zaar.be/thefish/alchemyst-go/engine/mob/movement"
|
||||
@@ -24,11 +25,11 @@ type GameScreen struct {
|
||||
|
||||
func NewGameScreen(mw *mainwindow.MainWindow, state *gamestate.GameState, viewPort *mainwindow.ViewPort, controller *ecs.Controller, scm *types.ScreenManager) *GameScreen {
|
||||
ts := &GameScreen{
|
||||
mw: mw,
|
||||
state: state,
|
||||
vp: viewPort,
|
||||
mw: mw,
|
||||
state: state,
|
||||
vp: viewPort,
|
||||
controller: controller,
|
||||
scm: scm,
|
||||
scm: scm,
|
||||
}
|
||||
|
||||
//fixme move this to fov system
|
||||
@@ -38,6 +39,7 @@ func NewGameScreen(mw *mainwindow.MainWindow, state *gamestate.GameState, viewPo
|
||||
|
||||
renderLevel := systems.NewLevelRenderSystem(state, ts.controller, viewPort, ts.mw.GetLayer("base"), ts.fov)
|
||||
go renderLevel.Listen()
|
||||
|
||||
ts.controller.AddSystem(renderLevel, 50)
|
||||
return ts
|
||||
}
|
||||
@@ -46,7 +48,7 @@ func (ts *GameScreen) UseEcs() bool { return true }
|
||||
func (ts *GameScreen) Enter() {
|
||||
ts.mw.GetLayer("overlay").ClearArea(0, ts.mw.H-3, 30, 3)
|
||||
ts.mw.GetLayer("overlay").WithColor("#77777777").
|
||||
Print(ts.mw.W - 17 , 1, "Press [color=white]?[/color] for help")
|
||||
Print(ts.mw.W-17, 1, "Press [color=white]?[/color] for help")
|
||||
}
|
||||
func (ts *GameScreen) Exit() {
|
||||
//trs := ts.controller.GetSystem(ecs.LevelRenderSystem)
|
||||
@@ -55,7 +57,7 @@ func (ts *GameScreen) Exit() {
|
||||
//remove what we dont need
|
||||
}
|
||||
|
||||
//fixme kry names to action constants!
|
||||
// fixme kry names to action constants!
|
||||
func (ts *GameScreen) HandleInput(input string) {
|
||||
//ts.state.Do(func(){
|
||||
switch input {
|
||||
@@ -105,16 +107,16 @@ func (ts *GameScreen) HandleInput(input string) {
|
||||
err := items.Carried.Pickup(cc, ts.state.Player, carrieds[0])
|
||||
if err != nil {
|
||||
// Message with error
|
||||
//gameLog.Log.Error(err)
|
||||
//gameLog.Msg.Error(err)
|
||||
//@fixme!
|
||||
appctx.Logger().Warn().Err(err)
|
||||
break;
|
||||
break
|
||||
}
|
||||
|
||||
}
|
||||
//log picked up
|
||||
//gameLog.Log.Message(err)
|
||||
break;
|
||||
//gameLog.Msg.Message(err)
|
||||
break
|
||||
|
||||
case "i":
|
||||
ts.scm.SetScreenByName("inventory")
|
||||
@@ -123,11 +125,21 @@ func (ts *GameScreen) HandleInput(input string) {
|
||||
ts.mw.GetLayer("base").ClearArea(0, 3, 40, 1)
|
||||
ts.mw.GetLayer("base").Print(1, 3, "Key: "+input)
|
||||
ts.mw.GetLayer("base").Print(1, 6, "█")
|
||||
|
||||
}
|
||||
if gamelog.Log.RedrawLogs {
|
||||
logRect := types.NewRect(1, ts.mw.H-gamelog.Log.MaxHeight-1, ts.mw.W-1, gamelog.Log.MaxHeight)
|
||||
ts.mw.GetLayer("overlay").ClearRect(logRect)
|
||||
count := 0
|
||||
for i := len(gamelog.Log.Messages) - 1; i >= len(gamelog.Log.Messages)-gamelog.Log.MaxHeight; i-- {
|
||||
//fmt.Println(gamelog.Log.Messages[i].Message)
|
||||
ts.mw.GetLayer("overlay").PutStringInto(logRect, count-2, gamelog.Log.Messages[i].Message, 0)
|
||||
count++
|
||||
}
|
||||
gamelog.Log.RedrawLogs = false
|
||||
}
|
||||
//})
|
||||
}
|
||||
|
||||
func (ts *GameScreen) Render() {
|
||||
//ts.vp.Render(ts.state)
|
||||
ts.controller.Process([]string{})
|
||||
ts.controller.Process(nil)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user