OptiFineDoc翻译 cem_animation.txt
######################################################################
# 自定义实体模型动画
# OptiFine的特色自定义实体模型的参考配置
######################################################################
# 每个要被动态化的模型变量都被分配了一个表达式。
# 模型每次被渲染并将其值赋给变量时,都会对表达式求值。
# 变量和表达式在json实体模型(JEM)的 "animation" 部分中定义。
#
# "animations":
# [
# {
# "variable1": "表达式1",
# "variable2": "表达式2,
# ...
# }
# ]
#
#
# 变量
# 模型变量由此格式指定
# "<模型>.<变量名>"
#
# 模型可能是:
# "this" - 当前自定义模型
# "part" - 当前自定义模型所依附的部件模型
# "<part>" - 部件名指向的自定义模型
# "<id>" - ID指向的自定义模型
# "<part>:<sub_id>:<sub_sub_id>:..." - (分层结构) 首先按部件名查找原始模型,然后按ID查找子模型
# "<id>:<sub_id>:<sub_sub_id>:..." - (分层结构) 首先按ID查找模型,然后按ID查找子模型
#
# 如果存在重复,则使用根据部件名或ID找到的第一个模型。
# 根据ID进行的模型搜索是深入的,在分层结构中使用时也是如此。
#
# 分层结构让模型组 (json部件模型) 能够被不同部件再利用。
# 例如一个手的模型 ("shoulder:upper_arm:elbow:forearm:palm:finger[1.5]" 可以同时应用于左手和右手。
# 动画可以使用 "left_hand:finger1" 表示左手拇指,"right_hand:finger1" 表示右手拇指。
# 可以跳过分层结构中的中间层。
#
# 变量名
# tx, ty, tz - 平移 x, y, z
# rx, ry, rz - 旋转 x, y, z
# ox, oy, oz - 偏移 x, y, z (这是绝对的, 不随模型缩放的, 可用于平移动画)
# sx, sy, sz - 缩放 x, y, z
#
# 表达式
#
# 表达式是具有括号、常量、变量、运算符和函数的通用数学表达式。
#
# 常量
# 浮点数
# pi - 3.1415926
# true
# false
#
# 变量
# <model>.<var> - 模型变量, 详见模型变量的说明
# time - 当前世界的时刻
#
# 渲染参数
# limb_swing - 肢体动画计数器
# limb_speed - 肢体移动速度
# age - 按tick计算的年龄
# head_yaw - 头偏角
# head_pitch - 头仰角
# scale - 渲染比例,默认为0.0625
#
# 实体参数 (浮点型)
# health
# hurt_time
# idle_time
# max_health
# move_forward
# move_strafing
# pos_x, pos_y, pos_z
# revenge_time
# swing_progress
#
# 实体参数 (布尔型)
# is_alive
# is_burning
# is_child
# is_glowing
# is_hurt
# is_in_lava
# is_in_water
# is_invisible
# is_on_ground
# is_ridden
# is_riding
# is_sneaking
# is_sprinting
# is_wet
#
# 运算符
# +, -, *, /, %
# !, &&, ||
# >, >=, <, <=, ==, !=
#
# 函数
# sin(x)
# cos(x)
# asin(x)
# acos(x)
# tan(x)
# atan(x)
# atan2(y, x)
# torad(deg)
# todeg(rad)
# min(x, y ,...)
# max(x, y, ...)
# clamp(x, min, max) 将一个值限制在最小值和最大值之间
# abs(x)
# floor(x)
# ceil(x)
# exp(x)
# frac(x)
# log(x)
# pow(x)
# random(x)
# round(x)
# signum(x)
# sqrt(x)
# fmod(x, y) 和 Math.floorMod() 类似
# if(cond, val, [cond2, val2, ...], val_else) 基于一个或更多条件选择一个值
#
# 布尔函数
# between(x, min, max) 检查一个值是否在最大和最小值之间
# equals(x, y, epsilon) 将两个浮点数和误差范围进行比较
# in(x, val1, val2, ...) 检查一个值是否和多个值之一相等
#
# 示例:
# ...
# "animations":
# [
# {
# "this.rx": "clamp(-0.5 * part.rx, 0, 90)",
# "this.tx": "3 * sin(limb_swing / 4) - 2",
# "this:Hoof.rx": "if(leg4:Hoof.rx > 90, leg4:Hoof.rx - 90, 0)"
# ...
# }
# ]
#
# 自定义实体模型动画
# OptiFine的特色自定义实体模型的参考配置
######################################################################
# 每个要被动态化的模型变量都被分配了一个表达式。
# 模型每次被渲染并将其值赋给变量时,都会对表达式求值。
# 变量和表达式在json实体模型(JEM)的 "animation" 部分中定义。
#
# "animations":
# [
# {
# "variable1": "表达式1",
# "variable2": "表达式2,
# ...
# }
# ]
#
#
# 变量
# 模型变量由此格式指定
# "<模型>.<变量名>"
#
# 模型可能是:
# "this" - 当前自定义模型
# "part" - 当前自定义模型所依附的部件模型
# "<part>" - 部件名指向的自定义模型
# "<id>" - ID指向的自定义模型
# "<part>:<sub_id>:<sub_sub_id>:..." - (分层结构) 首先按部件名查找原始模型,然后按ID查找子模型
# "<id>:<sub_id>:<sub_sub_id>:..." - (分层结构) 首先按ID查找模型,然后按ID查找子模型
#
# 如果存在重复,则使用根据部件名或ID找到的第一个模型。
# 根据ID进行的模型搜索是深入的,在分层结构中使用时也是如此。
#
# 分层结构让模型组 (json部件模型) 能够被不同部件再利用。
# 例如一个手的模型 ("shoulder:upper_arm:elbow:forearm:palm:finger[1.5]" 可以同时应用于左手和右手。
# 动画可以使用 "left_hand:finger1" 表示左手拇指,"right_hand:finger1" 表示右手拇指。
# 可以跳过分层结构中的中间层。
#
# 变量名
# tx, ty, tz - 平移 x, y, z
# rx, ry, rz - 旋转 x, y, z
# ox, oy, oz - 偏移 x, y, z (这是绝对的, 不随模型缩放的, 可用于平移动画)
# sx, sy, sz - 缩放 x, y, z
#
# 表达式
#
# 表达式是具有括号、常量、变量、运算符和函数的通用数学表达式。
#
# 常量
# 浮点数
# pi - 3.1415926
# true
# false
#
# 变量
# <model>.<var> - 模型变量, 详见模型变量的说明
# time - 当前世界的时刻
#
# 渲染参数
# limb_swing - 肢体动画计数器
# limb_speed - 肢体移动速度
# age - 按tick计算的年龄
# head_yaw - 头偏角
# head_pitch - 头仰角
# scale - 渲染比例,默认为0.0625
#
# 实体参数 (浮点型)
# health
# hurt_time
# idle_time
# max_health
# move_forward
# move_strafing
# pos_x, pos_y, pos_z
# revenge_time
# swing_progress
#
# 实体参数 (布尔型)
# is_alive
# is_burning
# is_child
# is_glowing
# is_hurt
# is_in_lava
# is_in_water
# is_invisible
# is_on_ground
# is_ridden
# is_riding
# is_sneaking
# is_sprinting
# is_wet
#
# 运算符
# +, -, *, /, %
# !, &&, ||
# >, >=, <, <=, ==, !=
#
# 函数
# sin(x)
# cos(x)
# asin(x)
# acos(x)
# tan(x)
# atan(x)
# atan2(y, x)
# torad(deg)
# todeg(rad)
# min(x, y ,...)
# max(x, y, ...)
# clamp(x, min, max) 将一个值限制在最小值和最大值之间
# abs(x)
# floor(x)
# ceil(x)
# exp(x)
# frac(x)
# log(x)
# pow(x)
# random(x)
# round(x)
# signum(x)
# sqrt(x)
# fmod(x, y) 和 Math.floorMod() 类似
# if(cond, val, [cond2, val2, ...], val_else) 基于一个或更多条件选择一个值
#
# 布尔函数
# between(x, min, max) 检查一个值是否在最大和最小值之间
# equals(x, y, epsilon) 将两个浮点数和误差范围进行比较
# in(x, val1, val2, ...) 检查一个值是否和多个值之一相等
#
# 示例:
# ...
# "animations":
# [
# {
# "this.rx": "clamp(-0.5 * part.rx, 0, 90)",
# "this.tx": "3 * sin(limb_swing / 4) - 2",
# "this:Hoof.rx": "if(leg4:Hoof.rx > 90, leg4:Hoof.rx - 90, 0)"
# ...
# }
# ]
#
评论
发表评论