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 bubbleGraphics = self.createAsset('speechBubble', 'Speech Bubble Graphics', 0.5, 0.5); var textElement = new Text2(text, { size: 94.5, fill: "#ff69b4" }); textElement.maxWidth = bubbleGraphics.width * 0.2; textElement.maxHeight = bubbleGraphics.height * 0.2; textElement.anchor.set(0.5, 0.5); self.addChild(bubbleGraphics); 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 + 100; self.visible = true; self.addChild(text); var dialogueText = text; LK.setTimeout(function () { self.visible = false; self.removeChild(dialogueText); }, 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.cooldown = false; self.on('down', function () { if (!self.cooldown && self.parent) { self.cooldown = true; var girlfriend = self.parent.children.find(function (child) { return child instanceof VirtualGirlfriend; }); var casualDialogueLines = ['Hello', 'Nice to see you', 'How are you today?', 'You look wonderful!', 'Missed you!', 'Can we chat for a while?', 'Your smile is contagious.']; var flirtyDialogueLines = ['I love you', 'Thinking of you makes my day!', 'You brighten up my world.']; var dialogueLines = Math.random() < 0.5 ? casualDialogueLines : flirtyDialogueLines; if (girlfriend) girlfriend.speak(dialogueLines[Math.floor(Math.random() * dialogueLines.length)]); LK.setTimeout(function () { self.cooldown = false; }, 2500); } }); }); 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 = new SpeechBubble(); var flirtyDialogue = new FlirtyDialogue(dialogueTxt); speechBubble.show(flirtyDialogue, self.x, self.y - 1200); self.parent.addChild(speechBubble); 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(); }); });
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 bubbleGraphics = self.createAsset('speechBubble', 'Speech Bubble Graphics', 0.5, 0.5);
var textElement = new Text2(text, {
size: 94.5,
fill: "#ff69b4"
});
textElement.maxWidth = bubbleGraphics.width * 0.2;
textElement.maxHeight = bubbleGraphics.height * 0.2;
textElement.anchor.set(0.5, 0.5);
self.addChild(bubbleGraphics);
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 + 100;
self.visible = true;
self.addChild(text);
var dialogueText = text;
LK.setTimeout(function () {
self.visible = false;
self.removeChild(dialogueText);
}, 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.cooldown = false;
self.on('down', function () {
if (!self.cooldown && self.parent) {
self.cooldown = true;
var girlfriend = self.parent.children.find(function (child) {
return child instanceof VirtualGirlfriend;
});
var casualDialogueLines = ['Hello', 'Nice to see you', 'How are you today?', 'You look wonderful!', 'Missed you!', 'Can we chat for a while?', 'Your smile is contagious.'];
var flirtyDialogueLines = ['I love you', 'Thinking of you makes my day!', 'You brighten up my world.'];
var dialogueLines = Math.random() < 0.5 ? casualDialogueLines : flirtyDialogueLines;
if (girlfriend) girlfriend.speak(dialogueLines[Math.floor(Math.random() * dialogueLines.length)]);
LK.setTimeout(function () {
self.cooldown = false;
}, 2500);
}
});
});
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 = new SpeechBubble();
var flirtyDialogue = new FlirtyDialogue(dialogueTxt);
speechBubble.show(flirtyDialogue, self.x, self.y - 1200);
self.parent.addChild(speechBubble);
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.