Skip to content

Commit

Permalink
Merge pull request #82 from bheiskell/hyperspace-transition
Browse files Browse the repository at this point in the history
Hyperspace transition which closes #12.
  • Loading branch information
bheiskell committed Dec 22, 2021
2 parents 5765dcd + 939cdcb commit 1777fc1
Show file tree
Hide file tree
Showing 10 changed files with 218 additions and 1 deletion.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# ignore lock file created disabling updates
ffg-star-wars-enhancements.lock
2 changes: 2 additions & 0 deletions artwork/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ This readme documents assets included in the repository.
* `datapad-template-700w.png` [source](https://www.reddit.com/r/swrpg/comments/6r7i9x/datapad_template/)
* `datapad-template-wanted-700w.png` [source](https://www.reddit.com/r/swrpg/comments/jzsqf8/a_custom_bounty_posting_screen_i_made_for_my/)
* `hyperspace.png` [source](https://drive.google.com/drive/folders/1hH0NHC82FJcXMk4TgPmFpfRh5rlaC0QK)
* `hyperspace-in.mp4` [source](https://drive.google.com/drive/folders/1hH0NHC82FJcXMk4TgPmFpfRh5rlaC0QK)
* `hyperspace-out.mp4` [source](https://drive.google.com/drive/folders/1hH0NHC82FJcXMk4TgPmFpfRh5rlaC0QK)
* `podracer-cockpit.png` created for ffg-star-wars-enhancements
* `podracer-*.png` [source](https://www.deviantart.com/unusualsuspex/gallery/46719912/sw-orthos)
* `galaxy-map.png` [source](https://starwars.fandom.com/wiki/The_galaxy/Legends?file=MainGalaxy.png)
Expand Down
Binary file added artwork/hyperspace-in.mp4
Binary file not shown.
Binary file added artwork/hyperspace-out.mp4
Binary file not shown.
3 changes: 3 additions & 0 deletions ffg-star-wars-enhancements.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
attack_animation
} from './scripts/animation.js'
import { init as opening_crawl_init, ready as opening_crawl_ready } from './scripts/opening_crawl.js'
import { init as hyperspace_init, ready as hyperspace_ready } from './scripts/hyperspace.js'
import { init as rename_init, rename_combatant } from './scripts/rename.js'
import {
init as dice_helper_init,
Expand All @@ -30,6 +31,7 @@ Hooks.once('init', async function() {
opening_crawl_init();
shop_generator_init();
vehicle_roller_init();
hyperspace_init();

log('base_module', 'registering helpers');
Handlebars.registerHelper("iff", function (a, operator, b, opts) {
Expand Down Expand Up @@ -108,6 +110,7 @@ Hooks.once('ready', () => {
talent_checker();
register_hooks();
dice_helper_setup();
hyperspace_ready();
});

Hooks.on("getSceneControlButtons", (controls) => {
Expand Down
14 changes: 13 additions & 1 deletion lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -148,5 +148,17 @@
"ffg-star-wars-enhancements.shop.html.setup.shady": "Include Restricted items",
"ffg-star-wars-enhancements.shop.html.setup.pc": "Player Character",
"ffg-star-wars-enhancements.shop.html.setup.price": "Base Price Percent",
"ffg-star-wars-enhancements.shop.html.setup.button": "Create Shop"
"ffg-star-wars-enhancements.shop.html.setup.button": "Create Shop",
"ffg-star-wars-enhancements.controls.hyperspace.name": "hyperspace-transition",
"ffg-star-wars-enhancements.controls.hyperspace.title": "Hyperspace Transition",
"ffg-star-wars-enhancements.hyperspace.title": "Hyperspace Transition",
"ffg-star-wars-enhancements.hyperspace.transition": "Transition",
"ffg-star-wars-enhancements.hyperspace.transition-type": "Jump Type",
"ffg-star-wars-enhancements.hyperspace.enter-hyperspace": "Enter Hyperspace",
"ffg-star-wars-enhancements.hyperspace.exit-hyperspace": "Exit Hyperspace",
"ffg-star-wars-enhancements.hyperspace.quick-jump": "Quick Jump",
"ffg-star-wars-enhancements.hyperspace.target-scene": "Target Scene",
"ffg-star-wars-enhancements.hyperspace.hyperspace-enter": "Enter Hyperspace Scene",
"ffg-star-wars-enhancements.hyperspace.hyperspace-exit": "Exit Hyperspace Scene",
"ffg-star-wars-enhancements.hyperspace.scene-note": "Note: Import 'Hyperspace (Enter)' and 'Hyperspace (Exit)' from the 'SceneIdeas' compendium to have these auto-select. See the wiki for more details."
}
2 changes: 2 additions & 0 deletions packs/sceneideas.db

Large diffs are not rendered by default.

10 changes: 10 additions & 0 deletions scripts/controls_layer.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {select_opening_crawl} from "./opening_crawl.js";
import {select_hyperspace} from "./hyperspace.js";
import {create_datapad_journal} from "./datapads.js";
import {shop_creator} from "./shop.js";
import {configure_attack_animation} from "./animation.js";
Expand Down Expand Up @@ -47,6 +48,15 @@ export const register_controls = controls => {
configure_attack_animation();
},
},
{
name: game.i18n.localize("ffg-star-wars-enhancements.controls.hyperspace.name"),
title: game.i18n.localize("ffg-star-wars-enhancements.controls.hyperspace.title"),
icon: "fas fa-rocket",
button: true,
onClick: () => {
select_hyperspace();
},
},
],
}
controls.splice(controls.findIndex(e => e.name === 'notes') + 1, 0, ffg_sw_enhancements_controls)
Expand Down
137 changes: 137 additions & 0 deletions scripts/hyperspace.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
import { log_msg as log } from './util.js'

/**
* Register settings used by hyperspace.
*/
export function init() {
log('hyperspace', 'Initialized');
}

/**
* Ready handler that listens on the ffg-star-wars-enhancements socket.
*/
export function ready() {
log('hyperspace', 'ready');
game.socket.on('module.ffg-star-wars-enhancements', socket_listener);
}

/**
* Launch hyperspace.
* @param {object} data
*/
export function launch_hyperspace(data) {
log('hyperspace', 'launching');

data = mergeObject(data, {
type: "hyperspace",
});
game.socket.emit('module.ffg-star-wars-enhancements', data);
socket_listener(data);
log('hyperspace', 'event emmitted');
}

/**
* Listener for the ffg-star-wars-enhancements socket that launches the
* scene transitions if the message type is "hyperspace"
*
* @param {object} data object passed to HyperspaceApplication
*/
function socket_listener(data) {
log('socket', data);
if (data.type == "hyperspace") {
run_hyperspace(data);
}
}

export function select_hyperspace() {
new HyperspaceSelectApplication().render(true);
}

class HyperspaceSelectApplication extends FormApplication {
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
template: "modules/ffg-star-wars-enhancements/templates/hyperspace_select.html",
id: "ffg-star-wars-enhancements-hyperspace-select",
title: game.i18n.localize('ffg-star-wars-enhancements.controls.hyperspace.title'),
});
}
async getData() {
const scenes = game.scenes.map(scene => {
return {
id: scene.id,
name: scene.name,
enter: scene.name == "Hyperspace (Enter)",
exit: scene.name == "Hyperspace (Exit)",
}
});
return { scenes };
}

_updateObject(event, data) {
launch_hyperspace(data);
log('hyperspace', 'select');
}
}

/**
* Transition between the selected scenes.
* @param {object} data
*/
async function run_hyperspace(data) {
log("hyperspace", data);
let enter_scene = game.scenes.get(data.hyperspace_enter);
let exit_scene = game.scenes.get(data.hyperspace_exit);
let target_scene = game.scenes.get(data.target_scene);

// Preloading the scenes
let enter_preload = game.scenes.preload(enter_scene.id);
let exit_preload = game.scenes.preload(exit_scene.id);
let target_preload = game.scenes.preload(target_scene.id);

await Promise.all([enter_preload, exit_preload, target_preload]);

// Hide the loading bar
$("#loading").css({ "left": -10000 });

// Checking negation to enter hyperspace for both enter and quick jump
if (data.transition_type != "exit_hyperspace") {
log("hyperspace", "Entering hyperspace");
await enter_scene.view();

// Stop the video loop
canvas.background.bgSource.loop = false;
canvas.background.bgSource.currentTime = 0;
await canvas.background.bgSource.play();

await new Promise(resolve => {
log("hyperspace", "Enter adding on-end hook");
canvas.background.bgSource.onended = () => {
log("hyperspace", "Enter video ended");
resolve();
};
});
}
// Checking negation to exit hyperspace for both exit and quick jump
if (data.transition_type != "enter_hyperspace") {
await exit_scene.view();

// Stop the video loop
canvas.background.bgSource.loop = false;
canvas.background.bgSource.currentTime = 0;
await canvas.background.bgSource.play();

await new Promise(resolve => {
log("hyperspace", "Exit adding on-end hook");
canvas.background.bgSource.onended = () => {
log("hyperspace", "Exit video ended");
resolve();
};
});
}

// Transitioning to final scene
await target_scene.view();

// Restore the loading bar
$("#loading").css("left", "");
}
49 changes: 49 additions & 0 deletions templates/hyperspace_select.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<form>
<h2>{{localize "ffg-star-wars-enhancements.hyperspace.title"}}</h2>
<div class="form-group">
<label>{{localize "ffg-star-wars-enhancements.hyperspace.transition-type"}}</label>
<div class="form-fields">
<select name="transition_type">
<option value="quick_jump" selected="selected">{{localize "ffg-star-wars-enhancements.hyperspace.quick-jump"}}</option>
<option value="enter_hyperspace">{{localize "ffg-star-wars-enhancements.hyperspace.enter-hyperspace"}}</option>
<option value="exit_hyperspace">{{localize "ffg-star-wars-enhancements.hyperspace.exit-hyperspace"}}</option>
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "ffg-star-wars-enhancements.hyperspace.target-scene"}}</label>
<div class="form-fields">
<select name="target_scene">
<option value=""></option>
{{#each scenes as |scene|}}
<option value="{{scene.id}}">{{scene.name}}</option>
{{/each}}
</select>
</div>
</div>
<hr/>
<p style="width:500px">{{localize "ffg-star-wars-enhancements.hyperspace.scene-note"}}</p>
<div class="form-group">
<label>{{localize "ffg-star-wars-enhancements.hyperspace.hyperspace-enter"}}</label>
<div class="form-fields">
<select name="hyperspace_enter">
<option value=""></option>
{{#each scenes as |scene|}}
<option value="{{scene.id}}" {{#if scene.enter}}selected="selected"{{/if}}">{{scene.name}}</option>
{{/each}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "ffg-star-wars-enhancements.hyperspace.hyperspace-exit"}}</label>
<div class="form-fields">
<select name="hyperspace_exit">
<option value=""></option>
{{#each scenes as |scene|}}
<option value="{{scene.id}}" {{#if scene.exit}}selected="selected"{{/if}}">{{scene.name}}</option>
{{/each}}
</select>
</div>
</div>
<button type="submit"><i class="fas fa-rocket"></i>{{localize "ffg-star-wars-enhancements.hyperspace.transition"}}</button>
</form>

0 comments on commit 1777fc1

Please sign in to comment.