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:
@@ -125,6 +125,9 @@ func (s *Session) BeginBreak() {
|
||||
s.breakTarget = h
|
||||
s.breaking = true
|
||||
s.breakProg = 0
|
||||
if s.Sound != nil {
|
||||
s.Sound("block.hit", float64(h.X)+0.5, float64(h.Y)+0.5, float64(h.Z)+0.5)
|
||||
}
|
||||
if s.Creative {
|
||||
s.BreakNow()
|
||||
}
|
||||
@@ -190,6 +193,7 @@ func (s *Session) Attack() bool {
|
||||
return false
|
||||
}
|
||||
e.Health -= 2
|
||||
e.HitFlash = 0.15 // 受击白闪(打击反馈,客户端渲染)
|
||||
// 击退(沿视线水平方向)
|
||||
f := s.Cam.Forward()
|
||||
e.Vel[0] += f[0] * 4
|
||||
|
||||
@@ -331,6 +331,11 @@ func TestBlockDropVanilla(t *testing.T) {
|
||||
for s.breaking {
|
||||
s.Tick(1.0 / 20)
|
||||
}
|
||||
// 掉落有 1 秒真实时间拾取延迟(Born 为墙钟时间):等待后 tick 触发拾取
|
||||
time.Sleep(1100 * time.Millisecond)
|
||||
for i := 0; i < 2; i++ {
|
||||
s.Tick(1.0 / 20)
|
||||
}
|
||||
after := 0
|
||||
for _, st := range s.Inv.Slots {
|
||||
if st.Name == "dirt" {
|
||||
|
||||
Reference in New Issue
Block a user