fond memleak, colordance broken
This commit is contained in:
parent
c372670953
commit
96d6818754
@ -77,7 +77,7 @@ func main() {
|
||||
vp := mainwindow.NewViewPort(40, 0, 60, 47, level, mw.GetLayer("base"))
|
||||
vp.Render()
|
||||
|
||||
go handleInput(mainCtx, mw.GetLayer("base"))
|
||||
go decodeInput(mainCtx, mw.GetLayer("base"))
|
||||
|
||||
//but every call to bearlibterminal must be wrapped to closure and passed to mainfunc
|
||||
var exit = false
|
||||
@ -114,7 +114,7 @@ func setupLayers(mainwindow *mainwindow.MainWindow) {
|
||||
mainwindow.AddLayer("menu", 2, "white")
|
||||
}
|
||||
|
||||
func handleInput(ctx util.ClientCtx, baseLayer *mainwindow.Layer) {
|
||||
func decodeInput(ctx util.ClientCtx, baseLayer *mainwindow.Layer) {
|
||||
var exit = false
|
||||
for !exit{
|
||||
select {
|
||||
|
@ -6,49 +6,95 @@ import (
|
||||
)
|
||||
import blt "lab.zaar.be/thefish/bearlibterminal"
|
||||
|
||||
type ColorHolder struct {
|
||||
type ColorHolder interface {
|
||||
GetColor() uint32
|
||||
}
|
||||
|
||||
type DanceColorHolder struct {
|
||||
A uint8
|
||||
R *ring.Ring
|
||||
G *ring.Ring
|
||||
B *ring.Ring
|
||||
}
|
||||
|
||||
func (chd *DanceColorHolder) GetColor() uint32 {
|
||||
return blt.ColorFromARGB(
|
||||
chd.A,
|
||||
chd.R.Next().Value.(uint8),
|
||||
chd.G.Next().Value.(uint8),
|
||||
chd.B.Next().Value.(uint8),
|
||||
)
|
||||
}
|
||||
|
||||
type PlainColorHolder struct {
|
||||
A uint8
|
||||
R uint8
|
||||
G uint8
|
||||
B uint8
|
||||
}
|
||||
|
||||
func (chb *PlainColorHolder) GetColor() uint32 {
|
||||
return blt.ColorFromARGB(
|
||||
chb.A,
|
||||
chb.R,
|
||||
chb.G,
|
||||
chb.B,
|
||||
)
|
||||
}
|
||||
|
||||
type TileColorSet struct {
|
||||
Fg func() uint32
|
||||
Bg func() uint32
|
||||
DarkFg func() uint32
|
||||
DarkBg func() uint32
|
||||
current *ColorHolder
|
||||
Fg ColorHolder
|
||||
Bg ColorHolder
|
||||
DarkFg ColorHolder
|
||||
DarkBg ColorHolder
|
||||
}
|
||||
|
||||
type Appearance struct {
|
||||
Char string
|
||||
ColorSet *TileColorSet
|
||||
Char string `json:"char"`
|
||||
ColorSet *TileColorSet `json:"colorSet"`
|
||||
}
|
||||
|
||||
var crng = util.NewRNG()
|
||||
|
||||
func NewColorComponentRing(colorValue uint8, minGlow, maxGlow, step int) *ring.Ring {
|
||||
type Tile struct {
|
||||
*Appearance `json:"app"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"desc"`
|
||||
BlocksPass bool `json:"blocksPass"`
|
||||
BlocksSight bool `json:"blocksSight"`
|
||||
Colordance bool `json:"colordance"`
|
||||
Explored bool
|
||||
MustDraw bool
|
||||
Visible bool
|
||||
}
|
||||
|
||||
func singleColorRing(colorValue uint8) *ring.Ring {
|
||||
r := ring.New(1)
|
||||
r.Next().Value = colorValue
|
||||
return r
|
||||
}
|
||||
|
||||
func fillColorRing(colorValue uint8, minGlow, maxGlow, step int) *ring.Ring {
|
||||
q := make([]uint8, 0)
|
||||
color := int(colorValue)
|
||||
for color < maxGlow {
|
||||
q = append(q, uint8(color))
|
||||
color = crng.Range(0, step) + color
|
||||
}
|
||||
color = crng.Range(0, step + minGlow)
|
||||
for uint8(color) < colorValue {
|
||||
q = append(q, uint8(color))
|
||||
color = crng.Range(0, step + minGlow)
|
||||
color = crng.Range(1, step) + color
|
||||
}
|
||||
color = crng.Range(0, step+minGlow)
|
||||
q = append(q, uint8(color))
|
||||
//for uint8(color) < uint8(colorValue) {
|
||||
// q = append(q, uint8(color))
|
||||
// color = crng.Range(1, step+minGlow)
|
||||
//}
|
||||
|
||||
r := ring.New(len(q))
|
||||
for _, v := range q {
|
||||
r.Next().Value = v
|
||||
}
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
|
||||
func colordance(colorValue uint8, minGlow, maxGlow, step int) uint8 {
|
||||
color := crng.Range(0, step) + int(colorValue)
|
||||
if color > maxGlow {
|
||||
@ -57,18 +103,6 @@ func colordance(colorValue uint8, minGlow, maxGlow, step int) uint8 {
|
||||
return uint8(color)
|
||||
}
|
||||
|
||||
type Tile struct {
|
||||
*Appearance
|
||||
Name string
|
||||
Description string
|
||||
BlocksPass bool
|
||||
BlocksSight bool
|
||||
Explored bool
|
||||
MustDraw bool
|
||||
Visible bool
|
||||
Colordance bool
|
||||
}
|
||||
|
||||
func NewWall() *Tile {
|
||||
return &Tile{
|
||||
Name: "Wall",
|
||||
@ -80,10 +114,10 @@ func NewWall() *Tile {
|
||||
Appearance: &Appearance{
|
||||
Char: "#",
|
||||
ColorSet: &TileColorSet{
|
||||
Fg: func() uint32 { return blt.ColorFromARGB(255, 130, 110, 150) },
|
||||
Bg: func() uint32 { return blt.ColorFromARGB(255, 172, 170, 173) },
|
||||
DarkFg: func() uint32 { return blt.ColorFromARGB(255, 20, 20, 68) },
|
||||
DarkBg: func() uint32 { return blt.ColorFromARGB(255, 7, 7, 30) },
|
||||
Fg: &PlainColorHolder{255, 130, 110, 150},
|
||||
Bg: &PlainColorHolder{255, 172, 170, 173},
|
||||
DarkFg: &PlainColorHolder{255, 20, 20, 68},
|
||||
DarkBg: &PlainColorHolder{255, 7, 7, 30},
|
||||
},
|
||||
},
|
||||
}
|
||||
@ -100,17 +134,17 @@ func NewFloor() *Tile {
|
||||
Appearance: &Appearance{
|
||||
Char: ".",
|
||||
ColorSet: &TileColorSet{
|
||||
Fg: func() uint32 { return blt.ColorFromARGB(255, 220, 220, 250) },
|
||||
Bg: func() uint32 { return blt.ColorFromARGB(255, 19, 19, 70) },
|
||||
DarkFg: func() uint32 { return blt.ColorFromARGB(255, 30, 20, 50) },
|
||||
DarkBg: func() uint32 { return blt.ColorFromARGB(255, 7, 7, 30) },
|
||||
Fg: &PlainColorHolder{255, 220, 220, 250},
|
||||
Bg: &PlainColorHolder{255, 19, 19, 70},
|
||||
DarkFg: &PlainColorHolder{255, 30, 20, 50},
|
||||
DarkBg: &PlainColorHolder{255, 7, 7, 30},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func NewWaterTile() *Tile {
|
||||
ch := &ColorHolder{19, 19, 70}
|
||||
//ch := &ColorHolder{19, 19, 70}
|
||||
return &Tile{
|
||||
Name: "Water",
|
||||
Description: "Murky water",
|
||||
@ -123,26 +157,30 @@ func NewWaterTile() *Tile {
|
||||
Appearance: &Appearance{
|
||||
Char: " ",
|
||||
ColorSet: &TileColorSet{
|
||||
current: ch,
|
||||
Fg: func() uint32 { return blt.ColorFromARGB(255, 220, 220, 250) },
|
||||
Bg: func() uint32 {
|
||||
return blt.ColorFromARGB(
|
||||
255,
|
||||
ch.R,
|
||||
colordance(ch.G, 0, 15, 2),
|
||||
colordance(ch.B, 120, 220, 12),
|
||||
)
|
||||
Fg: &PlainColorHolder{255, 220, 220, 250},
|
||||
Bg: &DanceColorHolder{
|
||||
255,
|
||||
singleColorRing(19),
|
||||
fillColorRing(19, 0, 15, 2),
|
||||
fillColorRing(70, 120, 220, 12),
|
||||
},
|
||||
DarkFg: func() uint32 { return blt.ColorFromARGB(255, 30, 20, 50) },
|
||||
DarkBg: func() uint32 { return blt.ColorFromARGB(255, 7, 7, 30) },
|
||||
//Bg: func() uint32 {
|
||||
// return blt.ColorFromARGB(
|
||||
// 255,
|
||||
// ch.R,
|
||||
// colordance(ch.G, 0, 15, 2),
|
||||
// colordance(ch.B, 120, 220, 12),
|
||||
// )
|
||||
//},
|
||||
DarkFg: &PlainColorHolder{255, 30, 20, 50 },
|
||||
DarkBg: &PlainColorHolder{255, 7, 7, 30},
|
||||
},
|
||||
},
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func NewDeepWaterTile() *Tile {
|
||||
ch := &ColorHolder{5, 2, 122}
|
||||
//ch := &ColorHolder{5, 2, 154}
|
||||
return &Tile{
|
||||
Name: "Deep Water",
|
||||
Description: "Deep water",
|
||||
@ -154,19 +192,44 @@ func NewDeepWaterTile() *Tile {
|
||||
Appearance: &Appearance{
|
||||
Char: " ",
|
||||
ColorSet: &TileColorSet{
|
||||
current: ch,
|
||||
Fg: func() uint32 { return blt.ColorFromARGB(255, 220, 220, 250) },
|
||||
Bg: func() uint32 {
|
||||
return blt.ColorFromARGB(
|
||||
255,
|
||||
ch.R,
|
||||
colordance(ch.G, 2, 42, 4),
|
||||
colordance(ch.B, 180, 229, 12),
|
||||
)
|
||||
Fg: &PlainColorHolder{255, 220, 220, 250},
|
||||
Bg: &DanceColorHolder{
|
||||
255,
|
||||
singleColorRing(5),
|
||||
fillColorRing(2,2,42,4),
|
||||
fillColorRing(154, 150, 229, 12),
|
||||
},
|
||||
DarkFg: func() uint32 { return blt.ColorFromARGB(255, 30, 20, 50) },
|
||||
DarkBg: func() uint32 { return blt.ColorFromARGB(255, 7, 7, 30) },
|
||||
//Bg: func() uint32 {
|
||||
// return blt.ColorFromARGB(
|
||||
// 255,
|
||||
// ch.R,
|
||||
// colordance(ch.G, 2, 42, 4),
|
||||
// colordance(ch.B, 180, 229, 12),
|
||||
// )
|
||||
//},
|
||||
DarkFg: &PlainColorHolder{255, 30, 20, 50},
|
||||
DarkBg: &PlainColorHolder{255, 7, 7, 30},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (t *Tile) GetChar() string {
|
||||
return t.Char
|
||||
}
|
||||
|
||||
func (t *Tile) GetRawColor() uint32 {
|
||||
if !t.Visible {
|
||||
return t.Appearance.ColorSet.Fg.GetColor()
|
||||
} else {
|
||||
return t.Appearance.ColorSet.DarkFg.GetColor()
|
||||
}
|
||||
}
|
||||
|
||||
func (t *Tile) GetRawBgColor() uint32 {
|
||||
if !t.Visible {
|
||||
return t.Appearance.ColorSet.Bg.GetColor()
|
||||
} else {
|
||||
return t.Appearance.ColorSet.DarkBg.GetColor()
|
||||
}
|
||||
}
|
||||
|
@ -54,6 +54,22 @@ func (layer *Layer) PutWithBackground(x,y int, symbol interface{}, bgColorName s
|
||||
blt.Composition(prevCompMode)
|
||||
}
|
||||
|
||||
func (Layer *Layer) PutToBase(x,y int, symbol interface{}, fg uint32, bg uint32) {
|
||||
if symbol == nil {
|
||||
return
|
||||
}
|
||||
rnes := []rune(symbol.(string))
|
||||
prevColor := uint32(blt.State(blt.TK_COLOR))
|
||||
prevBgColor := uint32(blt.State(blt.TK_BKCOLOR))
|
||||
blt.BkColor(bg)
|
||||
blt.Color(fg)
|
||||
if (len(rnes)) > 0 {
|
||||
blt.Put(x, y, int(rnes[0]))
|
||||
}
|
||||
blt.Color(prevColor)
|
||||
blt.BkColor(prevBgColor)
|
||||
}
|
||||
|
||||
func (layer *Layer) after() *Layer {
|
||||
blt.Color(layer.defaultColor)
|
||||
blt.Layer(0)
|
||||
|
@ -155,21 +155,30 @@ func (vp *ViewPort) Render() {
|
||||
for y := 0; y < vp.H; y++ {
|
||||
for x := 0; x < vp.W; x++ {
|
||||
mapCoords := types.Coords{vp.X + x, vp.Y + y}
|
||||
//vp.level.GetTile(mapCoords).Render()
|
||||
|
||||
tile := vp.level.GetTile(mapCoords)
|
||||
if tile.Visible {
|
||||
if tile.MustDraw {
|
||||
//darkened version of landscape
|
||||
vp.layer.WithColor("green").
|
||||
Put(mapCoords.X, mapCoords.Y, tile.Char)
|
||||
}
|
||||
} else {
|
||||
if redraw == true || tile.Colordance {
|
||||
vp.layer.WithColor("white").
|
||||
Put(mapCoords.X, mapCoords.Y, tile.Char)
|
||||
tile.Explored = true
|
||||
tile.MustDraw = true
|
||||
}
|
||||
}
|
||||
|
||||
//vp.layer.
|
||||
// WithRawColor(tile.GetRawColor()).
|
||||
// PutWithBackground(mapCoords.X, mapCoords.Y, tile.GetChar(), "grey")
|
||||
|
||||
vp.layer.PutToBase(mapCoords.X,mapCoords.Y,tile.GetChar(), tile.GetRawColor(), tile.GetRawBgColor())
|
||||
|
||||
//if tile.Visible {
|
||||
// if tile.MustDraw {
|
||||
// //darkened version of landscape
|
||||
// vp.layer.WithColor("green").
|
||||
// Put(mapCoords.X, mapCoords.Y, tile.Char)
|
||||
// }
|
||||
//} else {
|
||||
// if redraw == true || tile.Colordance {
|
||||
// vp.layer.WithColor("grey").
|
||||
// Put(mapCoords.X, mapCoords.Y, tile.Char)
|
||||
// tile.Explored = true
|
||||
// tile.MustDraw = true
|
||||
// }
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user