该存储库包含Google Santa Tracker的代码,Google Santa Tracker是12月假期期间的教育和娱乐性传统。
我们希望您发现此源代码有趣。通常,我们不接受公众的外部贡献。您可以提交错误报告或功能请求,或联系工程主管Jez Swanson。
(本文在贡献中复制了)
圣诞老人追踪器支持Chrome,Firefox和Safari的常绿版本。它还支持其他基于铬的浏览器(Edge,Opera等)。
我们还为IE11等旧浏览器提供了一种“后备模式”,该浏览器允许用户玩少量的历史游戏。
圣诞老人追踪器分为不同的场景。圣诞老人跟踪器上的每个页面都对应于一个场景,包括Modvil的主乡村页面。场景在静态/场景/目录中。每个场景都被加载为iframe,并且相对自我包含。
网站的主机部分处理每个场景的负载以及音乐和常见的UI,例如游戏分数或教程。主机和场景之间有一个API,可以让主机通知场景加载之类的事件,并允许场景告诉主机做诸如播放歌曲或更新分数之类的事情。
您需要yarn
或npm
。如果您在Windows上构建,则可能需要Java,因为封闭式编译器的二进制版本不支持该平台。
克隆并运行yarn
或npm install
以安装DEP,然后运行./serve.js
运行开发服务器。开发URL将复制到您的剪贴板上。
默认情况下,服务脚本./serve.js
将在端口8000和8080上收听。端口8000为网站的主机提供服务(这对应于生产https://santatracker.google.com域),端口8080为包括场景在内的静态内容提供服务。
要加载特定场景,例如打开EG,http:// localhost:8000/boatload.html。加载站点后,您还可以在控制台中运行santaApp.route = 'sceneName'
以编程切换场景。
如果您想从静态域加载一个场景(无“主机”代码),您可以在EG上加载它,例如http://127.0.0.0.1:8080/st/scenes/elfmaker/。这故意不等于“ localhost”,因此产品和静态运行的跨域。 “主机”提供了分数,音频和一些UI,因此并非所有行为都可以在此模式下可用。
截至2020年,开发需要铬或基于铬的浏览器。这是由于我们识别ESM导入请求的方式,铬指定其他标题。 (这是一个错误,而不是功能。)
从根本上讲,场景只是在<iframe>
中加载的页面。您可以以任何喜欢的方式编写它们,但请务必召集“主机”播放音频,报告分数或请求其他内容,例如显示教程。
要添加一个新场景,您需要:
创建static/scenes/sceneName
文件夹,添加index.html
,该文件仅在ES模块中运行代码:
<script type="module">
导入src/scene/api.js
script type =“ module”>,该>设置了与产品“主机”的连接。api.ready(() => { ... })
./:closure.js
如果您正在编写封闭式代码,则该编译在js/
添加相关的PNG:
static/img/scenes/sceneName_2x.png
(950x564)和sceneName_1x.png
(475x282)prod/images/og/sceneName.png
(1333x1000)命名字符串中的场景。
如果您的场景不应该发布到生产中,请将其禁用在repares.js中。
构建系统提供了一个虚拟文件系统,该系统会自动编译对开发有用的各种源类型,并提供许多助手。这包括:
.css
文件是为其相应的.scss
生成的.json
是为他们的相应.json5
生成static/scenes/sceneName/:closure.js
文件可以读取以编译带有闭合编译器的旧场景的js/
文件夹,并提供默认导出的JS模块。这些文件实际上并不存在,但会自动使用。例如,如果存在foo.scss
,则可以简单地加载foo.css
即可自动编译它。
在编写SCSS时,助手_rel(path.png)
会生成一个url()
,该URL()指向文件相对于当前.scss
源文件(甚至导入)。
无论最终如何使用SCSS,无论是<link href="..." />
还是作为Web组件的一部分。
源文件static/src/magic.js
提供了各种模板标签助手,尽管实际功能在发行时被内衬。其中包括:
_msg`msgid_here`
生成相应的i18n字符串_static`path_name`
生成对static
中文件的绝对引用此外,Santa Tracker是使用JS模块构建的,将为node_modules
重写非相关导入。例如,如果您import {LitElement} from 'lit-element';
,这将被重写为开发或发行的完整道路。
除JavaScript本身外,Santa Tracker的开发环境还允许进口未来的模块类型:CSS,JSON和HTML。
在可能的情况下,触摸,键盘和游戏手柄输入。请注意,基本的游戏板支持是通过keys.js中的合成键盘事件提供的。
Santa Tracker使用的音频库已知,该音频库仅在“主机”中存在,但可以在场景中触发API调用。这在很大程度上是没有证件的,并由外部供应商提供。如果您对音频源文件感兴趣,则它们位于static/audio
下的回购中(并如下所述,以CC-BY的价格获得许可)。
音频库会播放播放临时声音的音频触发器(例如,单击按钮)或循环(音频轨道)。可以使用音频触发器配置场景,从(通过api.config({sound: [...]})
)将导致所有以前的音频停止,非常适合关闭以前的游戏。
圣诞老人跟踪器包含各种不同语言的翻译。这些翻译来自Google的内部翻译工具。
如果要添加开发字符串,请修改en_src_messages.json
,并要求Google员工请求翻译运行。如果您要构建用于生产的圣诞老人跟踪器,则需要翻译字符串,并在lang/
中包含最终输出。
虽然源代码包含一个发行脚本,但最终用户并不是要运行的,并且Googles使用了该网站。
直到2018年使用的圣诞老人追踪器的先前版本可在Archive-2018分支机构提供。
所有图像和音频文件(包括 *.png, *.jpg, *.svg, *.mp3, *.wav和 *.ogg)均在CC-BY许可证下许可。所有其他文件均在Apache 2许可下获得许可。有关详细信息,请参见许可证文件。
Copyright 2020 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.