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)"
#        ...
#      }
#    ]

评论

此博客中的热门博文

OptiFineDoc翻译 cem_model.txt