Files
ngzz-mc/cmd/client/entities_gl.go

95 lines
2.5 KiB
Go
Raw Permalink Normal View History

//go:build gl
// 实体可视映射:实体类型 → 贴图键/身高/动物模型(渲染.md §5.3)。
package main
import (
"mc/internal/entity"
"mc/internal/item"
"mc/internal/render"
)
2026-09-19 14:21:08 +08:00
// entitySkinKeys 实体皮肤候选(temperate 优先,回退短名)。
var entitySkinKeys = []string{
"entity/player/wide/steve",
"entity/steve",
"entity/zombie/zombie",
"entity/villager/villager",
"entity/cow/cow_temperate",
"entity/cow/cow",
"entity/pig/pig_temperate",
"entity/pig/pig",
"entity/sheep/sheep_temperate",
"entity/sheep/sheep",
"entity/sheep/sheep_fur",
"entity/sheep/sheep_wool",
"entity/chicken/chicken_temperate",
"entity/chicken/chicken",
}
// requiredEntitySkinGroups 必选皮肤候选组:组内任一键命中即可;全缺才品红占位。
var requiredEntitySkinGroups = [][]string{
{"entity/zombie/zombie"},
{"entity/villager/villager"},
{"entity/cow/cow_temperate", "entity/cow/cow"},
{"entity/pig/pig_temperate", "entity/pig/pig"},
{"entity/sheep/sheep_temperate", "entity/sheep/sheep"},
{"entity/chicken/chicken_temperate", "entity/chicken/chicken"},
}
func firstUV(r *render.Renderer, keys ...string) ([4]float32, bool) {
for _, k := range keys {
if uv, ok := r.EntityUV(k); ok {
return uv, true
}
}
return [4]float32{}, false
}
// entityVisual 返回实体的贴图键与身高(米)。
2026-09-19 14:21:08 +08:00
// 动物额外返回外观变体(0 牛 / 1 猪 / 2 羊 / 3 鸡)。
func entityVisual(e *entity.Entity, items *item.Registry) (key string, height float32, variant int) {
switch e.Kind {
case entity.KindZombie:
return "entity/zombie/zombie", 1.95, -1
case entity.KindVillager:
return "entity/villager/villager", 1.95, -1
case entity.KindAnimal:
2026-09-19 14:21:08 +08:00
switch entity.AnimalSpecies(e) {
case 0:
return "entity/cow/cow_temperate", 1.4, 0
case 1:
return "entity/pig/pig_temperate", 0.9, 1
case 2:
return "entity/sheep/sheep", 1.3, 2
default:
return "entity/chicken/chicken_temperate", 0.7, 3
}
case entity.KindItemDrop:
d, ok := e.Data.(*entity.Drop)
if !ok || items == nil {
return "", 0, -1
}
def, ok := items.Get(d.Item)
if !ok {
return "", 0, -1
}
return def.Texture, 0.45, -1
default:
return "", 0, -1
}
}
2026-09-19 14:21:08 +08:00
func animalSkinKeys(variant int) []string {
switch variant {
2026-09-19 14:21:08 +08:00
case 0:
return []string{"entity/cow/cow_temperate", "entity/cow/cow"}
case 1:
return []string{"entity/pig/pig_temperate", "entity/pig/pig"}
case 2:
return []string{"entity/sheep/sheep_temperate", "entity/sheep/sheep"}
default:
return []string{"entity/chicken/chicken_temperate", "entity/chicken/chicken"}
}
}