Commit e1542aba authored by Li Mingzhe's avatar Li Mingzhe

feat:首次提交

parent 8a51c964
......@@ -128,5 +128,8 @@
}
}
},
"defaultProject": "ng-template-generator"
"defaultProject": "ng-template-generator",
"cli": {
"analytics": "9c6aa33d-85d1-4496-a524-64e708e94e5e"
}
}
\ No newline at end of file
This diff is collapsed.
export class Course{
sheepfoldArr : Array<Sheepfold> = [];
sheepArr : Array<Sheep> = [];
}
export class Sheepfold{
id : string;
word : string;
audioUrl : string;
picUrl : string;
/**P-图片,T-文字 */
contentType = 'T';
}
export class Sheep{
sheepfoldId : string;
word : string;
picUrl : string;
/**P-图片,T-文字 */
contentType = 'T';
audioUrl : string;
}
\ No newline at end of file
<div class="model-content">
<nz-card nzTitle="课程练习内容编辑" style="margin:5vw;" nzType="inner">
<nz-divider nzText="羊圈" nzOrientation="left"></nz-divider>
<div nz-row>
<nz-form-item>
<nz-form-label [nzSpan]="6" nzFor="add-btn" nzNoColon=true>羊圈</nz-form-label>
<nz-form-control [nzXs]='24' [nzSm]='12' [nzMd]='12' [nzLg]='6'>
<button nz-button nzType="dashed" class="add-btn" id="add-btn" (click)="addSheepfold()">
<i nz-icon nzType="plus-circle" nzTheme="outline"></i>添加
</button>
</nz-form-control>
</nz-form-item>
</div>
<div nz-row>
<div *ngFor="let data of item.sheepfoldArr;let i = index" style="margin: 2vw;">
<div nz-col [nzXs]='24' [nzSm]='12' [nzMd]='12' [nzLg]='9'>
<nz-card nzTitle="羊圈-{{i + 1}}" [nzExtra]="extraTemplate" style="height: 400px; margin: 1vw;">
<nz-form-item>
<nz-form-label [nzSpan]="6">内容形式</nz-form-label>
<nz-form-control [nzSpan]="12">
<nz-radio-group [(ngModel)]="data.contentType" (ngModelChange)="setContentType($event, data)">
<label nz-radio nzValue="T">文字</label>
<label nz-radio nzValue="P">图片</label>
</nz-radio-group>
</nz-form-control>
</nz-form-item>
<div *ngIf="data.contentType == 'T'">
<nz-form-item>
<nz-form-label [nzSpan]="6" nzFor="{{i}}.word">单词</nz-form-label>
<nz-form-control [nzSpan]="12">
<input nz-input type="text" id="{{i}}.word" placeholder="请录入内容" [(ngModel)]="data.word" (blur)="save()">
</nz-form-control>
</nz-form-item>
</div>
<div *ngIf="data.contentType == 'P'">
<nz-form-item>
<nz-form-label [nzSpan]="6" nzFor="{{i}}.picUrl">图片</nz-form-label>
<nz-form-control [nzSpan]="12">
<app-upload-image-with-preview style="width: 100%" [picUrl]="data.picUrl"
(imageUploaded)="onImageUploadSuccess($event, data, 'picUrl')"></app-upload-image-with-preview>
</nz-form-control>
</nz-form-item>
</div>
<div style="position: absolute; left: 200px; top: 100px; width: 800px;">
<input type="text" nz-input [(ngModel)]="item.text" (blur)="save()">
<app-upload-image-with-preview
[picUrl]="item.pic_url"
(imageUploaded)="onImageUploadSuccess($event, 'pic_url')"
></app-upload-image-with-preview>
<app-audio-recorder
[audioUrl]="item.audio_url"
(audioUploaded)="onAudioUploadSuccess($event, 'audio_url')"
></app-audio-recorder>
<app-custom-hot-zone></app-custom-hot-zone>
<app-upload-video></app-upload-video>
<app-lesson-title-config></app-lesson-title-config>
<nz-form-item>
<nz-form-label [nzSpan]="6" nzNoColon=true>发音</nz-form-label>
<nz-form-control [nzSpan]="18">
<app-audio-recorder [audioUrl]="data.audioUrl"
(audioUploaded)="onAudioUploadSuccess($event, data, 'audioUrl')">
</app-audio-recorder>
</nz-form-control>
</nz-form-item>
</nz-card>
<ng-template #extraTemplate>
<button style="margin: 10px;" nz-button nzType="danger" (click)="delSheepfold(i)">
<span>删除</span>
</button>
</ng-template>
</div>
</div>
</div>
<nz-divider nzText="羊" nzOrientation="left"></nz-divider>
<div nz-row>
<nz-form-item>
<nz-form-label [nzSpan]="6" nzFor="add-btn" nzNoColon=true></nz-form-label>
<nz-form-control [nzXs]='24' [nzSm]='12' [nzMd]='12' [nzLg]='6'>
<button nz-button nzType="dashed" class="add-btn" id="sheep-add-btn" (click)="addSheep()">
<i nz-icon nzType="plus-circle" nzTheme="outline"></i>添加
</button>
</nz-form-control>
</nz-form-item>
</div>
<div nz-row>
<div *ngFor="let data of item.sheepArr;let i = index" style="margin: 1vw;">
<div nz-col [nzXs]='24' [nzSm]='12' [nzMd]='12' [nzLg]='8'>
<nz-card nzTitle="羊-{{i + 1}}" [nzExtra]="extraTemplate1" style="height: 450px; margin: 1vw;">
<nz-form-item>
<nz-form-label [nzSpan]="6">羊圈</nz-form-label>
<nz-form-control [nzSpan]="12">
<nz-radio-group [(ngModel)]="data.sheepfoldId" (ngModelChange)="setSheepfoldId($event, data)">
<label nz-radio [nzValue]="option.id" *ngFor="let option of item.sheepfoldArr; let j = index">羊圈-{{j + 1}}({{option.word}})</label>
</nz-radio-group>
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-label [nzSpan]="6">内容形式</nz-form-label>
<nz-form-control [nzSpan]="12">
<nz-radio-group [(ngModel)]="data.contentType" (ngModelChange)="setContentType($event, data)">
<label nz-radio nzValue="T">文字</label>
<label nz-radio nzValue="P">图片</label>
</nz-radio-group>
</nz-form-control>
</nz-form-item>
<div *ngIf="data.contentType == 'T'">
<nz-form-item>
<nz-form-label [nzSpan]="6" nzFor="{{i}}.word">文本</nz-form-label>
<nz-form-control [nzSpan]="12">
<input nz-input type="text" id="{{i}}.word" placeholder="请录入内容" [(ngModel)]="data.word"
(blur)="save()">
</nz-form-control>
</nz-form-item>
</div>
<div *ngIf="data.contentType == 'P'">
<nz-form-item>
<nz-form-label [nzSpan]="6" nzFor="{{i}}.picUrl">图片</nz-form-label>
<nz-form-control [nzSpan]="12">
<app-upload-image-with-preview style="width: 100%" [picUrl]="data.picUrl"
(imageUploaded)="onImageUploadSuccess($event, data, 'picUrl')"></app-upload-image-with-preview>
</nz-form-control>
</nz-form-item>
</div>
<nz-form-item>
<nz-form-label [nzSpan]="6" nzNoColon=true>发音</nz-form-label>
<nz-form-control [nzSpan]="18">
<app-audio-recorder [audioUrl]="data.audioUrl"
(audioUploaded)="onAudioUploadSuccess($event, data, 'audioUrl')">
</app-audio-recorder>
</nz-form-control>
</nz-form-item>
</nz-card>
<ng-template #extraTemplate1>
<button style="margin: 10px;" nz-button nzType="danger" (click)="delSheep(i)">
<span>删除</span>
</button>
</ng-template>
</div>
</div>
</div>
</nz-card>
</div>
\ No newline at end of file
\ No newline at end of file
import {Component, EventEmitter, Input, OnDestroy, OnChanges, OnInit, Output, ApplicationRef, ChangeDetectorRef} from '@angular/core';
import { Component, EventEmitter, Input, OnDestroy, OnChanges, OnInit, Output, ApplicationRef, ChangeDetectorRef } from '@angular/core';
import { Sheepfold, Sheep, Course } from './Course';
......@@ -10,34 +11,34 @@ import {Component, EventEmitter, Input, OnDestroy, OnChanges, OnInit, Output, Ap
export class FormComponent implements OnInit, OnChanges, OnDestroy {
// 储存数据用
saveKey = "test_0011";
saveKey = "DF-L209";
// 储存对象
item;
constructor(private appRef: ApplicationRef,private changeDetectorRef: ChangeDetectorRef) {
constructor(private appRef: ApplicationRef, private changeDetectorRef: ChangeDetectorRef) {
}
ngOnInit() {
this.item = {};
this.item = new Course();
// 获取存储的数据
(<any> window).courseware.getData((data) => {
(<any>window).courseware.getData((data) => {
if (data) {
this.item = data;
}
console.log(data);
this.init();
this.changeDetectorRef.markForCheck();
this.changeDetectorRef.detectChanges();
this.refresh();
}, this.saveKey);
console.log(this.item);
}
......@@ -50,7 +51,9 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy {
init() {
if(!this.item){
this.item = new Course();
}
}
......@@ -58,21 +61,21 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy {
* 储存图片数据
* @param e
*/
onImageUploadSuccess(e, key) {
onImageUploadSuccess(e, item, key) {
this.item[key] = e.url;
item[key] = e.url;
this.save();
}
}
/**
/**
* 储存音频数据
* @param e
*/
onAudioUploadSuccess(e, key) {
onAudioUploadSuccess(e, item, key) {
this.item[key] = e.url;
item[key] = e.url;
this.save();
}
}
......@@ -80,7 +83,7 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy {
* 储存数据
*/
save() {
(<any> window).courseware.setData(this.item, null, this.saveKey);
(<any>window).courseware.setData(this.item, null, this.saveKey);
this.refresh();
}
......@@ -93,5 +96,65 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy {
}, 1);
}
randomChar() {
var x = "0123456789qwertyuioplkjhgfdsazxcvbnm";
var tmp = "";
var timestamp = new Date().getTime();
for (var i = 0; i < 6; i++) {
tmp += x.charAt(Math.ceil(Math.random() * 100000000) % x.length);
}
return timestamp + tmp;
}
addSheepfold(){
let sheepfold = new Sheepfold();
sheepfold.id = this.randomChar();
this.item.sheepfoldArr.push(sheepfold);
this.save();
}
delSheepfold(index){
if (index !== -1) {
this.item.sheepfoldArr.splice(index, 1);
this.save();
}
}
addSheep(){
let sheep = new Sheep();
this.item.sheepArr.push(sheep);
this.save();
}
delSheep(index){
if (index !== -1) {
this.item.sheepArr.splice(index, 1);
this.save();
}
}
setSheepfoldId(event, item){
item.sheepfoldId = event;
this.save();
}
setContentType(e, item){
item['contentType'] = e;
if("T" == e){
item['picUrl'] = "";
}
else if("P" == e){
item['word'] = "";
}
this.save();
}
}
/**
*
* @param audio 音频
* @param now true-重新开始播放,flase-继续播放
* @param callback
*/
export function playAudio(audio, now = false, callback = null) {
if (audio) {
if (now) {
audio.pause();
audio.currentTime = 0;
}
if (callback) {
audio.onended = () => {
callback();
};
}
audio.play();
}
}
/**
* 暂停播放音频
* @param audio 音频
* @param reset 暂停是否重置:true-是,false-否
* @param callback
*/
export function pauseAudio(audio, reset = false, callback = null) {
if (audio) {
if (reset) {
audio.currentTime = 0;
}
audio.pause();
if (callback) {
callback();
}
}
}
\ No newline at end of file
import { Item } from "./Item";
import { MySprite } from './Unit';
export class Backagroud extends Item{
pic : MySprite;
set x(x){
super._x = x;
if(this.pic){
this.pic.x = super._x;
}
}
set y(y){
super._y = y;
if(this.pic){
this.pic.y = super._x;
}
}
init(bgPicName){
let s = Math.max(this.scaleX, this.scaleY);
const pic = new MySprite();
pic.init(this.images.get(bgPicName));
pic.setScaleXY(s);
pic.x = super.x;
pic.y = super.y;
this.pic = pic;
}
}
\ No newline at end of file
import { Item } from './Item';
import { MySprite, tweenChange } from './Unit';
import { playAudio } from './AudioUtil';
export class Button extends Item{
btnPic : MySprite;
private _outX = 0;
set outX(v){
this._outX =v ;
}
get outX(){
return this._outX;
}
private _outY = 0;
set outY(v){
this._outY =v ;
}
get outY(){
return this._outY;
}
init(picName){
const btnPic = this.getPic(picName);
this.width = btnPic.width;
this.height = btnPic.height;
btnPic.x = this.x;
btnPic.y = this.y;
this.btnPic = btnPic;
}
click(callback = null){
playAudio(this.audioObj['restart'], true);
//放大
tweenChange(this.btnPic, {scaleX: this.scaleX * 1.3, scaleY : this.scaleY * 1.3}, 0.1, ()=>{
//恢复
tweenChange(this.btnPic, {scaleX: this.scaleX, scaleY : this.scaleY}, 0.1, ()=>{
//移出
tweenChange(this.btnPic, {x : this.outX, y:this.outY}, 0.3, ()=>{
if(callback){
callback();
}
})
});
})
}
show(callback = null){
this.btnPic.x = this.x;
this.btnPic.y = this.y;
this.btnPic.visible = true;
if(callback){
callback();
}
}
}
\ No newline at end of file
import { MySprite, ShapeRect } from './Unit';
interface AirWindow extends Window {
air: any;
curCtx: any;
}
declare let window: AirWindow;
export class Item {
/**图片集合 */
images;
audioObj;
_scaleX = 1;
_scaleY = 1;
ctx;
_width = 0;
_height = 0;
_x = 0;
_y = 0;
bg: ShapeRect;
constructor(images, audioObj, scaleX = 1, scaleY = 1, ctx = null) {
this.images = images;
this.audioObj = audioObj;
this._scaleX = scaleX;
this._scaleY = scaleY;
if (!ctx) {
this.ctx = window.curCtx;
} else {
this.ctx = ctx;
}
}
set width(width) {
this._width = width * this.scaleX;
if(this.bg){
this.bg.width = this._width;
}
}
get width() {
return this._width;
}
set height(height) {
this._height = height * this.scaleY;
if(this.bg){
this.bg.height = this._height;
}
}
get height() {
return this._height;
}
set scaleX(v) {
this._scaleX = v;
}
get scaleX() {
return this._scaleX;
}
set scaleY(v) {
this._scaleY = v;
}
get scaleY() {
return this._scaleY;
}
set x(x) {
this._x = x;
if (this.bg) {
this.bg.x = this._x;
}
}
get x() {
return this._x;
}
set y(y) {
this._y = y;
if (this.bg) {
this.bg.y = this._y;
}
}
get y() {
return this._y;
}
getPic(picName, anchorX: number = 0.5, anchorY: number = 0.5) {
const pic = new MySprite();
pic.init(this.images.get(picName), anchorX, anchorY);
pic.scaleX = this.scaleX;
pic.scaleY = this.scaleY;
pic.x = 0;
pic.y = 0;
return pic;
}
checkClickTarget(target, mx: number, my: number) {
const rect = target.getBoundingBox();
if (this.checkPointInRect(mx, my, rect)) {
return true;
}
return false;
}
checkPointInRect(x, y, rect) {
if (x >= rect.x && x <= rect.x + rect.width) {
if (y >= rect.y && y <= rect.y + rect.height) {
return true;
}
}
return false;
}
}
export function setScale(pW: number, pH: number, child) {
let width = child.width;
let height = child.height;
let sx = pW / width;
let sy = pH / height;
let scale = Math.min(sx, sy);
if (scale < 1) {
child.setScaleXY(scale);
}
}
\ No newline at end of file
import {
MySprite,
moveItem,
removeItemFromArr,
rotateItem
} from './Unit';
export class Petal {
renderArr = [];
images;
ctx;
playing = true;
tempRenderArr = [];
constructor(renderArr, images, ctx) {
this.renderArr = renderArr;
this.images = images;
this.ctx = ctx;
this.tempRenderArr = [];
}
stop(callback = null) {
this.playing = false;
const checkFinish = () => {
if (this.tempRenderArr.length == 0) {
if (callback) {
callback();
}
}
else {
setTimeout(() => {
checkFinish();
}, 100);
}
}
checkFinish();
}
/**
* 显示结束花瓣
* @param rect {x,y,width, height} 花瓣显示位置及大小
* @param mapScale
* @param timeout 花瓣显示间隔
* @param kinds 花瓣种类,即花瓣图片样式数组个数
*/
showPetal(rect, mapScale: number, timeout: number, kinds = 9) {
if (!this.playing) {
return;
}
const petal = this.getPetal(rect, mapScale, kinds);
this.renderArr.push(petal);
this.tempRenderArr.push(petal);
let toY = rect.y + rect.height;
moveItem(petal, petal.x, toY + petal.height * petal.scaleY, petal['time'], () => {
removeItemFromArr(this.renderArr, petal);
removeItemFromArr(this.tempRenderArr, petal);
});
rotateItem(petal, petal['tr'], petal['time']);
setTimeout(() => {
this.showPetal(rect, mapScale, timeout);
}, timeout);
}
/**
* 得到花瓣
* @param rect
* @param mapScale
* @param kinds
*/
private getPetal(rect, mapScale, kinds) {
const petal = new MySprite(this.ctx);
const id = Math.ceil(Math.random() * kinds);
petal.init(this.images.get('petal_' + id));
const randomS = (Math.random() * 0.4 + 0.6) * mapScale;
petal.setScaleXY(randomS);
const randomR = Math.random() * 360;
petal.rotation = randomR;
const randomX = rect.x + Math.random() * rect.width;
petal.x = randomX;
petal.y = rect.y - petal.height / 2 * petal.scaleY;
const randomT = 0.5 + Math.random() * 2;
petal['time'] = randomT;
let randomTR = 360 * Math.random(); // - 180;
if (Math.random() < 0.5) { randomTR *= -1; }
petal['tr'] = randomTR;
return petal;
}
}
\ No newline at end of file
This diff is collapsed.
import { Item } from './Item';
import { ShapeRect, Label, MySprite, tweenChange, getPosByAngle, scaleItem, hideItem, moveItem } from './Unit';
import TWEEN from '@tweenjs/tween.js';
export class Timer extends Item {
timeLabel: Label;
stopwatch: MySprite;
seconds = 0;
stopFlag = false;
started = false;
initX = 0;
initY = 0;
timeY = 0;
stopwatchY = 0;
_standby = false;
starArr: Array<MySprite> = [];
init() {
const bg = new ShapeRect();
bg.alpha = 0;
this.bg = bg;
const bgPic = this.getPic('timer');
this.width = bgPic.width;
this.height = bgPic.height;
bgPic.x = this.width / 2;
bgPic.y = this.height / 2;
bg.addChild(bgPic);
const stopwatch = this.getPic('stopwatch', 0, 1);
stopwatch.x = 42 * this.scaleX;
stopwatch.y = this.height - 3 * this.scaleY;
this.stopwatchY = stopwatch.y;
bg.addChild(stopwatch);
this.stopwatch = stopwatch;
let timeLabel = new Label();
this.timeLabel = timeLabel;
timeLabel.text = "00:00";
timeLabel.textAlign = 'middle';
timeLabel.fontSize = 50;
timeLabel.fontName = "BRLNSDB";
timeLabel.fontColor = "#63bb00";
timeLabel.scaleX = this.scaleX;
timeLabel.scaleY = this.scaleY;
timeLabel.refreshSize();
bg.addChild(timeLabel);
timeLabel.x = 99 * this.scaleX;
timeLabel.y = stopwatch.y - timeLabel.getBoundingBox().height / 2 - 7 * this.scaleY;
this.timeY = timeLabel.y;
this.initStar();
}
private initStar() {
const star1 = this.getPic('star1', 0.5, 1);
star1.alpha = 0;
star1.x = 0;
star1.y = this.height - 35 * this.scaleY;
this.bg.addChild(star1);
this.starArr.push(star1);
const star2 = this.getPic('star2', 0.5, 1);
star2.alpha = 0;
star2.x = this.width;
star2.y = this.height;
this.bg.addChild(star2);
this.starArr.push(star2);
const star3 = this.getPic('star3', 0.5, 1);
star3.alpha = 0;
star3.x = 4 * this.scaleX;
star3.y = this.height - 62 * this.scaleY;
this.bg.addChild(star3);
this.starArr.push(star3);
const star4 = this.getPic('star4', 0.5, 1);
star4.alpha = 0;
star4.x = this.width;
star4.y = this.height - 30 * this.scaleY;
this.bg.addChild(star4);
this.starArr.push(star4);
const star5 = this.getPic('star5', 1, 1);
star5.alpha = 0;
star5.x = this.width - 8 * this.scaleX;
star5.y = this.height - 83 * this.scaleY;
this.bg.addChild(star5);
this.starArr.push(star5);
}
start(callback = null) {
if (this.started) {
return;
}
this._standby = false;
this.started = true;
const showTime = () => {
if (this.stopFlag) {
return;
}
setTimeout(() => {
this.seconds += 1;
this.timeLabel.text = this.getTimeStr(this.seconds);
showTime();
}, 1000);
}
showTime();
if (callback) {
callback();
}
}
stop(callback = null) {
this.stopFlag = true;
this.started = false;
}
showStar() {
this.showPopParticle({ x: this.width / 2, y: this.height / 2 + 60 * this.scaleY }, this.bg, 5, 60 * this.scaleX, 100 * this.scaleX);
}
hideStar() {
}
reset(callback = null) {
this.timeLabel.text = "00:00";
tweenChange(this.timeLabel, { y: this.timeY }, 0.3);
tweenChange(this.stopwatch, { y: this.stopwatchY }, 0.3);
tweenChange(this.bg, { y: this.initY }, 0.3, () => {
this._y = this.initY;
this.stopFlag = false;
this.started = false;
this.seconds = 0;
this.hideStar();
if (callback) {
callback();
}
})
}
standby() {
const show = () => {
tweenChange(this.stopwatch, { scaleX: this.scaleX * 1.1, scaleY: this.scaleY * 1.1 }, 0.5, () => {
tweenChange(this.stopwatch, { scaleX: this.scaleX, scaleY: this.scaleY }, 0.5, () => {
if (this._standby) {
show();
}
});
});
}
this._standby = true;
show();
}
private getTimeStr(time: number) {
if (!time) {
return "00:00";
}
let sec = Math.ceil(time % 60);
let minute = Math.floor(time / 60);
let timeStr = (minute < 10 ? "0" + minute : minute) + ":" + (sec < 10 ? "0" + sec : sec);
return timeStr;
}
showPopParticle(pos, parent, num = 20, minLen = 40, maxLen = 80, showTime = 0.4, kinds = 5) {
for (let i = 0; i < num; i++) {
const particle = new MySprite();
const id = Math.ceil(Math.random() * kinds);
particle.init(this.images.get('star' + id));
particle.x = pos.x;
particle.y = pos.y;
parent.addChild(particle);
const randomR = 360 * Math.random();
particle.rotation = randomR;
const randomS = (0.3 + Math.random() * 1.2) * this.scaleX;
particle.setScaleXY(randomS * 0.3);
const randomX = Math.random() * 20 - 10;
particle.x += randomX;
const randomY = Math.random() * 20 - 10;
particle.y += randomY;
const randomL = minLen + Math.random() * (maxLen - minLen);
const randomA = 360 * Math.random();
const randomT = getPosByAngle(randomA, randomL);
moveItem(particle, particle.x + randomT.x, particle.y + randomT.y, showTime, () => {
}, TWEEN.Easing.Exponential.Out);
// scaleItem(particle, 0, 0.6, () => {
//
// });
scaleItem(particle, randomS, 0.6, () => {
}, TWEEN.Easing.Exponential.Out);
setTimeout(() => {
hideItem(particle, 0.4, () => {
}, TWEEN.Easing.Cubic.In);
}, showTime * 0.5 * 1000);
}
}
}
\ No newline at end of file
This diff is collapsed.
const res = [
// ['bg', "assets/play/bg.jpg"],
['btn_left', "assets/play/btn_left.png"],
['btn_right', "assets/play/btn_right.png"],
// ['text_bg', "assets/play/text_bg.png"],
['bg', "assets/play/bg.png"],
['left_leaf', "assets/play/left_leaf.png"],
['right_leaf', "assets/play/right_leaf.png"],
['land', "assets/play/land.png"],
['restart', "assets/play/restart.png"],
['bubble', "assets/play/bubble.png"],
['s_bubble', "assets/play/s_bubble.png"],
['sheep', "assets/play/sheep.png"],
['sheepfold', "assets/play/sheepfold.png"],
['stopwatch', "assets/play/stopwatch.png"],
['timer', "assets/play/timer.png"],
['light', "assets/play/light.png"],
['star1', "assets/play/star1.png"],
['star2', "assets/play/star2.png"],
['star3', "assets/play/star3.png"],
['star4', "assets/play/star4.png"],
['star5', "assets/play/star5.png"],
['petal_1', "assets/play/petal_1.png"],
['petal_2', "assets/play/petal_2.png"],
['petal_3', "assets/play/petal_3.png"],
['petal_4', "assets/play/petal_4.png"],
['petal_5', "assets/play/petal_5.png"],
['petal_6', "assets/play/petal_6.png"],
['petal_7', "assets/play/petal_7.png"],
['petal_8', "assets/play/petal_8.png"],
];
......@@ -12,7 +34,10 @@ const res = [
const resAudio = [
['click', "assets/play/music/click.mp3"],
['right', "assets/play/music/right.mp3"],
['wrong', "assets/play/music/wrong.mp3"],
['win', "assets/play/music/win.mp3"],
['restart', "assets/play/music/restart.mp3"],
];
export {res, resAudio};
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment