开启左侧

脚本也能这么写

[复制链接]
Harlotte 作者认证 2024-12-31 19:39:29

还没有账号?赶快去注册吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

×

1 S$ N9 e; P! T& B. j3 c
7 r5 Q0 G& T. V, a1 D9 y前情提要:此Mod 现名ANTE (Aphrodite's Nemo's Transit Expansion) 即由 我(Aphrodite) 进行后续更新的NTE 请勿与NTE混为一谈,切忌找zbx问关于ANTE的新特性。
, d; z. ?2 k8 c0 I
, s( T$ R8 M2 h这两天为装饰物件添加了对右击响应的支持。, W( n1 Z' _. v4 x# l- A
. q3 c/ B9 U/ c6 J/ e' h7 x. ]
同时我改良了DrawCall系列的继承关系,为自定义DrawCall内容提供了支持。
( c& k+ v  i, p+ F  d: o# v  d& Y
为了能不受限于在render函数中添加绘制调用,我为装饰物件和列车的上下文添加了drawCalls(Map<Object, DrawCall>),现在可以在任何时间任何线程添加、修改、删除绘制调用。
5 b, Q" g9 ?) u" ^8 C- K
$ j8 b# V0 m2 F) f下面是一段示例代码,实现了在右击装饰物件时(不是用刷子)时在玩家头部生成一个始终面向摄像机并向上匀速运动的面的效果。
0 c7 h+ T: `. ?3 ^" i4 w7 u* w
  1. importPackage(java.nio);! O; f: r; g$ L" {

  2. ; a- r, B" [) N" O- |1 L
  3. let model = ModelManager.loadRawModel(Resources.manager(), Resources.idr("face.obj"), null);// 法线 -z1 |: a2 c2 {' `+ A, W
  4. model = ModelManager.uploadVertArrays(model);
    8 m& U8 t7 E; h/ q( t& c

  5. * L# m, |& f9 B
  6. function create(ctx, state, entity) {; a2 ?& A0 r  W# h2 o8 K
  7.     state.num = 0;) i* _* ?7 A& Y3 J5 Q
  8. }
    2 X1 C! c& f$ L

  9. ( L1 L# V+ N# L1 {+ U0 \& p
  10. function beClicked(ctx, state, entity, player) {// player: WapperedEntity 包装了 Entity(Player) 为js提供一些基本的方法和属性5 @1 l- [' _) _; A) n& m
  11.     let p = player.getPosition();  l2 |5 l) j9 h
  12.     p.add(0, 1.5, 0);// 假定头在脚底往上1.5m
    % d& k0 a+ r6 _: [+ \: X
  13.     ctx.setDebugInfo("Clicked on ", "shift: " + player.isShiftKeyDown(), "look angle: " + player.getLookAngle(), "from: " + p,"time: " + Date.now(), p);
    . {5 Y0 Q: l& r6 v" g* A7 `3 z
  14.     let ti = Date.now();
    # q, h9 Q1 \" e0 Z) {9 s; f" ^
  15.     // DrawCall为一个接口 仅有一个commit方法; p1 V2 ~: W# u) s2 w
  16.     let call = new DrawCall({commit: (drawScheduler, basePose, worldPose, light) => {// 差不多是这样的 包含commit方法的对象 -> 转换为DrawCall对象/ A6 O, Z: F1 q/ U
  17.         try {" H/ K& t/ v2 e; q, e4 G
  18.             let pose = worldPose.copy();
    + A- p# p# I. v0 p
  19.             pose.translate(p);1 I3 l0 |% j! u% v" ]- U
  20.             pose.translate(0, (Date.now() - ti) / 1000 * 0.4, 0);$ p+ N% z7 {9 Y. |) L2 G" ]1 f

  21. ! W# w% W8 U" Z! X
  22.             let buf = FloatBuffer.allocate(16);. r/ R4 l; w5 ]% d& W' ^
  23.             pose.store(buf);5 x9 a" X) i; D5 U, s) H
  24.             ! ?2 ~  u! o# _% b5 [. Y# r+ [
  25.             buf.put(0, 1);$ `& }$ ~) C$ E  i; Z
  26.             buf.put(1, 0);9 A: z! D" O- g4 S0 [+ p
  27.             buf.put(2, 0);
    : c- E2 |5 r/ k' c
  28.             buf.put(3, 0);" o* I6 g8 ]  F; z1 K% W$ J$ A: T
  29. . ?3 l* k5 Y9 f, p' A' Y9 m
  30.             buf.put(4, 0);
    8 W& I: p% Y+ Q% {: W7 Y
  31.             buf.put(5, 1);
    5 N) p- M: u' |+ Y! C" K8 Y
  32.             buf.put(6, 0);% [4 P( J7 ~' X4 T8 S# c
  33.             buf.put(7, 0);8 G6 P& b* @% r5 d- k4 x

  34. 2 k# {# k3 e$ Q! [
  35.             buf.put(8, 0);! V* ~8 }+ {' o8 r' Z
  36.             buf.put(9, 0);. w6 ~1 q. q, u0 S+ i2 c5 p
  37.             buf.put(10, 1);
    0 a1 ]9 n$ A" w6 Q- D0 F8 {$ ]' t
  38.             buf.put(11, 0);* g4 c0 w! c! G
  39. / ?' n) M3 E  |4 v  l/ z. M) k
  40.             pose.load(buf);// 清空旋转信息 始终面向摄像机& z' E7 K' w# g8 N5 ?

  41. , p! ~4 F# b" x* b1 n) G. K
  42.             drawScheduler.enqueue(model, pose, light);" y9 [( C/ Q, D* T9 K
  43.         } catch (e) {
    3 [! V- u. V2 a2 }; Q# U
  44.             ctx.setDebugInfo("Error", e.toString());+ b. I& |7 y  r/ r
  45.         }
    ( O$ g% ?: J( Q- \' R
  46.     }});
    7 p' `7 t; A# t4 H" ]
  47.     ctx.drawCalls.put(state.num, call);
    ; K1 p9 e4 N  ?; O; k3 H
  48.     // 亦可以直接使用 ctx.drawCalls.put(state.num, (drawScheduler, basePose, worldPose, light) => {...});
    % c! t, k$ ]5 d' C/ X8 C+ B2 Y
  49.     // 即 function -> lambda表达式(java) -> DrawCall对象
    ! r) q- y- \1 w5 B: q
  50.     state.num++;
    2 v9 }4 Z% S# U! ~5 H7 y+ ]
  51. }
复制代码

( Z& Q- h" G8 Z) P- _5 b; Z5 `) _+ n3 {3 C
请注意 beClicked 只会在当前客户端执行一次 若需要多端同步请将数据保存在 entity.data 中(
+ Z$ h5 z/ i: ^/ N- |' b7 y' s' B! O9 c, N/ z$ T
有事加我QQ: 3435494979
Hobbytimeblank 作者认证 2024-12-31 22:29:41
大佬!干得漂亮!新年快乐!
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表