Skip to content

Commit a98ca0a

Browse files
committed
DemoFX Christmas 2017
1 parent e0ff4e9 commit a98ca0a

27 files changed

+1211
-82
lines changed

run.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
export CLASSPATH=build/libs/DemoFX.jar
44

55
# May need to set -Xmx1024m on low RAM machines
6-
"$JAVA_HOME/bin/java" -jar $CLASSPATH $@
6+
"$JAVA_HOME/bin/java" -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -Xloggc:demofx.gc.log -jar $CLASSPATH $@

src/main/java/com/chrisnewland/demofx/DemoAnimationTimer.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public class DemoAnimationTimer extends AnimationTimer
4747
public DemoAnimationTimer(DemoFX parent, DemoConfig config, Label statsLabel, List<IEffect> effects)
4848
{
4949
super();
50-
50+
5151
this.parent = parent;
5252
this.config = config;
5353
this.onScreenGC = config.getOnScreenCanvasGC();
@@ -61,6 +61,7 @@ public DemoAnimationTimer(DemoFX parent, DemoConfig config, Label statsLabel, Li
6161
public void start()
6262
{
6363
super.start();
64+
6465
startTime = System.currentTimeMillis();
6566
scriptStartTimeMillis = startTime;
6667

@@ -180,7 +181,7 @@ private String getStatsString(long now, int framesPerSecond)
180181

181182
builder.append(framesPerSecond).append(" fps | ");
182183

183-
if (config.isUseScriptedDemoConfig())
184+
if (config.getDemoScriptName() != null)
184185
{
185186
long elapsedSeconds = (now - scriptStartTimeMillis) / 1000L;
186187
builder.append("Demo mode: ").append(elapsedSeconds).append("s | ");
@@ -222,4 +223,4 @@ else if (nanos > 5_000L)
222223
builder.append(nanos).append("ns");
223224
}
224225
}
225-
}
226+
}

src/main/java/com/chrisnewland/demofx/DemoConfig.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public enum PlotMode
3535

3636
private PlotMode plotMode = PlotMode.PLOT_MODE_FILL_POLYGON;
3737

38-
private boolean useScriptedDemoConfig = false;
38+
private String demoScriptName = null;
3939

4040
private Group groupNode;
4141
private GraphicsContext onScreenCanvasGC;
@@ -188,11 +188,8 @@ else if ("fill".equals(value.toLowerCase()))
188188
break;
189189
// =======================================
190190
case "s":
191-
if ("true".equals(value.toLowerCase()))
192-
{
193-
config.useScriptedDemoConfig = true;
191+
config.demoScriptName = value.toLowerCase();
194192
config.effect = "script mode";
195-
}
196193
break;
197194
case "f":
198195
if ("true".equals(value.toLowerCase()))
@@ -312,9 +309,9 @@ public boolean isLookupRandom()
312309
return lookupRandom;
313310
}
314311

315-
public boolean isUseScriptedDemoConfig()
312+
public String getDemoScriptName()
316313
{
317-
return useScriptedDemoConfig;
314+
return demoScriptName;
318315
}
319316

320317
public boolean isFullScreen()

src/main/java/com/chrisnewland/demofx/DemoFX.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.List;
1212

