Files
ngzz-mc/cmd/client/entities_gl.go
2026-09-19 14:21:08 +08:00

95 lines
2.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//go:build gl
// 实体可视映射:实体类型 → 贴图键/身高/动物模型(渲染.md §5.3)。
package main
import (
"mc/internal/entity"
"mc/internal/item"
"mc/internal/render"
)
// 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 返回实体的贴图键与身高(米)。
// 动物额外返回外观变体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:
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
}
}
func animalSkinKeys(variant int) []string {
switch variant {
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"}
}
}