fix(game): 崩溃修复(卸载区块实体冻结)+ 立面光照、掉落可见、打击感、水下效果、空手拳头、血条左/饥饿右
- 崩溃(index out of range):实体所在区块卸载后失去碰撞支撑无限下坠到 负坐标,光查询越界 panic——WorldView 增 ChunkLoaded,未加载区块实体冻结; chunk 光查询加越界防御(双保险) - 立面光照:mesh 每面取**邻格**光照(原版光照模型)——此前用方块自身光照 (sky=0)导致悬崖/矿洞立面全黑(泥土竖向黑色根因) - 掉落可见:生成后 1 秒拾取延迟 + 图标加大到 0.45 - 打击感:攻击命中音(block.hit)+ 实体受击白闪(uTint)+ 手持挥动动画 - 水下效果:相机入水蓝色叠加(渲染.md §8 水体) - 空手显示肤色拳头(白羊毛 × 肤色 tint),持方块正常显示 - HUD 布局:血条左下、饥饿右下(经典布局)
This commit is contained in:
@@ -71,7 +71,8 @@ func (r *Renderer) ensureBillQuad() {
|
||||
}
|
||||
|
||||
// DrawBillboard 在 (x,y,z)(脚底)绘制 h 高 × w 宽的实体广告牌,贴图 uv。
|
||||
func (r *Renderer) DrawBillboard(x, y, z float32, h, w float32, uv [4]float32) {
|
||||
// flash=true 时整体白闪(受击反馈,打击感)。
|
||||
func (r *Renderer) DrawBillboard(x, y, z float32, h, w float32, uv [4]float32, flash bool) {
|
||||
if r.entityTex == 0 {
|
||||
return
|
||||
}
|
||||
@@ -88,6 +89,12 @@ func (r *Renderer) DrawBillboard(x, y, z float32, h, w float32, uv [4]float32) {
|
||||
gl.Uniform3f(offLoc, x, y, z)
|
||||
cutLoc := gl.GetUniformLocation(r.prog, gl.Str("uCutout\x00"))
|
||||
gl.Uniform1f(cutLoc, 0)
|
||||
tintLoc := gl.GetUniformLocation(r.prog, gl.Str("uTint\x00"))
|
||||
if flash {
|
||||
gl.Uniform4f(tintLoc, 2.5, 2.5, 2.5, 1) // 受击白闪
|
||||
} else {
|
||||
gl.Uniform4f(tintLoc, 1, 1, 1, 1)
|
||||
}
|
||||
// 相机基向量(视图矩阵列 0/1 即世界系下的 right/up)
|
||||
rightLoc := gl.GetUniformLocation(r.prog, gl.Str("uCamRight\x00"))
|
||||
upLoc := gl.GetUniformLocation(r.prog, gl.Str("uCamUp\x00"))
|
||||
|
||||
Reference in New Issue
Block a user