Skip to content

Commit a2e38f4

Browse files
committed
feat:Update example app feature
1 parent bee6ae3 commit a2e38f4

2 files changed

Lines changed: 39 additions & 0 deletions

File tree

example/src/main/java/dev/eatgrapes/live2d/example/ControlPanel.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,33 @@ public static void show() {
2828
addExprButton(exprPanel, "Default", "Default");
2929
frame.add(exprPanel);
3030

31+
JPanel paramPanel = new JPanel(new GridLayout(0, 1));
32+
paramPanel.setBorder(BorderFactory.createTitledBorder("Parameters"));
33+
addSlider(paramPanel, "Angle X", "ParamAngleX", -30, 30, 0);
34+
addSlider(paramPanel, "Angle Y", "ParamAngleY", -30, 30, 0);
35+
addSlider(paramPanel, "Eye L Open", "ParamEyeLOpen", 0, 1, 1);
36+
addSlider(paramPanel, "Eye R Open", "ParamEyeROpen", 0, 1, 1);
37+
addSlider(paramPanel, "Mouth Open", "ParamMouthOpenY", 0, 1, 0);
38+
addSlider(paramPanel, "Body X", "ParamBodyAngleX", -10, 10, 0);
39+
frame.add(paramPanel);
40+
3141
frame.setVisible(true);
3242
});
3343
}
3444

45+
private static void addSlider(JPanel panel, String label, String id, float min, float max, float initial) {
46+
JPanel p = new JPanel(new BorderLayout());
47+
JLabel l = new JLabel(label);
48+
p.add(l, BorderLayout.WEST);
49+
JSlider slider = new JSlider((int)(min * 100), (int)(max * 100), (int)(initial * 100));
50+
slider.addChangeListener(e -> {
51+
float val = slider.getValue() / 100.0f;
52+
sendRequest("/parameter?id=" + id + "&value=" + val);
53+
});
54+
p.add(slider, BorderLayout.CENTER);
55+
panel.add(p);
56+
}
57+
3558
private static void addMotionButton(JPanel panel, String label, String id) {
3659
JButton btn = new JButton(label);
3760
btn.addActionListener(e -> sendRequest("/motion?id=" + id));

example/src/main/java/dev/eatgrapes/live2d/example/Main.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,22 @@ private void startServer() throws Exception {
5959
t.sendResponseHeaders(200, 0);
6060
t.close();
6161
});
62+
server.createContext("/parameter", t -> {
63+
String query = t.getRequestURI().getQuery();
64+
String[] parts = query.split("&");
65+
String id = "";
66+
float value = 0;
67+
for (String part : parts) {
68+
String[] kv = part.split("=");
69+
if (kv[0].equals("id")) id = kv[1];
70+
else if (kv[0].equals("value")) value = Float.parseFloat(kv[1]);
71+
}
72+
String finalId = id;
73+
float finalValue = value;
74+
taskQueue.add(() -> model.setParameterValue(finalId, finalValue));
75+
t.sendResponseHeaders(200, 0);
76+
t.close();
77+
});
6278
server.setExecutor(null);
6379
server.start();
6480
System.out.println("Control server started on port 8080");

0 commit comments

Comments
 (0)