- 音频(音频.md §2):Session.Sound 事件回调,破坏/放置/攻击/村民环境音接入, 客户端 audio.Manager 3D 衰减 + 监听器跟随 + 音量可调 - 原版掉落:草方块→泥土、石头→圆石、树叶无掉落(no_drop);掉落物实体 用物品图标小广告牌渲染(物品纹理并入实体图集) - 动物攻击(动物体系.md §5):左键优先射线命中实体(半径 0.6 球体判定), 伤害/击退/死亡移除+肉类掉落;僵尸掉腐肉 - 村庄村民(村民系统.md §2):Generator.VillageAt 定位村庄中心,会话扫描 已加载区块在村庄生成 3 名村民 - 种子与灵敏度配置:client.yaml world.seed/name、mouse_sensitivity; 存档与种子联动;鼠标左右反转修复(右移应右转) - 设置界面(UI与输入.md §6):屏幕状态 4,灵敏度/音量滑条、世界种子显示、 按键教程多行列表(cjkfont 支持 \\n)、完成按钮;主菜单/暂停菜单入口 - 准星指向方块名:左下角 CJK 显示(lang 本地化,tick 光栅化渲染线程上传) - 截图统一存项目根目录 jietu/(paths.RootDir;dev 构建识别 bin/ 布局)
44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
// Package paths 资源路径解析:全部相对路径基于「可执行文件所在目录」解析,
|
||
// 保证双击运行 / 桌面快捷方式 / 安装目录下任意 CWD 都能找到资源(修复闪退根因)。
|
||
package paths
|
||
|
||
import (
|
||
"os"
|
||
"path/filepath"
|
||
"sync"
|
||
)
|
||
|
||
var (
|
||
once sync.Once
|
||
baseDir string
|
||
)
|
||
|
||
// BaseDir 可执行文件所在目录(缓存;失败回退 CWD)。
|
||
func BaseDir() string {
|
||
once.Do(func() {
|
||
exe, err := os.Executable()
|
||
if err != nil {
|
||
baseDir, _ = os.Getwd()
|
||
return
|
||
}
|
||
baseDir = filepath.Dir(exe)
|
||
})
|
||
return baseDir
|
||
}
|
||
|
||
// Join 基于可执行文件目录拼接相对路径。
|
||
func Join(rel ...string) string {
|
||
parts := append([]string{BaseDir()}, rel...)
|
||
return filepath.Join(parts...)
|
||
}
|
||
|
||
// RootDir 项目根目录:可执行文件所在目录;若其位于 <根>/bin/(开发构建布局)
|
||
// 则取父目录——截图等「非打包产物」统一存根目录(如 jietu/)。
|
||
func RootDir() string {
|
||
base := BaseDir()
|
||
if filepath.Base(base) == "bin" {
|
||
return filepath.Dir(base)
|
||
}
|
||
return base
|
||
}
|