fixed hiddendoor tiles, now uses destruct shader no spriteset

This commit is contained in:
2024-03-24 19:36:00 +01:00
parent f8c09fda76
commit 5b7c88a1a9
116 changed files with 843 additions and 561 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -33,6 +33,8 @@ type Tile struct {
TileNames []string // same thing, only the names
Obstacle bool // is an obstacle/enemy
Direction int // obstacle business end shows into this direction
Shader *ebiten.Shader
Alpha *ebiten.Image
}
func (tile *Tile) Clone() *Tile {
@@ -53,6 +55,8 @@ func (tile *Tile) Clone() *Tile {
TileNames: tile.TileNames,
Obstacle: tile.Obstacle,
Direction: tile.Direction,
Alpha: tile.Alpha,
Shader: tile.Shader,
}
return newtile
@@ -158,24 +162,16 @@ func NewTileTranswall(class []string) *Tile {
}
}
func NewTileHiddenDoor(class []string) *Tile {
sprites := []*ebiten.Image{}
names := []string{}
for _, sprite := range class {
sprites = append(sprites, Assets[sprite])
names = append(names, sprite)
}
func NewTileHiddenDoor(class, alpha string) *Tile {
return &Tile{
Id: 'W',
Class: "hiddendoor",
Solid: false,
Renderable: true,
Destroyable: true,
Tiles: sprites,
Sprite: sprites[0], // initially use the first
TileNames: names,
Sprite: Assets[class],
Alpha: Assets[alpha],
Shader: Shaders["destruct"],
}
}
@@ -196,15 +192,21 @@ func InitTiles() TileRegistry {
"ObstacleWest": NewTileObstacle("obstacle-west", config.West),
"ObstacleEast": NewTileObstacle("obstacle-east", config.East),
"Particle": NewTileParticle([]string{
//"particle-ring-1",
"particle-ring-1",
"particle-ring-2",
"particle-ring-3",
"particle-ring-4",
"particle-ring-5",
"particle-ring-6",
}),
"Transient": NewTileTranswall([]string{"transwall", "block-orange-32"}),
"HiddenDoor": NewTileHiddenDoor([]string{"block-greycolored", "block-greycolored-damaged"}),
"Transient": NewTileTranswall([]string{"transwall", "block-orange-32"}),
"HiddenDoor": NewTileHiddenDoor("block-greycolored", "damage"),
"HiddenDoor2": NewTileHiddenDoor("block-greycolored", "damage"),
"HiddenDoor3": NewTileHiddenDoor("block-greycolored", "damage"),
"HiddenDoor4": NewTileHiddenDoor("block-greycolored", "damage"),
"HiddenDoor5": NewTileHiddenDoor("block-greycolored", "damage"),
"HiddenDoor6": NewTileHiddenDoor("block-greycolored", "damage"),
"HiddenDoor7": NewTileHiddenDoor("block-greycolored", "damage"),
}
}

49
assets/loader-shaders.go Normal file
View File

@@ -0,0 +1,49 @@
package assets
import (
"bytes"
"log"
"log/slog"
"path/filepath"
"strings"
"github.com/hajimehoshi/ebiten/v2"
)
type ShaderRegistry map[string]*ebiten.Shader
var Shaders = LoadShaders("shaders")
func LoadShaders(dir string) ShaderRegistry {
shaders := ShaderRegistry{}
entries, err := assetfs.ReadDir(dir)
if err != nil {
log.Fatalf("failed to read shaders dir %s: %s", dir, err)
}
for _, file := range entries {
path := filepath.Join(dir, file.Name())
fd, err := assetfs.Open(path)
if err != nil {
log.Fatalf("failed to open shader file %s: %s", file.Name(), err)
}
defer fd.Close()
name := strings.TrimSuffix(file.Name(), ".kg")
buf := new(bytes.Buffer)
buf.ReadFrom(fd)
shader, err := ebiten.NewShader([]byte(buf.Bytes()))
if err != nil {
log.Fatal(err)
}
shaders[name] = shader
slog.Debug("loaded shader asset", "path", path)
}
return shaders
}

View File

@@ -15,7 +15,7 @@ import (
// Maps image name to image data
type AssetRegistry map[string]*ebiten.Image
//go:embed sprites/*.png fonts/*.ttf levels/*.ldtk
//go:embed sprites/*.png fonts/*.ttf levels/*.ldtk shaders/*.kg
var assetfs embed.FS
var Assets = LoadImages("sprites")

View File

@@ -0,0 +1,36 @@
// Copyright 2020 The Ebiten Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build ignore
//kage:unit pixels
package main
var Damaged int
const HP float = 0
func Fragment(_ vec4, texCoord vec2, _ vec4) vec4 {
wallpx := imageSrc0At(texCoord) // A pixel from the wall tile
mask := imageSrc1At(texCoord) // A pixel from the damage mask image
if Damaged == 1 && (wallpx.a != 0.0 && mask.a != 0.0) {
alpha := clamp(HP+(1.0-mask.a), 0.0, 1.0)
// Create a darker pixel if it's inside a damage mask.
return vec4(wallpx.r*alpha, wallpx.g*alpha, wallpx.b*alpha, wallpx.a)
}
return wallpx // Otherwise, leave a pixel color as is
}

BIN
assets/sprites/damage.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB