From 1edfc108a8d82c668ec0d3cc227232795f6b35f1 Mon Sep 17 00:00:00 2001 From: amgno Date: Thu, 18 Jan 2024 17:05:59 +0100 Subject: [PATCH] fixed some things, added some. New checkpoints. few others don't remember --- .DS_Store | Bin 10244 -> 10244 bytes assets/.DS_Store | Bin 10244 -> 10244 bytes assets/images/.DS_Store | Bin 10244 -> 10244 bytes assets/images/deaths/.DS_Store | Bin 0 -> 6148 bytes assets/images/level3bg.png | Bin 0 -> 82765 bytes assets/images/menu.png | Bin 37987 -> 31636 bytes assets/images/rain.png | Bin 138 -> 477 bytes backup1/lib/poliphaser.js | 426 +++++++++++++++++++++++++++++---- src/egg.js | 4 +- src/player.js | 10 +- src/scenes/death.js | 21 +- src/scenes/menu.js | 9 +- src/scenes/scene1.js | 10 +- src/scenes/scene2.js | 4 +- src/scenes/scene3.js | 64 ++--- 15 files changed, 451 insertions(+), 97 deletions(-) create mode 100644 assets/images/deaths/.DS_Store create mode 100644 assets/images/level3bg.png diff --git a/.DS_Store b/.DS_Store index b6b4f92f28144e998f9ace6ae6421d06e9ceda19..93cf26f806543dcc2fa32c4e652f95d81df1b56e 100644 GIT binary patch delta 13 UcmZn(XbITxUy#vslMss-045g%eESRO`{2P?`Gq^~ESRGi@4RtcIG%@Ozi*a$l-Lsu{I5~OV;nv~SiPr+v zlQW`+*?G1a>44Ss2OAVvD`gE98PF$T3>WPPijrk0WDz&r=zf_v60MC z#&eu2R~MJAtEz3-90;|ftioo`l?HVN$s1Ov@H^iR;rA85nt)TQTTXSv`WktwMxDb?jJ z@Ro36+PSKfiwsGum|1n1hYS2(YBzE&mPu?SRp551oEr|+w}js;&Cv&%rv*wQ3oE3W z2W#L%mDJjTAVS!N?NY1@JF&}D+b_*}(2D^irQ0zncM_*?8fS18S8x^AOuaEv?-s^! n7ZaGY<36VF6wmM+FYpR)F*o^5&EZBmFTTWw|6jwlzZ(7p+Y0J6 delta 1021 zcmdtg-Aj{E90%~<_fczyQ+nK-dz{*eaHg&`@rA6AwUn8YHm2sfNSpc$R%4no!6NL% zy6ElZfigIEbdEa~N<8-t`*WKi8%T?O4lQP7KZ*!ly!=&Ez~{c;W*KEK~+U^FoG zLZEv3rP!+!@s(=(&i0Pbt}Y=CB($Iw3lBzzw1)7Yme5;F5f+N}^u=4F2Q^(-%vQ!G zvn@qyO3F7>*VTKxK7TStVOB!=U4tH=T6A9L~ zFBvmJ>=>6vW5f^!= znL4SThUqk&rz>=u?$8W9qUZF6-qQ#AL|^F}eWxGDL>89AfLvHnh+?cl1*%blT6o|? z3wFSdHta?x_8^Q1`p}O7BruF)IF1uIiF3GsFFBDoagibIS?Y3)Lq_}!b(=UBnQ{s&S!gX#IoFF- z=MrJ(Xr5lv0)3RQi^!0i7OaLH4#`*#H@2Yxjgm5eAX-zLT@te!J%}MLLHA42LpY2P z9KlhX!Wo=Rv0hBEj^i4x;|3;-xQQ9u#Xa1|1I*$X=BGca*(-Erjx6z~|K$pJ|IrHk E0U&Vpz5oCK diff --git a/assets/images/.DS_Store b/assets/images/.DS_Store index 306ca4f94b4ce9607bdc4920e506c5412493f89e..de6349137cb2a41d4879f4fb195ec5cc7ef935d2 100644 GIT binary patch delta 1046 zcmdtgPe_w-9LMqR`?sl6XFOO-9f*>oA>{}S`KB;|#?l}|EBI@xFxv49GeTBxU#hH delta 1088 zcmdtgTS${(9LMqh_i3Kyiea-hL0otdn8wu2EfU&=1$GqARHU1}!C-F7cP+?DD{msC z!zdy$=&Gax;-WKk5q7%hCZY@}=tM+jPy|62y*RtjYrE;W`9077c`hD4{QB$q>xKud zS(WZmXNA|D9L`&ndS@NQ=JvUaiQBWc)Y;=(VeGvgPjc8=nVQTqt4dEW77pogm+KX3 zo+%?UD?7)WYnflr*woz8YH73PB|_S+O|f_=8qu4zZr#YFGk<$oYp5d{X$bAs+N{={ zx>m1+1MyHos|mz4-6k^^sq6VVy?%e+)V$bVlD;qg`>Zh%=+cV){`5IVvZYWeq(;_D zyL3yB49F=tCs$=u9>{ZfEg$8J`~(ykWRi=GLW*#*gc6of#&T9t!)n%0&la|_jW#-a z=^{dm9VFoztNLvRK3|gfGxxyZkxAIB8$!`OD0SmFS6c<%g8?+m#qk%@64BmEvbkJ!CM-AU@^iKA$&p_U9 zFdt@sBOK)zr#Zvm6!j1nxx{6zaf6%O;y$B1@Mt fy*{Jg<-S?{_M}XO6DpPEv}8E`w<8$e{ diff --git a/assets/images/deaths/.DS_Store b/assets/images/deaths/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 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 A*8l(j literal 0 HcmV?d00001 diff --git a/assets/images/menu.png b/assets/images/menu.png index eef60f385f00e8e0f7bbc151c872faf19cfc73e0..3e9246446aee6a779cca9f93d2b065edfba8e3a4 100644 GIT binary patch literal 31636 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

