//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"} } }