User prompt
move the buble 50 pixel up
User prompt
move the buuble down by 150 pixel
User prompt
the dialogue text can only have the size at max of 20 percent of the horizontal and vertical size of the bubble
User prompt
the dialogue text can only have the size at max of 20 percent of the bubble
User prompt
the dialogue text can only have the size at max of 40 percent of the bubble
User prompt
Fix Bug: 'ReferenceError: bubbleGraphics is not defined' in this line: 'textElement.maxWidth = bubbleGraphics.width * 0.6;' Line Number: 30
User prompt
the dialogue text can only have the size at max of 60 percent of the bubble
User prompt
You can click the talk button every 2.5 second
User prompt
add a second dialogue array of dialogue
User prompt
add 2 new dialogue
User prompt
add 2 new dialogue
User prompt
add 3 new dialogue
User prompt
You can click on the talk button only one time every 3 second
User prompt
You can click on the talk button only one time every 2 second
User prompt
a new dialogue is spawn at each talk
var Mouth = Container.expand(function () {
var self = Container.call(this);
var mouthGraphics = self.createAsset('mouth', 'Mouth Graphics', 0.5, 0.5);
self.addChild(mouthGraphics);
self.talking = false;
self.talkScale = 1;
self.update = function () {
if (self.talking) {
self.talkScale += 0.02;
if (self.talkScale > 1.2) self.talking = false;
} else {
self.talkScale -= 0.02;
if (self.talkScale < 1) self.talkScale = 1;
}
mouthGraphics.scale.set(self.talkScale);
};
self.startTalking = function () {
self.talking = true;
};
self.stopTalking = function () {
self.talking = false;
};
});
var FlirtyDialogue = Container.expand(function (text) {
var self = Container.call(this);
var textElement = new Text2(text, {
size: 94.5,
fill: "#ff69b4"
});
textElement.anchor.set(0.5, 0.5);
self.addChild(textElement);
});
var SpeechBubble = Container.expand(function () {
var self = Container.call(this);
var bubbleGraphics = self.createAsset('speechBubble', 'Speech Bubble Graphics', 0.5, 0.5);
self.addChild(bubbleGraphics);
self.visible = false;
self.show = function (text, x, y) {
self.x = x + 200;
self.y = y;
self.visible = true;
self.addChild(text);
var dialogueText = text;
LK.setTimeout(function () {
self.visible = false;
self.removeChild(dialogueText);
self.destroy();
}, 2000);
};
});
var TalkButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.createAsset('talkButton', 'Talk Button Graphics', 0.5, 0.5);
self.addChild(buttonGraphics);
self.x = buttonGraphics.width / 2 + 250;
self.y = 2732 - buttonGraphics.height / 2 - 250;
self.on('down', function () {
if (self.parent) {
var girlfriend = self.parent.children.find(function (child) {
return child instanceof VirtualGirlfriend;
});
var dialogueLines = ['Hello', 'Nice to see you', 'I love you'];
if (girlfriend) girlfriend.speak(dialogueLines[Math.floor(Math.random() * dialogueLines.length)]);
}
});
});
var RightEye = Container.expand(function () {
var self = Container.call(this);
var eyeGraphics = self.createAsset('eye', 'Right Eye Graphics', 0.5, 0.5);
self.addChild(eyeGraphics);
});
var RoomBackground = Container.expand(function () {
var self = Container.call(this);
var backgroundGraphics = self.createAsset('roomBackground', 'Room Background', 0.5, 0.5);
self.addChild(backgroundGraphics);
backgroundGraphics.width = 2048 * 1.3 * 1.2;
backgroundGraphics.height = 2732 * 1.2;
self.x = 2048 / 2;
self.y = 2732 / 2 - 300;
});
var LeftEye = Container.expand(function () {
var self = Container.call(this);
var eyeGraphics = self.createAsset('eye', 'Left Eye Graphics', 0.5, 0.5);
self.addChild(eyeGraphics);
});
var Nose = Container.expand(function () {
var self = Container.call(this);
var noseGraphics = self.createAsset('nose', 'Nose Graphics', 0.5, 0.5);
self.addChild(noseGraphics);
});
var VirtualGirlfriend = Container.expand(function () {
var self = Container.call(this);
var girlfriendGraphics = self.createAsset('girlfriend', 'Virtual Girlfriend', .5, .5);
self.x = 2048 / 2 - 50;
self.y = 2732 - girlfriendGraphics.height + 1050;
self.state = "breathing";
self.dialogue = "";
self.breathDuration = 180;
self.breathCounter = 0;
self.isBreathingIn = true;
self.updateBreathing = function () {
if (self.isBreathingIn) {
self.breathCounter++;
if (self.breathCounter >= self.breathDuration) {
self.isBreathingIn = false;
}
} else {
self.breathCounter--;
if (self.breathCounter <= 0) {
self.isBreathingIn = true;
}
}
var scaleFactor = 1 + self.breathCounter / self.breathDuration * (0.05 / 3);
this.scale.x = scaleFactor;
this.scale.y = scaleFactor;
};
self.update = function () {
if (self.state === 'breathing' || self.state === 'talking') {
self.updateBreathing();
}
};
self.speak = function (dialogueTxt) {
if (self.state !== 'talking') {
self.state = 'talking';
self.dialogue = dialogueTxt;
var speechBubble = self.addChild(new SpeechBubble());
var flirtyDialogue = new FlirtyDialogue(dialogueTxt);
speechBubble.show(flirtyDialogue, self.x, self.y - 1200);
var mouth = self.parent.children.find(function (child) {
return child instanceof Mouth;
});
if (mouth) mouth.startTalking();
LK.setTimeout(function () {
self.state = 'breathing';
if (mouth) mouth.stopTalking();
}, 2000);
}
};
});
var Game = Container.expand(function () {
var self = Container.call(this);
self.mouth = self.addChild(new Mouth());
var roomBackground = self.addChild(new RoomBackground());
roomBackground.x = 2048 / 2;
roomBackground.y = 2732 / 2;
var girlfriend = self.addChild(new VirtualGirlfriend());
self.mouth = self.addChild(new Mouth());
var leftEye = self.addChild(new LeftEye());
var rightEye = self.addChild(new RightEye());
var nose = self.addChild(new Nose());
LK.on('tick', function () {
var breathScale = girlfriend.scale.x;
leftEye.x = girlfriend.x - 110 * breathScale;
leftEye.y = girlfriend.y - 200 * breathScale;
rightEye.x = girlfriend.x + 300 * breathScale;
rightEye.y = girlfriend.y - 210 * breathScale;
nose.x = girlfriend.x + 95 * breathScale;
nose.y = girlfriend.y - 40 * breathScale;
var breathScale = girlfriend.scale.x;
self.mouth.x = girlfriend.x + 95 * breathScale;
self.mouth.y = girlfriend.y + 180 * breathScale;
self.mouth.update();
girlfriend.update();
});
var dialogueTxt = new Text2('', {
size: 150,
fill: "#ffffff",
x: 2048 / 2,
y: 150
});
dialogueTxt.anchor.set(0.5, 0);
LK.gui.topCenter.addChild(dialogueTxt);
var talkButton = self.addChild(new TalkButton());
dialogueTxt.anchor.set(.5, 0);
LK.gui.topCenter.addChild(dialogueTxt);
LK.on('tick', function () {
var breathScale = girlfriend.scale.x;
girlfriend.update();
self.mouth.x = girlfriend.x + 95 * breathScale;
self.mouth.y = girlfriend.y + 180 * breathScale;
self.mouth.update();
});
});
A beautiful woman in a anime style with no eye, no eyebrow and no mouth. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
An eye in a anime style. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A beautiful and slim nose in a anime style. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A beautiful women mouth in a manga style. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A restaurant background in a anime style. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A talk button with a buble and a word 'talk'. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A ta dialogue text buble in anime style. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.