7;TG7U=Jd6rxd{>rs8Jp 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 literal 37987 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 Y&nfMxN^*<`?d$K}(zuzSZ2r&x0qjOPzW@LL diff --git a/assets/images/rain.png b/assets/images/rain.png index f29098a38d02303ac5f89b7c122ed318bd2e7292..00d28d79c6318436076fadc27586e5d365f13a14 100644 GIT binary patch delta 466 zcmV;@0WJQD0o?;3iBL{Q4GJ0x0000DNk~Le0000P0000Z2nGNE0AUEBsF5KTe*uq4 zL_t(YiM^J+b;2+dg+H=D*Z^{p0kVM|7iwVy*QyvnBap^5nIP0I6zEfg2@*C46Oh8P zBaDBZV>`D(lApeF-_ezroX=;Z(pF7@_asUm#6`eOmyZDh+-s{$m!gT(iMDDEe7fNY zm?u&CEvfC|WbOUFC37W`$ceTpe+1qtmhO@${c5Y1Ix#i#>zes)5N%Zq1U1VG=dvG! z_TIOxH$${lD`3{LN8sFchq&OG7C^4X@0y&f$d0N+Gv~Tel}ES~JgI5}TIa-c1VHAx z(#@5VhTutc70@atrU#(1{=$j2Y6-mdgaAAxQM$_qWhbI*LLlQ03WzXxe^LdmE5DGA z!IP@!O73KdJa|&gv{jE~$QX)!NH`MY!pYFB$`$yKQT4Bo(@6Ute8_Gj$cGQvjs)42 zAw#$9m_+HOfVkJp3=AnAu<}*E1r`GUUXmz{^FjFt$G8*GLwg@^1#xW)f&Cu=&q{XAsoOl)55VYx#OvgfO8@`>07*qo IM6N<$f}Ic5BLDyZ delta 124 zcmcc1+{LKa8Q|y6%O%Cdz`(%k>ERLtq(y;Po`VfYa`d!)n5ZZo#9-s;;uzx5`Sy&X zAcKGi!^KpVpBGIgx=8fOuoMU%`15!l!+HaM2FH1K8~A#Tlw3XX#?TZB{+2WPORy~b TZgSliXdr{9tDnm{r-UW|BaS8` diff --git a/backup1/lib/poliphaser.js b/backup1/lib/poliphaser.js index 3edb595..3b47dc6 100644 --- a/backup1/lib/poliphaser.js +++ b/backup1/lib/poliphaser.js @@ -1,4 +1,4 @@ -console.log('%c PoliPhaser - Version 0.4 ', 'background: #728FA5; color: white; font-size:20px;'); +console.log('%c PoliPhaser - Version 0.10 ', 'background: #728FA5; color: white; font-size:20px;'); /************* HELPER FUNCTIONS *************/ @@ -47,15 +47,33 @@ class __PP_internal_getset_obj_geometry { this.ph_obj.x = new_val; } + get body_x() { + return this.ph_obj.body.x; + } + + set body_x(new_val) { + PP.debug.assert(typeof new_val === "number", "Parameter error: x assigned to not a number."); + this.ph_obj.body.x = new_val; + } + get y() { return this.ph_obj.y; } + get body_y() { + return this.ph_obj.body.y; + } + set y(new_val) { PP.debug.assert(typeof new_val === "number", "Parameter error: y assigned to not a number."); this.ph_obj.y = new_val; } + set body_y(new_val) { + PP.debug.assert(typeof new_val === "number", "Parameter error: y assigned to not a number."); + this.ph_obj.body.y = new_val; + } + get scale_x() { return this.ph_obj.scaleX; } @@ -109,22 +127,13 @@ class __PP_internal_getset_obj_geometry { this.ph_obj.angle = new_val; } - get alpha() { - return this.ph_obj.alpha; - } - - set alpha(new_val) { - PP.debug.assert(typeof new_val === "number", "Parameter error: alpha assigned to not a number."); - this.ph_obj.alpha = new_val; - } - } class __PP_internal_getset_obj_tile_geometry { constructor(ph_obj) { this.ph_obj = ph_obj; } /** - * The geomtry namespace is a particular namespace that is contained in several objects like + * The geometry namespace is a particular namespace that is contained in several objects like * images, sprites, polygons, etc. * @namespace tile_geometry * @property {number} x The horizontal position (in pixels) @@ -171,6 +180,38 @@ class __PP_internal_getset_obj_tile_geometry { } +class __PP_internal_getset_obj_visibility { + constructor(ph_obj) { this.ph_obj = ph_obj; } + + /** + * The visibility namespace is a particular namespace that is contained in several objects like + * images, sprites, polygons, layers, etc. + * @namespace visibility + * @property {number} alpha The opacity value (from 0 to 1) + * + * @memberof visibility + */ + + get alpha() { + return this.ph_obj.alpha; + } + + set alpha(new_val) { + PP.debug.assert(typeof new_val === "number", "Parameter error: alpha assigned to not a number."); + this.ph_obj.alpha = new_val; + } + + get hidden() { + return !this.ph_obj.visible; + } + + set hidden(new_val) { + PP.debug.assert(typeof new_val === "boolean", "Parameter error: visible assigned to not a boolean."); + this.ph_obj.visible = !new_val; + } + +} + /************* MAIN OBJECTS *************/ /** @@ -296,6 +337,12 @@ PP.shapes = {}; */ PP.camera = {}; +/** + * The namespace containing functions to manage layers + * @namespace + * @memberof PP + */ +PP.layers = {}; PP.debug = { assert : function(condition, message) { @@ -371,6 +418,54 @@ PP.game.create = function (config) { PP.game.ph_obj = new Phaser.Game(phaser_config); } +/** + * Return the delta time between the current frame and the previous one of + * the rendering engine. This value may be averaged with a moving window. + * @function time_delta + * @memberof PP.game + */ +PP.game.time_delta = function() { + return PP.game.ph_obj.loop.delta; +} + +/** + * Return the number of the current frame starting from 0. + * @function time_frame_nr + * @memberof PP.game + */ +PP.game.time_frame_nr = function() { + return PP.game.ph_obj.loop.frame; +} + +/** + * Enforce a fixed value for the physics FPS. Note: this is only the FPS of the physics engine, + * not the rendering engine! + * @function set_physics_fps + * @memberof PP.game + * @param {object} scene The scene object + * @param {number} fps The FPS to set + */ +PP.game.set_physics_fps = function(scene, fps) { + PP.debug.assert(typeof scene === "object", "Parameter error: scene should be a scene object."); + PP.debug.assert(typeof fps === "number", "Parameter error: fps should be an object."); + + scene.physics.world.setFPS(fps); +} + +/** + * Get the fixed value for the physics FPS. Note: this is only the FPS of the physics engine, + * not the rendering engine! + * @function get_physics_fps + * @memberof PP.game + * @param {object} scene The scene object + */ +PP.game.get_physics_fps = function(scene) { + PP.debug.assert(typeof scene === "object", "Parameter error: scene should be a scene object."); + + return scene.physics.world.fps; +} + + /* * Start the game. This function must be called after the creation of the game (PP.game.create) and the addition of the scenes. * @function start @@ -511,8 +606,8 @@ PP.scenes.stop_overlay = function() { * Set a vaue or add a new variable to the game state shared among the different scenes * @function set_variable * @memberof PP.gameState - * @param {string} variable_name the name of the variable - * @param {*} variable_value + * @param {string} variable_name The name of the variable + * @param {*} variable_value The variable (any variable type is ok). */ PP.gameState.set_variable = function(variable_name, variable_value){ //PP.debug.assert(typeof variable_name !== "", "Parameter error: variable_name cannot be an empty string."); @@ -594,7 +689,10 @@ PP.assets.image.add = function(scene, image, x, y, pivot_x, pivot_y) { let temp_image = scene.add.image(x, y, image.id); temp_image.setOrigin(pivot_x,pivot_y); - let ret_obj = {ph_obj: temp_image, orig_image : image, geometry : new __PP_internal_getset_obj_geometry(temp_image)}; + let ret_obj = {ph_obj: temp_image, orig_image : image, + geometry : new __PP_internal_getset_obj_geometry(temp_image), + tile_geometry : new __PP_internal_getset_obj_tile_geometry(temp_image), + visibility: new __PP_internal_getset_obj_visibility(temp_image)}; ret_obj.ph_obj.backprop_obj = ret_obj; return ret_obj; } @@ -605,7 +703,10 @@ PP.assets.image.add = function(scene, image, x, y, pivot_x, pivot_y) { * Load a new spritesheet. * @function load_spritesheet * @memberof PP.assets.sprite - * @param {string} image_path A path of the image containing the spritesheet to load. It can be relative to the current page or a full URL. + * @param {object} scene The scene object. + * @param {string} image_path A path of the image containing the spritesheet to load. It can be relative to the current page or a full URL. + * @param {number} frame_width The frame width of the spritesheet in px. + * @param {number} frame_height The frame height of the spritesheet in px. * @return An object representing the spritesheet image file. */ PP.assets.sprite.load_spritesheet = function(scene, image_path, frame_width, frame_height) { @@ -635,8 +736,8 @@ PP.assets.sprite.load_spritesheet = function(scene, image_path, frame_width, fra * @param {object} sprite The object of a sprite as returned by PP.assets.sprite.load * @param {number} x The horizontal initial position in pixels of the image. * @param {number} y The vertical initial position in pixels of the image. - * @param {number} pivot_x The pivot X position **in percentage ** from 0 to 1. - * @param {number} pivot_y The pivot Y position **in percentage ** from 0 to 1. + * @param {number} pivot_x The pivot X position **in percentage** from 0 to 1. + * @param {number} pivot_y The pivot Y position **in percentage** from 0 to 1. * @return An sprite instance object representing the specific sprite added to the scene. */ PP.assets.sprite.add = function(scene, sprite, x, y, pivot_x, pivot_y) { @@ -652,7 +753,10 @@ PP.assets.sprite.add = function(scene, sprite, x, y, pivot_x, pivot_y) { let temp_image = scene.add.sprite(x, y, sprite.id); temp_image.setOrigin(pivot_x,pivot_y); - let ret_obj = {ph_obj: temp_image, orig_sprite : sprite, list_of_animations : [], geometry : new __PP_internal_getset_obj_geometry(temp_image)}; + let ret_obj = {ph_obj: temp_image, orig_sprite : sprite, list_of_animations : [], + geometry : new __PP_internal_getset_obj_geometry(temp_image), + tile_geometry : new __PP_internal_getset_obj_tile_geometry(temp_image), + visibility: new __PP_internal_getset_obj_visibility(temp_image)}; ret_obj.ph_obj.backprop_obj = ret_obj; return ret_obj; } @@ -770,7 +874,7 @@ PP.assets.sprite.animation_stop = function(sprite_instance) { } /** - * Stop the current animation of the sprite instance passed as parameter + * TODO * @function add * @memberof PP.assets.tilesprite * @param {object} scene The scene object where to add the image. @@ -779,6 +883,8 @@ PP.assets.sprite.animation_stop = function(sprite_instance) { * @param {number} y The vertical initial position in pixels of the image. * @param {number} width The width of the tilesprite. If zero it will use the size of the texture frame. * @param {number} height The height of the tilesprite. If zero it will use the size of the texture frame. + * @param {number} pivot_x The pivot X position **in percentage** from 0 to 1. + * @param {number} pivot_y The pivot Y position **in percentage** from 0 to 1. */ PP.assets.tilesprite.add = function(scene, image, x, y, width, height, pivot_x, pivot_y) { PP.debug.assert(typeof scene === "object", "Parameter error: scene should be a scene object."); @@ -795,8 +901,10 @@ PP.assets.tilesprite.add = function(scene, image, x, y, width, height, pivot_x, let temp_ts = scene.add.tileSprite(x, y, width, height, image.id); temp_ts.setOrigin(pivot_x,pivot_y); - let ret_obj = {ph_obj: temp_ts, orig_image : image, geometry : new __PP_internal_getset_obj_geometry(temp_ts), - tile_geometry : new __PP_internal_getset_obj_tile_geometry(temp_ts) + let ret_obj = {ph_obj: temp_ts, orig_image : image, + geometry : new __PP_internal_getset_obj_geometry(temp_ts), + tile_geometry : new __PP_internal_getset_obj_tile_geometry(temp_ts), + visibility: new __PP_internal_getset_obj_visibility(temp_ts) }; ret_obj.ph_obj.backprop_obj = ret_obj; return ret_obj; @@ -811,12 +919,50 @@ PP.assets.tilesprite.add = function(scene, image, x, y, width, height, pivot_x, */ PP.assets.destroy = function(obj) { PP.debug.assert(typeof obj === "object", "Parameter error: obj should be an object."); - PP.debug.assert(typeof obj.ph_obj === "object", "Parameter error: obj is not a valid shape instance."); + PP.debug.assert(typeof obj.ph_obj === "object", "Parameter error: obj is not a valid PP object instance."); obj.ph_obj.destroy(); } +/** + * Return the pivot of the object passed as argument on the X axis. + * @function pivot_get_x + * @memberof PP.assets + * @param {object} obj The scene object. + */ +PP.assets.pivot_get_x = function(obj) { + PP.debug.assert(typeof obj === "object", "Parameter error: obj should be an object."); + PP.debug.assert(typeof obj.ph_obj === "object", "Parameter error: obj is not a valid PP object instance."); + return obj.ph_obj.originX; +} + +/** + * Return the pivot of the object passed as argument on the Y axis. + * @function pivot_get_y + * @memberof PP.assets + * @param {object} obj The scene object. + */ +PP.assets.pivot_get_y = function(obj) { + PP.debug.assert(typeof obj === "object", "Parameter error: obj should be an object."); + PP.debug.assert(typeof obj.ph_obj === "object", "Parameter error: obj is not a valid PP object instance."); + return obj.ph_obj.originY; +} + +/** + * Set a new value for the pivot of the object passed as argument. + * @function pivot_set + * @memberof PP.assets + * @param {object} obj The scene object. + * @param {number} pivot_x The pivot X position **in percentage** from 0 to 1. + * @param {number} pivot_y The pivot Y position **in percentage** from 0 to 1. + */ +PP.assets.pivot_set = function(obj, pivot_x, pivot_y) { + PP.debug.assert(typeof obj === "object", "Parameter error: obj should be an object."); + PP.debug.assert(typeof obj.ph_obj === "object", "Parameter error: obj is not a valid PP object instance."); + obj.ph_obj.setOrigin(pivot_x,pivot_y); +} + /************* SHAPES *************/ /** @@ -882,7 +1028,10 @@ PP.shapes.rectangle_add = function(scene, x, y, width, height, fill_color, fill_ let rect = scene.add.rectangle(x, y, width, height, fill_color, fill_alpha); - let ret_obj = {ph_obj: rect}; + let ret_obj = {ph_obj: rect, + geometry : new __PP_internal_getset_obj_geometry(rect), + tile_geometry : new __PP_internal_getset_obj_tile_geometry(rect), + visibility : new __PP_internal_getset_obj_visibility(rect)}; ret_obj.ph_obj.backprop_obj = ret_obj; return ret_obj; @@ -919,7 +1068,10 @@ PP.shapes.arc_add = function(scene, x, y, radius, start_angle, end_angle, anticl let arc = scene.add.arc(x, y, radius, start_angle, end_angle, anticlockwise, fill_color, fill_alpha); - let ret_obj = {ph_obj: arc}; + let ret_obj = {ph_obj: arc, + geometry : new __PP_internal_getset_obj_geometry(arc), + tile_geometry : new __PP_internal_getset_obj_tile_geometry(arc), + visibility : new __PP_internal_getset_obj_visibility(arc)}; ret_obj.ph_obj.backprop_obj = ret_obj; return ret_obj; } @@ -952,7 +1104,10 @@ PP.shapes.polygon_add = function(scene, x, y, points, fill_color, fill_alpha) { let polygon = scene.add.polygon(x, y, points, fill_color, fill_alpha); - let ret_obj = {ph_obj: polygon}; + let ret_obj = {ph_obj: polygon, + geometry : new __PP_internal_getset_obj_geometry(polygon), + tile_geometry : new __PP_internal_getset_obj_tile_geometry(polygon), + visibility : new __PP_internal_getset_obj_visibility(polygon)}; ret_obj.ph_obj.backprop_obj = ret_obj; return ret_obj; @@ -976,7 +1131,11 @@ PP.shapes.text_add = function(scene, x, y, text){ let txt = scene.add.text(x,y,text); - let ret_obj = {ph_obj:txt}; + let ret_obj = {ph_obj:txt, + geometry : new __PP_internal_getset_obj_geometry(txt), + tile_geometry : new __PP_internal_getset_obj_tile_geometry(txt), + visibility: new __PP_internal_getset_obj_visibility(txt) + }; ret_obj.ph_obj.backprop_obj = ret_obj; return ret_obj; } @@ -994,11 +1153,13 @@ PP.shapes.text_add = function(scene, x, y, text){ * @param {string} fontStyle The style of the font to be used ("normal", "italic", "oblique", "bold"). * @param {string} color The 6-digits HEX representation of the text color in the format 0xABCDEF. * @param {string} background_color The 6-digits HEX representation of the background color in the format 0xABCDEF. May be null. + * @param {number} pivot_x The pivot of the text on the x axis (0 to 1). + * @param {number} pivot_y The pivot of the text on the y axis (0 to 1). * * @return A shape object representing the text. */ -PP.shapes.text_styled_add = function(scene, x, y, text, fontSize, fontFamily, fontStyle, color, background_color) { +PP.shapes.text_styled_add = function(scene, x, y, text, fontSize, fontFamily, fontStyle, color, background_color, pivot_x, pivot_y) { PP.debug.assert(typeof scene === "object", "Parameter error: scene should be a scene object."); PP.debug.assert(typeof x === "number", "Parameter error: x should be a number."); PP.debug.assert(typeof y === "number", "Parameter error: y should be a number."); @@ -1028,9 +1189,14 @@ PP.shapes.text_styled_add = function(scene, x, y, text, fontSize, fontFamily, fo if(background_color!==null) { textconfig.backgroundColor = colbkg; } - + let txt = scene.add.text(x,y,text, textconfig); - let ret_obj = {ph_obj:txt}; + txt.setOrigin(pivot_x, pivot_y); + + let ret_obj = {ph_obj:txt, + geometry : new __PP_internal_getset_obj_geometry(txt), + tile_geometry : new __PP_internal_getset_obj_tile_geometry(txt), + visibility: new __PP_internal_getset_obj_visibility(txt)}; ret_obj.ph_obj.backprop_obj = ret_obj; return ret_obj; } @@ -1053,12 +1219,12 @@ PP.shapes.changeText = PP.shapes.change_text; // Legacy * Add a new interaction with an object * @function add * @memberof PP.interactive.mouse - * @param {object} obj The object onto the interaction will be enabled. - * @param {type_of_event} string Identify the type of interaction. It can be: "pointerdown", + * @param {object} obj The object onto the interaction will be enabled. + * @param {string} type_of_event Identify the type of interaction. It can be: "pointerdown", * "pointerdownoutside", "pointermove", "pointerout", * "pointerover", "pointerup", "pointerupoutside", "wheel" - * @param {function_to_call} function Callback function to call when an event occurred. The - * function must accept one parameter: the current scene. + * @param {function} function_to_call function to call when an event occurred. The + * function must accept one parameter: the current scene. */ PP.interactive.mouse.add = function(obj, type_of_event, function_to_call) { PP.debug.assert(typeof obj === "object", "Parameter error: obj should be an object."); @@ -1077,8 +1243,8 @@ PP.interactive.mouse.add = function(obj, type_of_event, function_to_call) { * Remove all previous added interactions with an object of a given type of event * @function remove_all * @memberof PP.interactive.mouse - * @param {object} obj The object onto the interactions will be erased. - * @param {type_of_event} string Identify the type of interaction. It can be: "pointerdown", + * @param {object} obj The object onto the interactions will be erased. + * @param {string} type_of_event the type of interaction. It can be: "pointerdown", * "pointerdownoutside", "pointermove", "pointerout", * "pointerover", "pointerup", "pointerupoutside", "wheel" */ @@ -1125,6 +1291,7 @@ PP.interactive.kb.is_key_down = function(scene, key_code) { * @return true if the button is not pressed, false otherwise */ PP.interactive.kb.is_key_up = function(scene, key_code) { + PP.debug.assert(typeof scene === "object", "Parameter error: scene should be a scene object."); PP.debug.assert(typeof key_code == "number", "Parameter error: key_code is not a number."); PP.debug.assert(Object.values(PP.key_codes).includes(key_code), "Parameter error: key_code is invalid."); @@ -1150,16 +1317,34 @@ PP.interactive.kb.is_key_up = function(scene, key_code) { * @param {number} offset_x Offset X of the object to follow * @param {number} offset_y Offset Y of the object to follow */ -PP.camera.start_follow = function(s, obj, offset_x, offset_y) { +PP.camera.start_follow = function(scene, obj, offset_x, offset_y) { + PP.debug.assert(typeof scene === "object", "Parameter error: scene should be a scene object."); PP.debug.assert(typeof obj === "object", "Parameter error: obj should be an object."); PP.debug.assert(typeof obj.ph_obj === "object", "Parameter error: obj is an object but it is not a valid object."); PP.debug.assert(typeof offset_x === "number", "Parameter error: offset_x should be a number."); PP.debug.assert(typeof offset_y === "number", "Parameter error: offset_y should be a number."); - s.cameras.main.startFollow(obj.ph_obj); - s.cameras.main.setFollowOffset(offset_x, offset_y); + scene.cameras.main.startFollow(obj.ph_obj); + scene.cameras.main.setFollowOffset(offset_x, offset_y); } +/** + * Change the offset of the camera. + * @function set_follow_offset + * @memberof PP.camera + * @param {object} scene The scene object. + * @param {number} offset_x Offset X in pixels + * @param {number} offset_y Offset Y in pixels + */ +PP.camera.set_follow_offset = function(scene, offset_x, offset_y) { + PP.debug.assert(typeof scene === "object", "Parameter error: scene should be a scene object."); + PP.debug.assert(typeof offset_x === "number", "Parameter error: offset_x should be a number."); + PP.debug.assert(typeof offset_y === "number", "Parameter error: offset_y should be a number."); + + scene.cameras.main.setFollowOffset(offset_x, offset_y); +} + + PP.camera.get_scroll_x = function(s) { return s.cameras.main.scrollX; } @@ -1172,12 +1357,12 @@ PP.camera.get_scroll_y = function(s) { /************* TIMER *************/ /** * Create a timer to start a function after a detemrined delay - * @param {object} scene the scene in which the timer take placetypeof s === "object" - * @param {number} delay the amount of seconds to be waited - * @param {function_to_call} function_to_call Callback function to call when an event occurred. The function must accept one parameter: the current scene. - * @param {boolean} loop + * @param {object} scene The scene in which the timer take placetypeof s === "object" + * @param {number} delay The amount of milliseconds to be waited + * @param {function} function_to_call Callback function to call when an event occurred. The function must accept one parameter: the current scene. + * @param {boolean} loop Whether the time is infinite (true) or single-short (false) */ -PP.timers.add_timer = function(s, delay, function_to_call, loop){ +PP.timers.add_timer = function(s, delay, function_to_call, loop) { PP.debug.assert(typeof delay === "number", "Parameter error: delay should be a number."); PP.debug.assert(typeof function_to_call === "function","Parameter error: function_to_call should be a function."); @@ -1287,7 +1472,7 @@ PP.physics.set_acceleration_x = function(obj, acc_x) { PP.debug.assert(typeof obj === "object", "Parameter error: obj should be an object."); PP.debug.assert(typeof obj.ph_obj === "object", "Parameter error: obj is an object but it is not a valid object."); PP.debug.assert(obj.has_physics, "Parameter error: obj does not have physics."); - PP.debug.assert(typeof acc_x === "number", "Parameter error: vel_x should be a number."); + PP.debug.assert(typeof acc_x === "number", "Parameter error: acc_x should be a number."); obj.ph_obj.body.setAccelerationX(acc_x); } @@ -1302,11 +1487,26 @@ PP.physics.set_acceleration_y = function(obj, acc_y) { PP.debug.assert(typeof obj === "object", "Parameter error: obj should be an object."); PP.debug.assert(typeof obj.ph_obj === "object", "Parameter error: obj is an object but it is not a valid object."); PP.debug.assert(obj.has_physics, "Parameter error: obj does not have physics."); - PP.debug.assert(typeof acc_y === "number", "Parameter error: vel_x should be a number."); + PP.debug.assert(typeof acc_y === "number", "Parameter error: acc_y should be a number."); obj.ph_obj.body.setAccelerationY(acc_y); } +/** + * + * Set the rotation (in °/s) of the object. + * @param {object} obj The object previously added to the physics engine + * @param {float} rot The rotation speed + */ +PP.physics.set_rotation = function(obj, rot) { + PP.debug.assert(typeof obj === "object", "Parameter error: obj should be an object."); + PP.debug.assert(typeof obj.ph_obj === "object", "Parameter error: obj is an object but it is not a valid object."); + PP.debug.assert(obj.has_physics, "Parameter error: obj does not have physics."); + PP.debug.assert(typeof rot === "number", "Parameter error: rot should be a number."); + + obj.ph_obj.body.setAngularVelocity(rot); +} + /** * * Enable or Disable the collision of an object with respect to the world bounds. @@ -1338,7 +1538,8 @@ PP.physics.add_collider = function(s, obj1, obj2) { PP.debug.assert(typeof obj2.ph_obj === "object", "Parameter error: obj2 is an object but it is not a valid object."); PP.debug.assert(obj2.has_physics, "Parameter error: obj2 does not have physics."); - s.physics.add.collider(obj1.ph_obj, obj2.ph_obj); + let ph_obj = s.physics.add.collider(obj1.ph_obj, obj2.ph_obj); + return {ph_collider: ph_obj}; } /** @@ -1359,7 +1560,8 @@ PP.physics.add_collider_f = function(s, obj1, obj2, func) { PP.debug.assert(obj2.has_physics, "Parameter error: obj2 does not have physics."); PP.debug.assert(typeof func === "function", "Parameter error: func must be a function."); - s.physics.add.collider(obj1.ph_obj, obj2.ph_obj, (a,b)=>{func(s,a.backprop_obj,b.backprop_obj)}); + let ph_obj = s.physics.add.collider(obj1.ph_obj, obj2.ph_obj, (a,b)=>{func(s,a.backprop_obj,b.backprop_obj)}); + return {ph_collider: ph_obj}; } /** @@ -1380,7 +1582,16 @@ PP.physics.add_overlap_f = function(s, obj1, obj2, func) { PP.debug.assert(obj2.has_physics, "Parameter error: obj2 does not have physics."); PP.debug.assert(typeof func === "function", "Parameter error: func must be a function."); - s.physics.add.overlap(obj1.ph_obj, obj2.ph_obj, (a,b)=>{func(s,a.backprop_obj,b.backprop_obj)}); + let ph_obj = s.physics.add.overlap(obj1.ph_obj, obj2.ph_obj, (a,b)=>{func(s,a.backprop_obj,b.backprop_obj)}); + return {ph_collider: ph_obj}; +} + +PP.physics.remove_collider_or_overlap = function(s, obj) { + PP.debug.assert(typeof s === "object", "Parameter error: s should be an object."); + PP.debug.assert(typeof obj === "object", "Parameter error: obj should be an object."); + PP.debug.assert(typeof obj.ph_collider === "object", "Parameter error: obj is an object but it is a collider."); + + s.physics.world.removeCollider(obj.ph_collider); } /** @@ -1503,6 +1714,121 @@ PP.physics.set_allow_gravity = function(obj, gravity) { obj.ph_obj.body.setAllowGravity(gravity); } +/** + * + * Change the rectangle size of the collision boundaries + * @param {object} obj The object previously added to the physics engine + * @param {boolean} width Width (in px) + * @param {boolean} height Height (in px) + * @param {boolean} offset_x Offset of the rectangle on the x axis (in px) + * @param {boolean} offset_y Offset of the rectangle on the y axis (in px) + */ +PP.physics.set_collision_rectangle = function(obj, width, height, offset_x, offset_y) { + PP.debug.assert(typeof obj === "object", "Parameter error: obj should be an object."); + PP.debug.assert(typeof obj.ph_obj === "object", "Parameter error: obj is an object but it is not a valid object."); + PP.debug.assert(obj.has_physics, "Parameter error: obj does not have physics."); + + PP.debug.assert(typeof width === "number", "Parameter error: width should be a number."); + PP.debug.assert(typeof height === "number", "Parameter error: height should be a number."); + PP.debug.assert(typeof offset_x === "number", "Parameter error: offset_x should be a number."); + PP.debug.assert(typeof offset_y === "number", "Parameter error: offset_y should be a number."); + + console.log(obj.ph_obj); + + obj.ph_obj.body.setSize(width, height); + obj.ph_obj.body.setOffset(offset_x, offset_y); +} + +/** + * + * Transform the rectangle of the collision boundaries in a circle + * @param {object} obj The object previously added to the physics engine + * @param {boolean} radius Radius (in px) + * @param {boolean} offset_x Offset of the circle on the x axis (in px) + * @param {boolean} offset_y Offset of the circle on the y axis (in px) + */ +PP.physics.set_collision_circle = function(obj, radius, offset_x, offset_y) { + PP.debug.assert(typeof obj === "object", "Parameter error: obj should be an object."); + PP.debug.assert(typeof obj.ph_obj === "object", "Parameter error: obj is an object but it is not a valid object."); + PP.debug.assert(obj.has_physics, "Parameter error: obj does not have physics."); + + PP.debug.assert(typeof radius === "number", "Parameter error: radius should be a number."); + PP.debug.assert(typeof offset_x === "number", "Parameter error: offset_x should be a number."); + PP.debug.assert(typeof offset_y === "number", "Parameter error: offset_y should be a number."); + + obj.ph_obj.body.setCircle(radius, offset_x, offset_y); +} + +/** + * + * Change the offset x and y of the collision boundaries + * @param {object} obj The object previously added to the physics engine + * @param {boolean} offset_x Offset of the circle on the x axis (in px) + * @param {boolean} offset_y Offset of the circle on the y axis (in px) + */ +PP.physics.set_collision_offset = function(obj, offset_x, offset_y) { + PP.debug.assert(typeof obj === "object", "Parameter error: obj should be an object."); + PP.debug.assert(typeof obj.ph_obj === "object", "Parameter error: obj is an object but it is not a valid object."); + PP.debug.assert(obj.has_physics, "Parameter error: obj does not have physics."); + + PP.debug.assert(typeof offset_x === "number", "Parameter error: offset_x should be a number."); + PP.debug.assert(typeof offset_y === "number", "Parameter error: offset_y should be a number."); + + obj.ph_obj.body.setOffset(offset_x, offset_y); +} + + +/************* LAYERS *************/ +/** + * + * Create a new empy layer + * @param {object} s The scene + */ +PP.layers.create = function(s) { + PP.debug.assert(typeof s === "object", "Parameter error: scene should be a scene object."); + + let temp_obj = s.add.layer(); + let ret_obj = {ph_obj: temp_obj, visibility: new __PP_internal_getset_obj_visibility(temp_obj)}; + return ret_obj; +} + +/** + * + * Add an object to a layer + * @param {object} s The scene + * @param {object} layer The destination layer + * @param {object} obj The object to add to the layer. + */ +PP.layers.add_to_layer = function(layer, obj) { + PP.debug.assert(typeof layer === "object", "Parameter error: layer should be an object."); + PP.debug.assert(typeof layer.ph_obj === "object", "Parameter error: layer should be a valid object."); + PP.debug.assert(typeof obj === "object", "Parameter error: object should be an object."); + PP.debug.assert(typeof obj.ph_obj === "object", "Parameter error: object should be a valid object."); + + layer.ph_obj.add(obj.ph_obj); +} + +/** + * + * Set the depth (z-index) of the layer + * @param {object} layer The destination layer + * @param {number} z_index The z-index. + */ +PP.layers.set_z_index = function(layer, z_index) { + PP.debug.assert(typeof layer === "object", "Parameter error: scene should be a scene object."); + PP.debug.assert(typeof z_index === "number", "Parameter error: z_index should be a number."); + + return layer.ph_obj.setDepth(z_index); +} + +/** + * + * Get the depth (z-index) of the layer + * @param {object} layer The layer + */ +PP.layers.get_z_index = function(layer) { + PP.debug.assert(typeof layer === "object", "Parameter error: scene should be a scene object."); + + return layer.ph_obj.depth; +} -// TODO: -// - Alpha per tutti i valori diff --git a/src/egg.js b/src/egg.js index 826db0d..2663478 100644 --- a/src/egg.js +++ b/src/egg.js @@ -28,9 +28,9 @@ function create_egg(s, player){ // Generate a raindrop every 100 milliseconds setInterval(function () { generateEgg(s, 1); - PP.physics.set_velocity_x(egg, -800); + PP.physics.set_velocity_x(egg, -700); - }, 1000); + }, 2000); } diff --git a/src/player.js b/src/player.js index 8d4968c..4d92e87 100644 --- a/src/player.js +++ b/src/player.js @@ -52,19 +52,19 @@ function manage_player_update(s, player) { if (PP.interactive.kb.is_key_up(s, PP.key_codes.SPACE)) { - if(testfallback){ - PP.physics.set_velocity_y(player, +player_jump / 1.5); - testfallback = false; + if (testfallback) { + PP.physics.set_velocity_y(player, +player_jump / 1.5); + testfallback = false; } } - if (PP.physics.get_velocity_y(player) < 0) { + if (PP.physics.get_velocity_y(player) < 0 && PP.interactive.kb.is_key_down(s, PP.key_codes.SPACE)) { next_anim = "jump_up"; } - if (PP.physics.get_velocity_y(player) > 0) { + if (PP.physics.get_velocity_y(player) > 300) { player.is_on_platform = false; next_anim = "jump_down" } diff --git a/src/scenes/death.js b/src/scenes/death.js index 9015b98..e258411 100644 --- a/src/scenes/death.js +++ b/src/scenes/death.js @@ -17,6 +17,8 @@ function preload(s) { img_death_4 = PP.assets.image.load(s, "assets/images/deaths/spriteidk.png"); img_death_5 = PP.assets.image.load(s, "assets/images/deaths/spritelost.png"); img_death_6 = PP.assets.image.load(s, "assets/images/deaths/spriteraindeath.png"); + + }; function create(s) { deathimg = PP.gameState.get_Variable("deathimg"); @@ -36,11 +38,28 @@ function create(s) { else if (deathimg === 1) { PP.assets.image.add(s, img_death_1, 0,0,0,0) } + + hp = 3; + hp2 = 3; }; function update(s) { if (PP.interactive.kb.is_key_down(s, PP.key_codes.SPACE)) { - PP.scenes.start("scene3"); + if (deathimg === 1){ + PP.scenes.start("scene2"); + } + if (deathimg === 2){ + PP.scenes.start("scene2"); + } + if (deathimg === 6){ + PP.scenes.start("scene1"); + } + if (deathimg === 3){ + PP.scenes.start("scene1"); + } + if (deathimg === 5){ + PP.scenes.start("scene3"); + } } }; diff --git a/src/scenes/menu.js b/src/scenes/menu.js index 8bb3b6b..ae909f8 100644 --- a/src/scenes/menu.js +++ b/src/scenes/menu.js @@ -1,3 +1,6 @@ +//sistemare hover menu colore. -- + + let menubackground; let txt; let txt2; @@ -84,15 +87,19 @@ function update(s) { }; function test3(s) { - PP.scenes.start("scene3") + PP.scenes.start("scene1") PP.scenes.stop("menu"); }; + PP.interactive.mouse.add(txt, "pointerdown", test); PP.interactive.mouse.add(txt2, "pointerdown", test2); PP.interactive.mouse.add(txt3, "pointerdown", test3); + //hover + + if (PP.interactive.kb.is_key_down(s, PP.key_codes.S) && !isSelectFunctionCalled) { select(s); diff --git a/src/scenes/scene1.js b/src/scenes/scene1.js index 4ef5198..61bc718 100644 --- a/src/scenes/scene1.js +++ b/src/scenes/scene1.js @@ -1,5 +1,7 @@ //aggiungere punti hp + // sistemare colore +//allargare generazione rain + let img_background; let player; @@ -16,6 +18,7 @@ let testcamera; + function collision(s, player, platform){ // console.log("a") if(player.geometry.y <= platform.geometry.y){ @@ -32,6 +35,7 @@ function preload(s) { vecchia = PP.assets.image.load(s, "assets/images/vecchia.png") preload_mushrooms(s); preload_rain(s); + }; @@ -47,10 +51,10 @@ function create(s) { background.tile_geometry.flip_y = 1; // background = PP.assets.image.add(s, img_background, 0 , 0, 0, 0); - player = PP.assets.sprite.add(s, ss_player, 390, 600, 0.5, 1); + player = PP.assets.sprite.add(s, ss_player, 390, 640, 0.5, 1); - floor = PP.shapes.rectangle_add(s, 1040, 640, 3080, 1, "0x000000", 0); + floor = PP.shapes.rectangle_add(s, 1040, 639, 3080, 1, "0x000000", 0); PP.physics.add(s, player, PP.physics.type.DYNAMIC); PP.physics.add(s, floor, PP.physics.type.STATIC); @@ -180,8 +184,6 @@ function update(s) { function destroy(s) { - - }; diff --git a/src/scenes/scene2.js b/src/scenes/scene2.js index 1747720..82dce0c 100644 --- a/src/scenes/scene2.js +++ b/src/scenes/scene2.js @@ -1,5 +1,5 @@ // sistemare bug quando sto su nuvole che vanno y+ -//sistemare pioggia +// sistemare pioggia @@ -96,7 +96,6 @@ function collision_platform(s, player, platform) { } - function create(s) { txt_text = PP.shapes.text_styled_add(s, 100, 100, "X X X", 40, "Helvetica", "normal", "0xFFFFFF", null); player = PP.assets.sprite.add(s, ss_player, 100, 220, 0.5, 1); @@ -215,7 +214,6 @@ function update(s) { txt_text.tile_geometry.scroll_factor_x = 0; txt_text.tile_geometry.scroll_factor_y = 0; - console.log(hp2); if (hp2 === 0) { if (diedfromegg) { deathhandler(s, 1); diff --git a/src/scenes/scene3.js b/src/scenes/scene3.js index ccf3a52..06106fa 100644 --- a/src/scenes/scene3.js +++ b/src/scenes/scene3.js @@ -60,6 +60,7 @@ let key3; + function collision(s, player, platform){ if (player.geometry.y <= platform.geometry.y) { player.is_on_platform = true; @@ -68,11 +69,12 @@ function collision(s, player, platform){ function preload(s){ ss_player = PP.assets.sprite.load_spritesheet(s, "assets/images/sprite.png", 82.5, 165); - img_background = PP.assets.image.load(s, "assets/images/background3.png"); + img_background = PP.assets.image.load(s, "assets/images/level3bg.png"); kimage = PP.assets.image.load(s, "assets/images/key.png") } function create(s){ - player = PP.assets.sprite.add(s, ss_player, 100, 645, 0.5, 1); + background = PP.assets.image.add(s, img_background, -640, -858, 0, 0); + player = PP.assets.sprite.add(s, ss_player, 100, 644, 0.5, 1); key1 = PP.assets.image.add(s, kimage, 4682, 1350, 0,0) //ok key2 = PP.assets.image.add(s, kimage, 3586, -606, 0,0) key3 = PP.assets.image.add(s, kimage, 400, 200, 0,0) @@ -80,40 +82,40 @@ function create(s){ PP.physics.add(s, player, PP.physics.type.DYNAMIC); // PP.shapes.rectangle_add(s, 100,200 ,100,220, "0x000000", 1) - floor = PP.shapes.rectangle_add(s, 232, 722, 1277, 156, "0x000000", 1); + floor = PP.shapes.rectangle_add(s, 232, 722, 1277, 156, "0x000000", 0); PP.camera.start_follow(s, player,0,250); PP.physics.add(s, floor, PP.physics.type.STATIC); PP.physics.add_collider_f(s, player, floor, collision); - tubo1 = PP.shapes.rectangle_add(s, 410, 489, 143.7152, 309.9965, "0x000000", 1); - tubo2 = PP.shapes.rectangle_add(s, 990, 991, 239, 693, "0x000000", 1); - tubo3 = PP.shapes.rectangle_add(s, 1308, 1032, 395, 85, "0x000000", 1); - tubo4 = PP.shapes.rectangle_add(s, 1018, 1425, 1267, 175, "0x000000", 1); - tubo5 = PP.shapes.rectangle_add(s, 718, 12, 1283, 234, "0x000000", 1); - tubo6 = PP.shapes.rectangle_add(s, 1266, 218, 186, 177, "0x000000", 1); - tubo7 = PP.shapes.rectangle_add(s, 1593, 242, 468, 131, "0x000000", 1); - tubo8 = PP.shapes.rectangle_add(s, 1891, 61, 126, 1123, "0x000000", 1); - tubo9 = PP.shapes.rectangle_add(s, 1455, -402, 744, 195, "0x000000", 1); - tubo10 = PP.shapes.rectangle_add(s, 2076, -13, 243, 60, "0x000000", 1); - tubo11 = PP.shapes.rectangle_add(s, 2545, 292, 877, 131, "0x000000", 1); - tubo12 = PP.shapes.rectangle_add(s, 2586, 872, 1678, 143, "0x000000", 1); - tubo13 = PP.shapes.rectangle_add(s, 2965, 599, 335, 124, "0x000000", 1); - tubo14 = PP.shapes.rectangle_add(s, 3279, -27, 292, 1656, "0x000000", 1); - tubo15 = PP.shapes.rectangle_add(s, 3606, 599, 361, 124, "0x000000", 1); - tubo16 = PP.shapes.rectangle_add(s, 2731, -234, 803, 179, "0x000000", 1); - tubo17 = PP.shapes.rectangle_add(s, 3816, -431, 782, 110, "0x000000", 1); - tubo18 = PP.shapes.rectangle_add(s, 4289, -534, 163, 315, "0x000000", 1); - tubo19 = PP.shapes.rectangle_add(s, 2822, 1255, 1988, 164, "0x000000", 1); - tubo20 = PP.shapes.rectangle_add(s, 3650, 1486, 332, 297, "0x000000", 1); - tubo21 = PP.shapes.rectangle_add(s, 4342, 1574, 1051, 122, "0x000000", 1); - tubo22 = PP.shapes.rectangle_add(s, 4526, 1100, 110, 310, "0x000000", 1); - tubo23 = PP.shapes.rectangle_add(s, 4217, 887, 1209, 114, "0x000000", 1); - tubo24 = PP.shapes.rectangle_add(s, 4941, 691, 238, 505, "0x000000", 1); - tubo25 = PP.shapes.rectangle_add(s, 4547, 307, 1026, 262, "0x000000", 1); - tubo26 = PP.shapes.rectangle_add(s, 5360, -179, 1556, 117, "0x000000", 1); - tubo27 = PP.shapes.rectangle_add(s, 5481, -407, 400, 337, "0x000000", 1); - tubo28 = PP.shapes.rectangle_add(s, 5849, -514, 336, 121, "0x000000", 1); + tubo1 = PP.shapes.rectangle_add(s, 410, 489, 143.7152, 309.9965, "0x000000", 0); + tubo2 = PP.shapes.rectangle_add(s, 990, 991, 239, 693, "0x000000", 0); + tubo3 = PP.shapes.rectangle_add(s, 1308, 1032, 395, 85, "0x000000", 0); + tubo4 = PP.shapes.rectangle_add(s, 1018, 1425, 1267, 175, "0x000000", 0); + tubo5 = PP.shapes.rectangle_add(s, 718, 12, 1283, 234, "0x000000", 0); + tubo6 = PP.shapes.rectangle_add(s, 1266, 218, 186, 177, "0x000000", 0); + tubo7 = PP.shapes.rectangle_add(s, 1593, 242, 468, 131, "0x000000", 0); + tubo8 = PP.shapes.rectangle_add(s, 1891, 61, 126, 1123, "0x000000", 0); + tubo9 = PP.shapes.rectangle_add(s, 1455, -402, 744, 195, "0x000000", 0); + tubo10 = PP.shapes.rectangle_add(s, 2076, -13, 243, 60, "0x000000", 0); + tubo11 = PP.shapes.rectangle_add(s, 2545, 292, 877, 131, "0x000000", 0); + tubo12 = PP.shapes.rectangle_add(s, 2586, 872, 1678, 143, "0x000000", 0); + tubo13 = PP.shapes.rectangle_add(s, 2965, 599, 335, 124, "0x000000", 0); + tubo14 = PP.shapes.rectangle_add(s, 3279, -27, 292, 1656, "0x000000", 0); + tubo15 = PP.shapes.rectangle_add(s, 3606, 599, 361, 124, "0x000000", 0); + tubo16 = PP.shapes.rectangle_add(s, 2731, -234, 803, 179, "0x000000", 0); + tubo17 = PP.shapes.rectangle_add(s, 3816, -431, 782, 110, "0x000000", 0); + tubo18 = PP.shapes.rectangle_add(s, 4289, -534, 163, 315, "0x000000", 0); + tubo19 = PP.shapes.rectangle_add(s, 2822, 1255, 1988, 164, "0x000000", 0); + tubo20 = PP.shapes.rectangle_add(s, 3650, 1486, 332, 297, "0x000000", 0); + tubo21 = PP.shapes.rectangle_add(s, 4342, 1574, 1051, 122, "0x000000", 0); + tubo22 = PP.shapes.rectangle_add(s, 4526, 1100, 110, 310, "0x000000", 0); + tubo23 = PP.shapes.rectangle_add(s, 4217, 887, 1209, 114, "0x000000", 0); + tubo24 = PP.shapes.rectangle_add(s, 4941, 691, 238, 505, "0x000000", 0); + tubo25 = PP.shapes.rectangle_add(s, 4547, 307, 1026, 262, "0x000000", 0); + tubo26 = PP.shapes.rectangle_add(s, 5360, -179, 1556, 117, "0x000000", 0); + tubo27 = PP.shapes.rectangle_add(s, 5481, -407, 400, 337, "0x000000", 0); + tubo28 = PP.shapes.rectangle_add(s, 5849, -514, 336, 121, "0x000000", 0);