User prompt
Remove the top beaker in Jan Ingenhousz's experiment
User prompt
In Jan Ingenhousz's experiment, oxygen bubbles are released from the plant. There are three options: morning, noon, and night. In the morning, the bubbles are few, in the afternoon, they are many, and at night, they are none. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
In Jan Ingenhousz's experiment, fill the glass beaker completely with water. Let the test tube touch the bottom of the glass beaker. Move the plant even lower. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
In Jan Ingenhousz's experiment, remove the soil from the plant. Place the plant at the bottom of a glass beaker. Let's use the plant2 image I created as the image of the plant. Grow the plant so that it doesn't overflow the glass beaker. Place an empty test tube upside down on top of the plant.
User prompt
In Jan Ingenhousz's experience, place the plant and the glass beaker at the bottom in a large way. Remove the soil as if the plant were inside the glass beaker. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Use the glassbeaker in the visual tab as the glass beaker in Jan Ingenhousz's experiment.
User prompt
Remove the soil from Jan Ingenhousz's experiment and reduce the size of the glass to a small square shape. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Remove the soil and light from Jan Ingenhousz's experiment. Place a sun in the upper left corner to make the glass beaker more realistic. Also, make the beaker large enough to surround the plant. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Remove the caption from Jan Ingenhousz's experiment and enlarge the images to center the page.
User prompt
When we press the play button when we enter the game, we will be presented with two options. The first option is the plant growing experience. The second option is the Jan Ingenhousz experience. When the first option is selected, we will be presented with the plant growing experiment we have done. When the second option is selected, we will be presented with a plant in a glass container. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
enlarge the text on the control buttons
User prompt
Add a start screen to the game and have a play button. Press the button and the game will start. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
The light coming from the lamp hits the plant depending on the color of the light we choose. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
put the plants in the pot and make the pot transparent
User prompt
wipe the leaves ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Show the oxygen released from plants and write O2 on it ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Even if the light level is 0, the plant will grow but less. If the light level of the plant on the left is purple and the light level is 100, it will be the same as the one on the right. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Let the plant on the right be the largest plant ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
All things being equal, plants should be of equal size.
User prompt
Animate the plants and when we first enter the game, the plant on the left will be just a seed and the plant will grow as we increase the water and sun level ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
carry the light hitting the plant up and the rays coming out of the light ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Remove the control buttons and put only color-changing buttons on the right side
User prompt
carry the leaves of the plants on it
User prompt
arrange the leaves of the plants properly
User prompt
restore the plant and pot
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var ControlPanel = Container.expand(function () {
var self = Container.call(this);
// Lamp color controls only
self.lampGreenBtn = self.attachAsset('controlButton', {
anchorX: 0.5,
anchorY: 0.5,
y: 0,
tint: 0x32cd32
});
self.lampYellowBtn = self.attachAsset('controlButton', {
anchorX: 0.5,
anchorY: 0.5,
y: 60,
tint: 0xffd700
});
self.lampPurpleBtn = self.attachAsset('controlButton', {
anchorX: 0.5,
anchorY: 0.5,
y: 120,
tint: 0x9932cc
});
self.onLampColorChange = null;
self.lampGreenBtn.down = function () {
if (self.onLampColorChange) self.onLampColorChange(0x32cd32);
};
self.lampYellowBtn.down = function () {
if (self.onLampColorChange) self.onLampColorChange(0xffd700);
};
self.lampPurpleBtn.down = function () {
if (self.onLampColorChange) self.onLampColorChange(0x9932cc);
};
return self;
});
var LightSlider = Container.expand(function () {
var self = Container.call(this);
self.value = 0;
self.isDragging = false;
var track = self.attachAsset('sliderTrack', {
anchorX: 0.5,
anchorY: 0.5
});
self.handle = self.attachAsset('sliderHandle', {
anchorX: 0.5,
anchorY: 0.5,
x: -180
});
self.lightBulb = self.attachAsset('lightBulb', {
anchorX: 0.5,
anchorY: 0.5,
x: -220,
y: 0
});
self.updateHandle = function () {
self.handle.x = -180 + self.value * 360;
// Update light bulb brightness based on value
var brightness = 0.3 + self.value * 0.7;
self.lightBulb.alpha = brightness;
tween(self.lightBulb, {
scaleX: 1 + self.value * 0.3,
scaleY: 1 + self.value * 0.3
}, {
duration: 200
});
};
self.setValue = function (value) {
self.value = Math.max(0, Math.min(1, value));
self.updateHandle();
};
self.down = function (x, y, obj) {
self.isDragging = true;
var localX = x + 180;
self.setValue(localX / 360);
};
self.onValueChange = null;
self.update = function () {
if (self.isDragging && self.onValueChange) {
self.onValueChange(self.value);
}
};
return self;
});
var Plant = Container.expand(function (isAutomatic) {
var self = Container.call(this);
// Plant properties
self.isAutomatic = isAutomatic || false;
self.waterLevel = 0;
self.lightLevel = 0;
self.size = 1;
self.leafColor = 0x32CD32;
self.leafCount = 2;
self.lampColor = 0xffd700; // Default yellow
// Create plant components
var pot = self.attachAsset('pot', {
anchorX: 0.5,
anchorY: 1,
alpha: 0.3
});
var soil = self.attachAsset('soil', {
anchorX: 0.5,
anchorY: 1,
y: -20
});
self.stem = self.attachAsset('stem', {
anchorX: 0.5,
anchorY: 1,
y: -20
});
self.leaves = [];
// Add table lamp
self.tableLamp = self.addChild(new TableLamp());
self.tableLamp.x = -200;
self.tableLamp.y = -100;
self.createLeaves = function () {
// Remove existing leaves
for (var i = 0; i < self.leaves.length; i++) {
self.leaves[i].destroy();
}
self.leaves = [];
// Create new leaves
for (var i = 0; i < self.leafCount; i++) {
var leaf = self.attachAsset('leaf', {
anchorX: 0.5,
anchorY: 0.5,
tint: self.leafColor
});
var angle = i / self.leafCount * Math.PI * 2;
leaf.x = Math.cos(angle) * 30;
leaf.y = -80 + Math.sin(angle) * 10;
leaf.rotation = angle;
self.leaves.push(leaf);
}
};
self.createLeaves();
self.updatePlant = function () {
if (self.isAutomatic) {
// Base growth from water alone (reduced), plus bonus from light
var baseGrowth = self.waterLevel * 0.3; // Plant grows with water alone but less
var lightBonus = self.waterLevel * self.lightLevel * 0.7; // Additional growth with light
var growthFactor = baseGrowth + lightBonus;
var targetSize = 0.1; // Seed size when no growth
// Determine size based on lamp color
if (self.lampColor === 0x32cd32) {
// Green - smallest max size
targetSize = 0.1 + growthFactor * 1.4; // Small
self.tableLamp.setLampColor(0x32cd32);
} else if (self.lampColor === 0xffd700) {
// Yellow - medium max size
targetSize = 0.1 + growthFactor * 2.1; // Medium
self.tableLamp.setLampColor(0xffd700);
} else if (self.lampColor === 0x9932cc) {
// Purple - matches right plant when at 100% water and light
targetSize = 0.1 + growthFactor * 2.8; // Large - matches controlledPlant size 3.0
self.tableLamp.setLampColor(0x9932cc);
}
// Smooth transition to new size with tween
tween(self, {
size: targetSize
}, {
duration: 800,
easing: tween.easeOut
});
}
// Animate plant components with smooth transitions
tween(self.stem, {
scaleY: self.size,
scaleX: Math.max(0.5, self.size * 0.8)
}, {
duration: 600,
easing: tween.easeOut
});
for (var i = 0; i < self.leaves.length; i++) {
var leaf = self.leaves[i];
var targetY = -60 - self.size * 30 + Math.sin(i / self.leafCount * Math.PI * 2) * 10;
tween(leaf, {
scaleX: self.size,
scaleY: self.size,
y: targetY
}, {
duration: 600,
easing: tween.easeOut
});
leaf.tint = self.leafColor;
}
};
self.setWaterLevel = function (level) {
self.waterLevel = Math.max(0, Math.min(1, level));
self.updatePlant();
};
self.setLightLevel = function (level) {
self.lightLevel = Math.max(0, Math.min(1, level));
self.updatePlant();
};
self.setSize = function (size) {
if (!self.isAutomatic) {
self.size = Math.max(0.3, Math.min(3, size));
self.updatePlant();
}
};
self.setLeafColor = function (color) {
if (!self.isAutomatic) {
self.leafColor = color;
self.updatePlant();
}
};
self.setLeafCount = function (count) {
if (!self.isAutomatic) {
self.leafCount = Math.max(1, Math.min(8, count));
self.createLeaves();
self.updatePlant();
}
};
self.setLampColor = function (color) {
self.lampColor = color;
if (self.tableLamp) {
self.tableLamp.setLampColor(color);
}
self.updatePlant();
};
self.wipeLeaf = function (leafIndex) {
if (leafIndex >= 0 && leafIndex < self.leaves.length) {
var leaf = self.leaves[leafIndex];
// Create wiping animation - scale down and fade out briefly
tween(leaf, {
scaleX: leaf.scaleX * 0.8,
scaleY: leaf.scaleY * 0.8,
alpha: 0.5
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
// Scale back up and fade in to show clean leaf
tween(leaf, {
scaleX: self.size,
scaleY: self.size,
alpha: 1.0,
tint: 0x32ff32 // Brighter green to show cleanliness
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
// Fade back to normal color after a moment
tween(leaf, {
tint: self.leafColor
}, {
duration: 1000,
easing: tween.easeOut
});
}
});
}
});
}
};
// Add down event handler for leaf wiping
self.down = function (x, y, obj) {
// Check if click is on any leaf
for (var i = 0; i < self.leaves.length; i++) {
var leaf = self.leaves[i];
var leafGlobalPos = leaf.parent.toGlobal(leaf.position);
var distance = Math.sqrt(Math.pow(leafGlobalPos.x - x, 2) + Math.pow(leafGlobalPos.y - y, 2));
// If click is within leaf radius (approximately 50 pixels when scaled)
if (distance < 50 * leaf.scaleX) {
self.wipeLeaf(i);
break;
}
}
};
return self;
});
var StartScreen = Container.expand(function () {
var self = Container.call(this);
// Create semi-transparent background
var background = self.attachAsset('soil', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 10,
scaleY: 50,
alpha: 0.8,
tint: 0x2C3E50
});
background.x = 1024;
background.y = 1366;
// Create title
var titleText = new Text2('Plant Growth Experiment', {
size: 120,
fill: 0x27AE60
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 800;
self.addChild(titleText);
// Create play button
self.playButton = self.attachAsset('controlButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 2,
tint: 0x27AE60
});
self.playButton.x = 1024;
self.playButton.y = 1200;
// Play button text
var playText = new Text2('PLAY', {
size: 60,
fill: 0xFFFFFF
});
playText.anchor.set(0.5, 0.5);
playText.x = 1024;
playText.y = 1200;
self.addChild(playText);
// Instructions text
var instructText = new Text2('Watch how plants grow with water and light!\nTap PLAY to begin your experiment.', {
size: 40,
fill: 0xFFFFFF
});
instructText.anchor.set(0.5, 0.5);
instructText.x = 1024;
instructText.y = 1400;
self.addChild(instructText);
// Play button handler
self.playButton.down = function () {
if (self.onPlayClicked) {
self.onPlayClicked();
}
};
self.onPlayClicked = null;
return self;
});
var TableLamp = Container.expand(function () {
var self = Container.call(this);
// Create lamp components
self.base = self.attachAsset('lampBase', {
anchorX: 0.5,
anchorY: 1
});
self.lamp = self.attachAsset('tableLamp', {
anchorX: 0.5,
anchorY: 1,
y: -20
});
self.setLampColor = function (color) {
tween(self.lamp, {
tint: color
}, {
duration: 500,
easing: tween.easeOut
});
};
return self;
});
var WaterSlider = Container.expand(function () {
var self = Container.call(this);
self.value = 0;
self.isDragging = false;
var track = self.attachAsset('sliderTrack', {
anchorX: 0.5,
anchorY: 0.5
});
self.handle = self.attachAsset('sliderHandle', {
anchorX: 0.5,
anchorY: 0.5,
x: -180
});
self.updateHandle = function () {
self.handle.x = -180 + self.value * 360;
};
self.setValue = function (value) {
self.value = Math.max(0, Math.min(1, value));
self.updateHandle();
};
self.down = function (x, y, obj) {
self.isDragging = true;
var localX = x + 180;
self.setValue(localX / 360);
};
self.onValueChange = null;
self.update = function () {
if (self.isDragging && self.onValueChange) {
self.onValueChange(self.value);
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Game state management
var gameState = 'start'; // 'start' or 'playing'
var startScreen = null;
// No laws button found to remove - the code remains unchanged
var automaticPlant = new Plant(true);
automaticPlant.x = 600;
automaticPlant.y = 1800;
game.addChild(automaticPlant);
var controlledPlant = new Plant(false);
controlledPlant.x = 1400;
controlledPlant.y = 1800;
// Set second plant to maximum size with optimal conditions
controlledPlant.setWaterLevel(1.0); // Maximum water
controlledPlant.setLightLevel(1.0); // Maximum light
controlledPlant.setSize(3.0); // Set to largest possible size
game.addChild(controlledPlant);
// Create water slider
var waterSlider = new WaterSlider();
waterSlider.x = 1024;
waterSlider.y = 2200;
game.addChild(waterSlider);
// Create light slider
var lightSlider = new LightSlider();
lightSlider.x = 1024;
lightSlider.y = 2450;
game.addChild(lightSlider);
// Create control panel for second plant
var controlPanel = new ControlPanel();
controlPanel.x = 1750;
controlPanel.y = 1200;
game.addChild(controlPanel);
// Create labels
var titleText = new Text2('Plant Growth Experiment', {
size: 80,
fill: 0x2C3E50
});
titleText.anchor.set(0.5, 0);
titleText.x = 1024;
titleText.y = 100;
game.addChild(titleText);
var autoLabel = new Text2('Automatic Plant', {
size: 50,
fill: 0x27AE60
});
autoLabel.anchor.set(0.5, 0);
autoLabel.x = 600;
autoLabel.y = 1850;
game.addChild(autoLabel);
var controlLabel = new Text2('Controlled Plant', {
size: 50,
fill: 0xE67E22
});
controlLabel.anchor.set(0.5, 0);
controlLabel.x = 1400;
controlLabel.y = 1850;
game.addChild(controlLabel);
var waterLabel = new Text2('Water Level', {
size: 40,
fill: 0x34495E
});
waterLabel.anchor.set(0.5, 0);
waterLabel.x = 1024;
waterLabel.y = 2300;
game.addChild(waterLabel);
var lightLabel = new Text2('Light Level', {
size: 40,
fill: 0x34495E
});
lightLabel.anchor.set(0.5, 0);
lightLabel.x = 1024;
lightLabel.y = 2550;
game.addChild(lightLabel);
var controlsLabel = new Text2('Controls', {
size: 40,
fill: 0x34495E
});
controlsLabel.anchor.set(0.5, 0);
controlsLabel.x = 1750;
controlsLabel.y = 1000;
game.addChild(controlsLabel);
// Lamp color button labels only
var lampGreenLabel = new Text2('Green', {
size: 18,
fill: 0xFFFFFF
});
lampGreenLabel.anchor.set(0.5, 0.5);
lampGreenLabel.x = 1750;
lampGreenLabel.y = 1200;
game.addChild(lampGreenLabel);
var lampYellowLabel = new Text2('Yellow', {
size: 18,
fill: 0xFFFFFF
});
lampYellowLabel.anchor.set(0.5, 0.5);
lampYellowLabel.x = 1750;
lampYellowLabel.y = 1260;
game.addChild(lampYellowLabel);
var lampPurpleLabel = new Text2('Purple', {
size: 18,
fill: 0xFFFFFF
});
lampPurpleLabel.anchor.set(0.5, 0.5);
lampPurpleLabel.x = 1750;
lampPurpleLabel.y = 1320;
game.addChild(lampPurpleLabel);
// Water level display
var waterLevelText = new Text2('0%', {
size: 60,
fill: 0x2980B9
});
waterLevelText.anchor.set(0.5, 0);
waterLevelText.x = 1024;
waterLevelText.y = 2350;
game.addChild(waterLevelText);
// Light level display
var lightLevelText = new Text2('0%', {
size: 60,
fill: 0xFFD700
});
lightLevelText.anchor.set(0.5, 0);
lightLevelText.x = 1024;
lightLevelText.y = 2600;
game.addChild(lightLevelText);
// Initialize sliders to zero position for seed state
waterSlider.setValue(0.0);
lightSlider.setValue(0.0);
// Create and show start screen initially
startScreen = new StartScreen();
game.addChild(startScreen);
// Hide game elements initially
automaticPlant.visible = false;
controlledPlant.visible = false;
waterSlider.visible = false;
lightSlider.visible = false;
controlPanel.visible = false;
titleText.visible = false;
autoLabel.visible = false;
controlLabel.visible = false;
waterLabel.visible = false;
lightLabel.visible = false;
controlsLabel.visible = false;
lampGreenLabel.visible = false;
lampYellowLabel.visible = false;
lampPurpleLabel.visible = false;
waterLevelText.visible = false;
lightLevelText.visible = false;
// Start screen play button handler
startScreen.onPlayClicked = function () {
gameState = 'playing';
// Hide start screen with fade out animation
tween(startScreen, {
alpha: 0
}, {
duration: 500,
easing: tween.easeOut,
onFinish: function onFinish() {
startScreen.visible = false;
// Show game elements with fade in
automaticPlant.visible = true;
controlledPlant.visible = true;
waterSlider.visible = true;
lightSlider.visible = true;
controlPanel.visible = true;
titleText.visible = true;
autoLabel.visible = true;
controlLabel.visible = true;
waterLabel.visible = true;
lightLabel.visible = true;
controlsLabel.visible = true;
lampGreenLabel.visible = true;
lampYellowLabel.visible = true;
lampPurpleLabel.visible = true;
waterLevelText.visible = true;
lightLevelText.visible = true;
// Fade in game elements
var elementsToFade = [automaticPlant, controlledPlant, waterSlider, lightSlider, controlPanel, titleText, autoLabel, controlLabel, waterLabel, lightLabel, controlsLabel, lampGreenLabel, lampYellowLabel, lampPurpleLabel, waterLevelText, lightLevelText];
for (var i = 0; i < elementsToFade.length; i++) {
elementsToFade[i].alpha = 0;
tween(elementsToFade[i], {
alpha: 1
}, {
duration: 800,
easing: tween.easeOut
});
}
}
});
};
// Set initial plant states - automatic plant starts as seed
automaticPlant.setWaterLevel(0.0); // Start with no water
automaticPlant.setLightLevel(0.0); // Start with no light
automaticPlant.size = 0.1; // Start as just a seed
automaticPlant.updatePlant(); // Update to reflect seed state
automaticPlant.setLampColor(0x32cd32); // Start with green lamp for small size
controlledPlant.setLampColor(0x9932cc); // Set controlled plant lamp to purple
// Variables for tracking
var dragNode = null;
var currentWaterLevel = 0.0; // Start with no water for seed state
var currentLightLevel = 0.0; // Start with no light for seed state
// Event handlers
waterSlider.onValueChange = function (value) {
currentWaterLevel = value;
automaticPlant.setWaterLevel(value);
controlledPlant.setWaterLevel(value);
waterLevelText.setText(Math.round(value * 100) + '%');
};
lightSlider.onValueChange = function (value) {
currentLightLevel = value;
automaticPlant.setLightLevel(value);
controlledPlant.setLightLevel(value);
lightLevelText.setText(Math.round(value * 100) + '%');
};
controlPanel.onLampColorChange = function (color) {
automaticPlant.setLampColor(color);
};
// Game move handler for slider dragging
game.move = function (x, y, obj) {
if (waterSlider.isDragging) {
var localPos = waterSlider.toLocal({
x: x,
y: y
});
var newValue = (localPos.x + 180) / 360;
waterSlider.setValue(newValue);
waterSlider.onValueChange(waterSlider.value);
}
if (lightSlider.isDragging) {
var localPos = lightSlider.toLocal({
x: x,
y: y
});
var newValue = (localPos.x + 180) / 360;
lightSlider.setValue(newValue);
lightSlider.onValueChange(lightSlider.value);
}
};
game.up = function (x, y, obj) {
waterSlider.isDragging = false;
lightSlider.isDragging = false;
};
// Create some water drops for visual effect
var waterDrops = [];
var dropTimer = 0;
game.update = function () {
dropTimer++;
// Create water drops periodically if water level > 0
if (currentWaterLevel > 0.1 && dropTimer % 60 == 0) {
for (var i = 0; i < 3; i++) {
var drop = LK.getAsset('waterDrop', {
anchorX: 0.5,
anchorY: 0.5,
x: 800 + Math.random() * 500,
y: 400 + Math.random() * 200
});
drop.speedY = 2 + Math.random() * 3;
drop.alpha = 0.7;
waterDrops.push(drop);
game.addChild(drop);
// Fade and animate the drop
tween(drop, {
y: drop.y + 200,
alpha: 0
}, {
duration: 2000,
onFinish: function onFinish() {
drop.destroy();
}
});
}
// Clean up old drops
for (var j = waterDrops.length - 1; j >= 0; j--) {
if (waterDrops[j].alpha <= 0) {
waterDrops.splice(j, 1);
}
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -195,12 +195,8 @@
self.updatePlant();
};
self.setLightLevel = function (level) {
self.lightLevel = Math.max(0, Math.min(1, level));
- // Update lamp light intensity based on light level
- if (self.tableLamp) {
- self.tableLamp.setLightIntensity(level);
- }
self.updatePlant();
};
self.setSize = function (size) {
if (!self.isAutomatic) {
@@ -224,10 +220,8 @@
self.setLampColor = function (color) {
self.lampColor = color;
if (self.tableLamp) {
self.tableLamp.setLampColor(color);
- // Also update light intensity to current light level
- self.tableLamp.setLightIntensity(self.lightLevel);
}
self.updatePlant();
};
self.wipeLeaf = function (leafIndex) {
@@ -280,8 +274,67 @@
}
};
return self;
});
+var StartScreen = Container.expand(function () {
+ var self = Container.call(this);
+ // Create semi-transparent background
+ var background = self.attachAsset('soil', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 10,
+ scaleY: 50,
+ alpha: 0.8,
+ tint: 0x2C3E50
+ });
+ background.x = 1024;
+ background.y = 1366;
+ // Create title
+ var titleText = new Text2('Plant Growth Experiment', {
+ size: 120,
+ fill: 0x27AE60
+ });
+ titleText.anchor.set(0.5, 0.5);
+ titleText.x = 1024;
+ titleText.y = 800;
+ self.addChild(titleText);
+ // Create play button
+ self.playButton = self.attachAsset('controlButton', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 2,
+ scaleY: 2,
+ tint: 0x27AE60
+ });
+ self.playButton.x = 1024;
+ self.playButton.y = 1200;
+ // Play button text
+ var playText = new Text2('PLAY', {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ playText.anchor.set(0.5, 0.5);
+ playText.x = 1024;
+ playText.y = 1200;
+ self.addChild(playText);
+ // Instructions text
+ var instructText = new Text2('Watch how plants grow with water and light!\nTap PLAY to begin your experiment.', {
+ size: 40,
+ fill: 0xFFFFFF
+ });
+ instructText.anchor.set(0.5, 0.5);
+ instructText.x = 1024;
+ instructText.y = 1400;
+ self.addChild(instructText);
+ // Play button handler
+ self.playButton.down = function () {
+ if (self.onPlayClicked) {
+ self.onPlayClicked();
+ }
+ };
+ self.onPlayClicked = null;
+ return self;
+});
var TableLamp = Container.expand(function () {
var self = Container.call(this);
// Create lamp components
self.base = self.attachAsset('lampBase', {
@@ -292,63 +345,16 @@
anchorX: 0.5,
anchorY: 1,
y: -20
});
- // Create light beams
- self.lightBeams = [];
- self.createLightBeams = function () {
- // Remove existing beams
- for (var i = 0; i < self.lightBeams.length; i++) {
- self.lightBeams[i].destroy();
- }
- self.lightBeams = [];
- // Create multiple light rays from lamp to plant area
- for (var i = 0; i < 5; i++) {
- var beam = self.attachAsset('lightRay', {
- anchorX: 0.5,
- anchorY: 0,
- alpha: 0.6
- });
- beam.x = 10 + i * 15 - 30; // Spread beams horizontally
- beam.y = -80; // Start from lamp bulb area
- beam.rotation = Math.PI / 12 + i * Math.PI / 24 - Math.PI / 8; // Angle toward plant
- self.lightBeams.push(beam);
- }
- };
- self.createLightBeams();
self.setLampColor = function (color) {
tween(self.lamp, {
tint: color
}, {
duration: 500,
easing: tween.easeOut
});
- // Update light beam colors to match lamp
- for (var i = 0; i < self.lightBeams.length; i++) {
- tween(self.lightBeams[i], {
- tint: color
- }, {
- duration: 500,
- easing: tween.easeOut
- });
- }
};
- self.setLightIntensity = function (intensity) {
- // Animate light beam opacity and scale based on intensity
- for (var i = 0; i < self.lightBeams.length; i++) {
- var beam = self.lightBeams[i];
- tween(beam, {
- alpha: 0.3 + intensity * 0.5,
- // More visible with higher intensity
- scaleY: 0.5 + intensity * 1.5,
- // Longer beams with higher intensity
- scaleX: 0.8 + intensity * 0.4 // Slightly wider beams
- }, {
- duration: 400,
- easing: tween.easeOut
- });
- }
- };
return self;
});
var WaterSlider = Container.expand(function () {
var self = Container.call(this);
@@ -393,8 +399,11 @@
/****
* Game Code
****/
+// Game state management
+var gameState = 'start'; // 'start' or 'playing'
+var startScreen = null;
// No laws button found to remove - the code remains unchanged
var automaticPlant = new Plant(true);
automaticPlant.x = 600;
automaticPlant.y = 1800;
@@ -516,8 +525,70 @@
game.addChild(lightLevelText);
// Initialize sliders to zero position for seed state
waterSlider.setValue(0.0);
lightSlider.setValue(0.0);
+// Create and show start screen initially
+startScreen = new StartScreen();
+game.addChild(startScreen);
+// Hide game elements initially
+automaticPlant.visible = false;
+controlledPlant.visible = false;
+waterSlider.visible = false;
+lightSlider.visible = false;
+controlPanel.visible = false;
+titleText.visible = false;
+autoLabel.visible = false;
+controlLabel.visible = false;
+waterLabel.visible = false;
+lightLabel.visible = false;
+controlsLabel.visible = false;
+lampGreenLabel.visible = false;
+lampYellowLabel.visible = false;
+lampPurpleLabel.visible = false;
+waterLevelText.visible = false;
+lightLevelText.visible = false;
+// Start screen play button handler
+startScreen.onPlayClicked = function () {
+ gameState = 'playing';
+ // Hide start screen with fade out animation
+ tween(startScreen, {
+ alpha: 0
+ }, {
+ duration: 500,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ startScreen.visible = false;
+ // Show game elements with fade in
+ automaticPlant.visible = true;
+ controlledPlant.visible = true;
+ waterSlider.visible = true;
+ lightSlider.visible = true;
+ controlPanel.visible = true;
+ titleText.visible = true;
+ autoLabel.visible = true;
+ controlLabel.visible = true;
+ waterLabel.visible = true;
+ lightLabel.visible = true;
+ controlsLabel.visible = true;
+ lampGreenLabel.visible = true;
+ lampYellowLabel.visible = true;
+ lampPurpleLabel.visible = true;
+ waterLevelText.visible = true;
+ lightLevelText.visible = true;
+ // Fade in game elements
+ var elementsToFade = [automaticPlant, controlledPlant, waterSlider, lightSlider, controlPanel, titleText, autoLabel, controlLabel, waterLabel, lightLabel, controlsLabel, lampGreenLabel, lampYellowLabel, lampPurpleLabel, waterLevelText, lightLevelText];
+ for (var i = 0; i < elementsToFade.length; i++) {
+ elementsToFade[i].alpha = 0;
+ tween(elementsToFade[i], {
+ alpha: 1
+ }, {
+ duration: 800,
+ easing: tween.easeOut
+ });
+ }
+ }
+ });
+};
// Set initial plant states - automatic plant starts as seed
automaticPlant.setWaterLevel(0.0); // Start with no water
automaticPlant.setLightLevel(0.0); // Start with no light
automaticPlant.size = 0.1; // Start as just a seed
sun. In-Game asset. 2d. High contrast. No shadows
sun. In-Game asset. 2d. High contrast. No shadows
pot. In-Game asset. 2d. High contrast. No shadows
leaf. In-Game asset. 2d. High contrast. No shadows
work lamp. In-Game asset. 2d. High contrast. No shadows
empty glass beaker. In-Game asset. 2d. High contrast. No shadows
a long, thin plant. In-Game asset. 2d. High contrast. No shadows