1313
import com.chrisnewland.demofx.effect.IEffect;
14+
import com.chrisnewland.demofx.effect.effectfactory.ChristmasFXScriptFactory;
1415
import com.chrisnewland.demofx.effect.effectfactory.DemoFX3ScriptFactory;
1516
import com.chrisnewland.demofx.effect.effectfactory.IEffectFactory;
1617
import com.chrisnewland.demofx.effect.effectfactory.SimpleEffectFactory;
@@ -114,10 +115,19 @@ public Scene getScene()
114115
{
115116
IEffectFactory effectFactory;
116117

117-
if (config.isUseScriptedDemoConfig())
118-
{
119-
effectFactory = new DemoFX3ScriptFactory();
118+
String scriptName = config.getDemoScriptName();
120119

120+
if (scriptName != null)
121+
{
122+
switch (scriptName)
123+
{
124+
case "xmas":
125+
effectFactory = new ChristmasFXScriptFactory();
126+
break;
127+
default:
128+
effectFactory = new DemoFX3ScriptFactory();
129+
break;
130+
}
121131
}
122132
else
123133
{
@@ -162,9 +172,17 @@ public Scene getScene()
162172

163173
scene.setCamera(new PerspectiveCamera());
164174

165-
String styleSheet = DemoFX.class.getResource("/style.css").toExternalForm();
175+
try
176+
{
177+
String styleSheet = DemoFX.class.getResource("/style.css").toExternalForm();
166178

167-
scene.getStylesheets().add(styleSheet);
179+
scene.getStylesheets().add(styleSheet);
180+
}
181+
catch (Exception e)
182+
{
183+
e.printStackTrace();
184+
System.err.println("Could not load style.css stylesheet. Please add it to the classpath");
185+
}
168186

169187
return scene;
170188
}

src/main/java/com/chrisnewland/demofx/effect/background/ImageBackground.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import com.chrisnewland.demofx.DemoConfig;
88
import com.chrisnewland.demofx.effect.AbstractEffect;
9+
import com.chrisnewland.demofx.util.ImageUtil;
910

1011
import javafx.scene.image.Image;
1112

@@ -17,7 +18,7 @@ public ImageBackground(DemoConfig config)
1718
{
1819
super(config);
1920

20-
init("/javafx.png");
21+
init("javafx.png");
2122
}
2223

2324
public ImageBackground(DemoConfig config, String filename)
@@ -29,8 +30,7 @@ public ImageBackground(DemoConfig config, String filename)
2930

3031
private void init(String imageName)
3132
{
32-
image = new Image(getClass().getResourceAsStream(imageName));
33-
33+
image = ImageUtil.loadImageFromResources(imageName);
3434
}
3535

3636
@Override
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* Copyright (c) 2015-2017 Chris Newland.
3+
* Licensed under https://github.com/chriswhocodes/demofx/blob/master/LICENSE-BSD
4+
*/
5+
package com.chrisnewland.demofx.effect.effectfactory;
6+
7+
import java.util.ArrayList;
8+
import java.util.List;
9+
10+
import com.chrisnewland.demofx.DemoConfig;
11+
import com.chrisnewland.demofx.effect.IEffect;
12+
import com.chrisnewland.demofx.effect.fade.FadeOutEffect;
13+
import com.chrisnewland.demofx.effect.fake3d.SnowField;
14+
import com.chrisnewland.demofx.effect.ray.RayTrace;
15+
import com.chrisnewland.demofx.effect.real3d.TexturedCube;
16+
import com.chrisnewland.demofx.effect.text.TextWaveSprite;
17+
import com.chrisnewland.demofx.util.ImageUtil;
18+
19+
import javafx.scene.image.Image;
20+
import javafx.scene.image.WritableImage;
21+
22+
public class ChristmasFXScriptFactory implements IEffectFactory
23+
{
24+
private List<IEffect> effects = new ArrayList<>();
25+
26+
@Override
27+
public List<IEffect> getEffects(DemoConfig config)
28+
{
29+
String audio = getClass().getResource("/silent.wav").toExternalForm();
30+
31+
config.setAudioFilename(audio);
32+
33+
Image snowflake = ImageUtil.loadImageFromResources("flake.png");
34+
35+
// https://pixabay.com/en/wrapping-paper-santa-clauses-funny-235940/
36+
WritableImage paper = ImageUtil.loadWritableImageFromResources("paper.jpg");
37+
38+
long length = 48_000;
39+
40+
addEffect(0, length, new RayTrace(config));
41+
addEffect(0, length, new SnowField(config, 8000, snowflake));
42+
43+
addEffect(0, length, new TexturedCube(config, paper, 240, 1, 1, 240, 480, 32, 32));
44+
45+
addEffect(0, length, new TextWaveSprite(config, new String[]
46+
{
47+
"Merry Christmas from chriswhocodes and DemoFX", "Wishing you a bug-free new year", "May your build systems behave, your unit tests run green, and may father JITmas bring you all the speedups you asked for ..."
48+
}, config.getHeight() * 0.1, 0.75, 6));
49+
50+
addEffect(length - 5_000, length+1000, new FadeOutEffect(config));
51+
52+
return effects;
53+
}
54+
55+
private void addEffect(long start, long duration, IEffect effect)
56+
{
57+
effect.setStartOffsetMillis(start);
58+
effect.setStopOffsetMillis(start + duration);
59+
effects.add(effect);
60+
61+
System.out.println("Adding " + start + " to " + (start + duration) + " " + effect.getClass().getName());
62+
}
63+
}

src/main/java/com/chrisnewland/demofx/effect/effectfactory/SimpleEffectFactory.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import com.chrisnewland.demofx.DemoConfig;
1111
import com.chrisnewland.demofx.effect.IEffect;
12+
import com.chrisnewland.demofx.effect.background.BinaryBackground;
1213
import com.chrisnewland.demofx.effect.background.ColourBackground;
1314
import com.chrisnewland.demofx.effect.background.CycleBackground;
1415
import com.chrisnewland.demofx.effect.background.ImageBackground;
@@ -17,6 +18,7 @@
1718
import com.chrisnewland.demofx.effect.fake3d.Starfield;
1819
import com.chrisnewland.demofx.effect.fake3d.StarfieldSprite;
1920
import com.chrisnewland.demofx.effect.fake3d.Tunnel;
21+
import com.chrisnewland.demofx.effect.fractal.ChristmasTrees;
2022
import com.chrisnewland.demofx.effect.fractal.Mandelbrot;
2123
import com.chrisnewland.demofx.effect.fractal.Sierpinski;
2224
import com.chrisnewland.demofx.effect.pixel.Blur;
@@ -26,6 +28,7 @@
2628
import com.chrisnewland.demofx.effect.pixel.Rainbow;
2729
import com.chrisnewland.demofx.effect.pixel.Shift;
2830
import com.chrisnewland.demofx.effect.pixel.Twister;
31+
import com.chrisnewland.demofx.effect.pixel.TwisterSprite;
2932
import com.chrisnewland.demofx.effect.ray.RayTrace;
3033
import com.chrisnewland.demofx.effect.real3d.CubeField;
3134
import com.chrisnewland.demofx.effect.real3d.TexturedCube;
@@ -37,6 +40,7 @@
3740
import com.chrisnewland.demofx.effect.shape.Cogs;
3841
import com.chrisnewland.demofx.effect.shape.Concentric;
3942
import com.chrisnewland.demofx.effect.shape.Diamonds;
43+
import com.chrisnewland.demofx.effect.shape.GCVisualiser;
4044
import com.chrisnewland.demofx.effect.shape.Glowboard;
4145
import com.chrisnewland.demofx.effect.shape.Grid;
4246
import com.chrisnewland.demofx.effect.shape.Honeycomb;
@@ -101,12 +105,14 @@ public List<IEffect> getEffects(DemoConfig config)
101105
{
102106
availableEffectNames = new ArrayList<>();
103107

108+
availableEffectNames.add("binarybackground");
104109
availableEffectNames.add("blur");
105110
availableEffectNames.add("bobs");
106111
availableEffectNames.add("bounce");
107112
availableEffectNames.add("burst");
108113
availableEffectNames.add("checkerboard");
109114
availableEffectNames.add("chord");
115+
availableEffectNames.add("christmastrees");
110116
availableEffectNames.add("chromakey");
111117
availableEffectNames.add("cogs");
112118
availableEffectNames.add("colourbackground");
@@ -122,6 +128,7 @@ public List<IEffect> getEffects(DemoConfig config)
122128
availableEffectNames.add("feedback");
123129
availableEffectNames.add("fireworks");
124130
availableEffectNames.add("flash");
131+
availableEffectNames.add("gc");
125132
availableEffectNames.add("glowboard");
126133
availableEffectNames.add("grid");
127134
availableEffectNames.add("hexagons");
@@ -169,6 +176,7 @@ public List<IEffect> getEffects(DemoConfig config)
169176
availableEffectNames.add("triangles");
170177
availableEffectNames.add("tubestack");
171178
availableEffectNames.add("twister");
179+
availableEffectNames.add("twistersprite");
172180
availableEffectNames.add("vumeter");
173181
availableEffectNames.add("wordsearch");
174182
}
@@ -192,6 +200,9 @@ private IEffect getEffect(String name, DemoConfig config)
192200
throw new UnsupportedOperationException(
193201
"AnimatedTexturedCube can't be run solo, must be combined with an effect that generates the texture");
194202

203+
case "binarybackground":
204+
return new BinaryBackground(config);
205+
195206
case "blur":
196207
return new Blur(config);
197208

@@ -209,6 +220,9 @@ private IEffect getEffect(String name, DemoConfig config)
209220

210221
case "chord":
211222
return new Chord(config);
223+
224+
case "christmastrees":
225+
return new ChristmasTrees(config);
212226

213227
case "chromakey":
214228
return new ChromaKey(config);
@@ -255,6 +269,9 @@ private IEffect getEffect(String name, DemoConfig config)
255269
case "flash":
256270
return new TextFlash(config);
257271

272+
case "gc":
273+
return new GCVisualiser(config);
274+
258275
case "glowboard":
259276
return new Glowboard(config);
260277

@@ -397,6 +414,9 @@ private IEffect getEffect(String name, DemoConfig config)
397414

398415
case "twister":
399416
return new Twister(config);
417+
418+
case "twistersprite":
419+
return new TwisterSprite(config);
400420

401421
case "vumeter":
402422
return new VUMeter(config);

0 commit comments

Comments
 (0)