Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
FogNetwork
GitHub Repository: FogNetwork/Tsunami
Path: blob/main/public/games/files/garbage-collector/js/levels/utils-level.js
1036 views
1
/*globals define*/
2
define(function( require ) {
3
'use strict';
4
5
var Level = require( 'level' );
6
7
var Colors = require( 'config/colors' );
8
var Material = require( 'config/material' );
9
10
var Polygon = require( 'geometry/polygon' );
11
var Segment = require( 'geometry/segment' );
12
13
var Player = require( 'entities/player' );
14
var Trail = require( 'effects/trail' );
15
16
function addTrail( game ) {
17
var trail = new Trail();
18
trail.fill.set({
19
red: 255,
20
green: 255,
21
blue: 255,
22
alpha: 0.2
23
});
24
25
trail.target = game.player;
26
game.add( trail );
27
}
28
29
function addBackground( game, red, green, blue, alpha ) {
30
game.background.fill.set({
31
red: red,
32
green: green,
33
blue: blue,
34
alpha: alpha
35
});
36
37
game.background.prerender();
38
}
39
40
function playerMaterialOff( game ) {
41
// Prevent player from changing material.
42
var materialBtn = document.getElementById( 'material-btn' );
43
materialBtn.style.display = 'none';
44
game.player.toggleMaterial = function() {};
45
}
46
47
function playerMaterialOn( game ) {
48
// Allow player to change material.
49
var materialBtn = document.getElementById( 'material-btn' );
50
materialBtn.style.display = '';
51
game.player.toggleMaterial = Player.prototype.toggleMaterial;
52
}
53
54
function loadData( game, data ) {
55
game.load({
56
entities: Level.loadBatchPhysicsEntities( JSON.parse( data ) )
57
});
58
}
59
60
// Helper functions for emitters.
61
function normalSpawnArea( width ) {
62
var halfWidth = 0.5 * width;
63
return new Segment( 0, -halfWidth, 0, halfWidth );
64
}
65
66
function normalTrash( material ) {
67
var trash = new Polygon();
68
69
trash.vertices = [ 0.75, 0.75, -0.75, 0.75, -0.75, -0.75, 0.75, -0.75 ];
70
trash.fill.set( Colors.Solid[ Material.type( material ) ] );
71
trash.stroke.set( Colors.White );
72
trash.lineWidth = 0.2;
73
74
return trash;
75
}
76
77
function normalTrashProperties( trash, material ) {
78
return {
79
shape: 'polygon',
80
type: 'vector',
81
data: trash.vertices.slice(),
82
fixture: {
83
density: 1.75,
84
friction: 0.5,
85
restitution: 0.2,
86
filter: {
87
categoryBits: material
88
}
89
},
90
body: {
91
angularVelocity: 3 * Math.PI,
92
linearDamping: 0.2,
93
type: 'dynamic'
94
}
95
};
96
}
97
98
return {
99
addTrail: addTrail,
100
addBackground: addBackground,
101
102
playerMaterialOff: playerMaterialOff,
103
playerMaterialOn: playerMaterialOn,
104
105
loadData: loadData,
106
107
// emitter helpers.
108
normalSpawnArea: normalSpawnArea,
109
normalTrash: normalTrash,
110
normalTrashProperties: normalTrashProperties
111
};
112
});
113
114