Compare commits
19
Commits
52e3db3041
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e47c26ed4 | ||
|
|
fcfffe7825 | ||
|
|
0d9d9f856c | ||
|
|
b41a7ba2c3 | ||
|
|
57a9861b41 | ||
|
|
597c32f9e2 | ||
|
|
154d5888f8 | ||
|
|
c1993a50e9 | ||
|
|
8238fabaa8 | ||
|
|
c36edf7651 | ||
|
|
d096da71a4 | ||
|
|
e1ec72e83e | ||
|
|
c467182087 | ||
|
|
a04f8196f9 | ||
|
|
eff6a69855 | ||
|
|
9c4dfcd657 | ||
|
|
993c69ea0a | ||
|
|
ad98216b2f | ||
|
|
2295db0e42 |
@@ -1,2 +1,5 @@
|
|||||||
# Godot 4+ specific ignores
|
# Godot 4+ specific ignores
|
||||||
.godot/
|
.godot/
|
||||||
|
|
||||||
|
assets/sounds/
|
||||||
|
export/
|
||||||
|
|||||||
Binary file not shown.
@@ -0,0 +1,33 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="font_data_dynamic"
|
||||||
|
type="FontFile"
|
||||||
|
uid="uid://bf6q51e8x2s1h"
|
||||||
|
path="res://.godot/imported/Bangers-Regular.ttf-dc56918042b67b1a4b9d0d682d0434d7.fontdata"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/fonts/Bangers-Regular/Bangers-Regular.ttf"
|
||||||
|
dest_files=["res://.godot/imported/Bangers-Regular.ttf-dc56918042b67b1a4b9d0d682d0434d7.fontdata"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
Rendering=null
|
||||||
|
antialiasing=1
|
||||||
|
generate_mipmaps=false
|
||||||
|
multichannel_signed_distance_field=false
|
||||||
|
msdf_pixel_range=8
|
||||||
|
msdf_size=48
|
||||||
|
allow_system_fallback=true
|
||||||
|
force_autohinter=false
|
||||||
|
hinting=1
|
||||||
|
subpixel_positioning=1
|
||||||
|
oversampling=0.0
|
||||||
|
Fallbacks=null
|
||||||
|
fallbacks=[]
|
||||||
|
Compress=null
|
||||||
|
compress=true
|
||||||
|
preload=[]
|
||||||
|
language_support={}
|
||||||
|
script_support={}
|
||||||
|
opentype_features={}
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
Copyright 2010 The Bangers Project Authors (https://github.com/googlefonts/bangers)
|
||||||
|
|
||||||
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
This license is copied below, and is also available with a FAQ at:
|
||||||
|
https://openfontlicense.org
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply
|
||||||
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components as
|
||||||
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
|
new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components,
|
||||||
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or
|
||||||
|
in the appropriate machine-readable metadata fields within text or
|
||||||
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
|
presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
|
must be distributed entirely under this license, and must not be
|
||||||
|
distributed under any other license. The requirement for fonts to
|
||||||
|
remain under this license does not apply to any document created
|
||||||
|
using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
Copyright 2012 The Press Start 2P Project Authors (cody@zone38.net), with Reserved Font Name "Press Start 2P".
|
||||||
|
|
||||||
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
This license is copied below, and is also available with a FAQ at:
|
||||||
|
https://openfontlicense.org
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply
|
||||||
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components as
|
||||||
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
|
new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components,
|
||||||
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or
|
||||||
|
in the appropriate machine-readable metadata fields within text or
|
||||||
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
|
presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
|
must be distributed entirely under this license, and must not be
|
||||||
|
distributed under any other license. The requirement for fonts to
|
||||||
|
remain under this license does not apply to any document created
|
||||||
|
using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
Binary file not shown.
@@ -0,0 +1,33 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="font_data_dynamic"
|
||||||
|
type="FontFile"
|
||||||
|
uid="uid://bbdbutpfguay"
|
||||||
|
path="res://.godot/imported/PressStart2P-Regular.ttf-42fa3db76e2f5eab95e7c7cadcba1787.fontdata"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/fonts/Press_Start_2P/PressStart2P-Regular.ttf"
|
||||||
|
dest_files=["res://.godot/imported/PressStart2P-Regular.ttf-42fa3db76e2f5eab95e7c7cadcba1787.fontdata"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
Rendering=null
|
||||||
|
antialiasing=1
|
||||||
|
generate_mipmaps=false
|
||||||
|
multichannel_signed_distance_field=false
|
||||||
|
msdf_pixel_range=8
|
||||||
|
msdf_size=48
|
||||||
|
allow_system_fallback=true
|
||||||
|
force_autohinter=false
|
||||||
|
hinting=1
|
||||||
|
subpixel_positioning=1
|
||||||
|
oversampling=0.0
|
||||||
|
Fallbacks=null
|
||||||
|
fallbacks=[]
|
||||||
|
Compress=null
|
||||||
|
compress=true
|
||||||
|
preload=[]
|
||||||
|
language_support={}
|
||||||
|
script_support={}
|
||||||
|
opentype_features={}
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
Copyright (c) 2013, 2014, Hubert and Fischer, Philipp Hubert (philipp@hubertfischer.com), Sebastian Fischer (sebastian@hubertfischer.com)
|
||||||
|
|
||||||
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
This license is copied below, and is also available with a FAQ at:
|
||||||
|
https://openfontlicense.org
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply
|
||||||
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components as
|
||||||
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
|
new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components,
|
||||||
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or
|
||||||
|
in the appropriate machine-readable metadata fields within text or
|
||||||
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
|
presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
|
must be distributed entirely under this license, and must not be
|
||||||
|
distributed under any other license. The requirement for fonts to
|
||||||
|
remain under this license does not apply to any document created
|
||||||
|
using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
Binary file not shown.
@@ -0,0 +1,33 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="font_data_dynamic"
|
||||||
|
type="FontFile"
|
||||||
|
uid="uid://dv01hh045k5n2"
|
||||||
|
path="res://.godot/imported/RubikMonoOne-Regular.ttf-e0dfb02f9f37dfb799d755a9158977e9.fontdata"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/fonts/Rubik_Mono_One/RubikMonoOne-Regular.ttf"
|
||||||
|
dest_files=["res://.godot/imported/RubikMonoOne-Regular.ttf-e0dfb02f9f37dfb799d755a9158977e9.fontdata"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
Rendering=null
|
||||||
|
antialiasing=1
|
||||||
|
generate_mipmaps=false
|
||||||
|
multichannel_signed_distance_field=false
|
||||||
|
msdf_pixel_range=8
|
||||||
|
msdf_size=48
|
||||||
|
allow_system_fallback=true
|
||||||
|
force_autohinter=false
|
||||||
|
hinting=1
|
||||||
|
subpixel_positioning=1
|
||||||
|
oversampling=0.0
|
||||||
|
Fallbacks=null
|
||||||
|
fallbacks=[]
|
||||||
|
Compress=null
|
||||||
|
compress=true
|
||||||
|
preload=[]
|
||||||
|
language_support={}
|
||||||
|
script_support={}
|
||||||
|
opentype_features={}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
Copyright (c) 2011, Rodrigo Fuenzalida (www.rfuenzalida.com|hello@rfuenzalida.com),
|
||||||
|
with Reserved Font Name Titan.
|
||||||
|
|
||||||
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
This license is copied below, and is also available with a FAQ at:
|
||||||
|
https://openfontlicense.org
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply
|
||||||
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components as
|
||||||
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
|
new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components,
|
||||||
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or
|
||||||
|
in the appropriate machine-readable metadata fields within text or
|
||||||
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
|
presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
|
must be distributed entirely under this license, and must not be
|
||||||
|
distributed under any other license. The requirement for fonts to
|
||||||
|
remain under this license does not apply to any document created
|
||||||
|
using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
Binary file not shown.
@@ -0,0 +1,33 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="font_data_dynamic"
|
||||||
|
type="FontFile"
|
||||||
|
uid="uid://b1i0ggr6sfj24"
|
||||||
|
path="res://.godot/imported/TitanOne-Regular.ttf-e3a43712c5e0e812a9b5f7ef2ed3026e.fontdata"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/fonts/Titan_One/TitanOne-Regular.ttf"
|
||||||
|
dest_files=["res://.godot/imported/TitanOne-Regular.ttf-e3a43712c5e0e812a9b5f7ef2ed3026e.fontdata"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
Rendering=null
|
||||||
|
antialiasing=1
|
||||||
|
generate_mipmaps=false
|
||||||
|
multichannel_signed_distance_field=false
|
||||||
|
msdf_pixel_range=8
|
||||||
|
msdf_size=48
|
||||||
|
allow_system_fallback=true
|
||||||
|
force_autohinter=false
|
||||||
|
hinting=1
|
||||||
|
subpixel_positioning=1
|
||||||
|
oversampling=0.0
|
||||||
|
Fallbacks=null
|
||||||
|
fallbacks=[]
|
||||||
|
Compress=null
|
||||||
|
compress=true
|
||||||
|
preload=[]
|
||||||
|
language_support={}
|
||||||
|
script_support={}
|
||||||
|
opentype_features={}
|
||||||
Binary file not shown.
@@ -0,0 +1,19 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="mp3"
|
||||||
|
type="AudioStreamMP3"
|
||||||
|
uid="uid://5da1smwywxdk"
|
||||||
|
path="res://.godot/imported/Run-Amok(chosic.com).mp3-4acd487c1e868789780d861bef0741e2.mp3str"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/music/Run-Amok(chosic.com).mp3"
|
||||||
|
dest_files=["res://.godot/imported/Run-Amok(chosic.com).mp3-4acd487c1e868789780d861bef0741e2.mp3str"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
loop=false
|
||||||
|
loop_offset=0
|
||||||
|
bpm=0
|
||||||
|
beat_count=0
|
||||||
|
bar_beats=4
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
Run-Amok(chosic.com).mp3
|
||||||
|
- license: CC BY 3.0
|
||||||
|
- source: https://www.chosic.com/download-audio/39324/
|
||||||
|
- artist: Run Amok by Kevin MacLeod | https://incompetech.com/
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
punch-1-166694.mp3
|
||||||
|
- license:
|
||||||
|
- source: https://pixabay.com/sound-effects/punch-1-166694/
|
||||||
|
- author: floraphonic (https://pixabay.com/users/floraphonic-38928062/)
|
||||||
|
|
||||||
|
whoosh-6316.mp3
|
||||||
|
- license:
|
||||||
|
- source: https://pixabay.com/sound-effects/whoosh-6316/
|
||||||
|
- author: Pixabay (https://pixabay.com/users/pixabay-1/)
|
||||||
Binary file not shown.
@@ -0,0 +1,19 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="mp3"
|
||||||
|
type="AudioStreamMP3"
|
||||||
|
uid="uid://bhbhh78j5rkfe"
|
||||||
|
path="res://.godot/imported/whoosh-6316.mp3-c09ddc29973a4f106e83f9f9f20b7c35.mp3str"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sounds/pixabay/dash/whoosh-6316.mp3"
|
||||||
|
dest_files=["res://.godot/imported/whoosh-6316.mp3-c09ddc29973a4f106e83f9f9f20b7c35.mp3str"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
loop=false
|
||||||
|
loop_offset=0
|
||||||
|
bpm=0
|
||||||
|
beat_count=0
|
||||||
|
bar_beats=4
|
||||||
Binary file not shown.
@@ -0,0 +1,19 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="mp3"
|
||||||
|
type="AudioStreamMP3"
|
||||||
|
uid="uid://qeg12ynvjvy0"
|
||||||
|
path="res://.godot/imported/081895_impact_wav-43951.mp3-b97c4fdee4abc0cae63af4d92e0a6e8a.mp3str"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3"
|
||||||
|
dest_files=["res://.godot/imported/081895_impact_wav-43951.mp3-b97c4fdee4abc0cae63af4d92e0a6e8a.mp3str"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
loop=false
|
||||||
|
loop_offset=0
|
||||||
|
bpm=0
|
||||||
|
beat_count=0
|
||||||
|
bar_beats=4
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
081895_impact_wav-43951.mp3
|
||||||
|
license:
|
||||||
|
source: https://pixabay.com/sound-effects/081895-impact-wav-43951/
|
||||||
|
author: Pixabay (https://pixabay.com/users/pixabay-1/)
|
||||||
Binary file not shown.
@@ -0,0 +1,19 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="mp3"
|
||||||
|
type="AudioStreamMP3"
|
||||||
|
uid="uid://b33xjins3dqpp"
|
||||||
|
path="res://.godot/imported/game-teleport-90735.mp3-112905f9f7cb1de6d452cc344a4b2de8.mp3str"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/sounds/pixabay/sfx/game-teleport-90735.mp3"
|
||||||
|
dest_files=["res://.godot/imported/game-teleport-90735.mp3-112905f9f7cb1de6d452cc344a4b2de8.mp3str"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
loop=false
|
||||||
|
loop_offset=0
|
||||||
|
bpm=0
|
||||||
|
beat_count=0
|
||||||
|
bar_beats=4
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
class_name BombEmitter extends Node3D
|
||||||
|
|
||||||
|
@onready var collision_area : Area3D = $'Area3D'
|
||||||
|
|
||||||
|
const EXPLOSION_PUSH_SPEED: float = 8
|
||||||
|
|
||||||
|
var owning_player: Player = null
|
||||||
|
var processed = false
|
||||||
|
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
func _ready():
|
||||||
|
collision_area.connect("body_entered", on_body_enter)
|
||||||
|
|
||||||
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
func _physics_process(_delta):
|
||||||
|
if processed:
|
||||||
|
queue_free()
|
||||||
|
|
||||||
|
processed = true
|
||||||
|
|
||||||
|
func on_body_enter(body: Node3D):
|
||||||
|
var player : Player = body as Player
|
||||||
|
|
||||||
|
if player and player != owning_player:
|
||||||
|
var vector_to_player: Vector3 = player.global_position - global_position
|
||||||
|
var length: float = vector_to_player.length()
|
||||||
|
if length > 0.01:
|
||||||
|
print ("Bomb pushes player " + str(player))
|
||||||
|
var direction : Vector3 = vector_to_player / length
|
||||||
|
player.explosion_influence = 1
|
||||||
|
player.explosion_velocity = direction * EXPLOSION_PUSH_SPEED
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://ck1gd38drird6"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://entities/BombEmitter.gd" id="1_nvjs2"]
|
||||||
|
|
||||||
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_yy20u"]
|
||||||
|
height = 0.5
|
||||||
|
radius = 5.0
|
||||||
|
|
||||||
|
[node name="BombEmitter" type="Node3D"]
|
||||||
|
script = ExtResource("1_nvjs2")
|
||||||
|
|
||||||
|
[node name="Area3D" type="Area3D" parent="."]
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"]
|
||||||
|
shape = SubResource("CylinderShape3D_yy20u")
|
||||||
+122
-15
@@ -1,4 +1,4 @@
|
|||||||
extends CharacterBody3D
|
class_name Player extends CharacterBody3D
|
||||||
|
|
||||||
@export var color : Color = Color.DODGER_BLUE
|
@export var color : Color = Color.DODGER_BLUE
|
||||||
|
|
||||||
@@ -7,35 +7,100 @@ extends CharacterBody3D
|
|||||||
@export var move_down_action := "move_down"
|
@export var move_down_action := "move_down"
|
||||||
@export var move_up_action := "move_up"
|
@export var move_up_action := "move_up"
|
||||||
@export var dash_action := "dash"
|
@export var dash_action := "dash"
|
||||||
@export var bomb_action := "bomp"
|
@export var bomb_action := "bomb"
|
||||||
|
|
||||||
@onready var geometry = $Geometry
|
@export var coloring_sprite_path : NodePath
|
||||||
|
@export var coloring_bomb_sprite_path : NodePath
|
||||||
|
|
||||||
signal bomb_triggered
|
@onready var geometry: MeshInstance3D = $Geometry
|
||||||
|
@onready var collision: CollisionShape3D = $CollisionShape3D
|
||||||
|
@onready var dash_stream_player: AudioStreamPlayer = $DashAudioStreamPlayer
|
||||||
|
@onready var explosion_stream_player: AudioStreamPlayer = $ExplosionAudioStreamPlayer
|
||||||
|
@onready var spawn_stream_player: AudioStreamPlayer = $SpawnAudioStreamPlayer
|
||||||
|
|
||||||
|
var bomb_emitter_scene = preload("res://entities/BombEmitter.tscn")
|
||||||
|
|
||||||
|
enum PlayerState {
|
||||||
|
Alive = 0,
|
||||||
|
Falling,
|
||||||
|
Dead
|
||||||
|
}
|
||||||
|
|
||||||
|
var score : int = 0
|
||||||
|
var energy : float = 100.0
|
||||||
|
var state : PlayerState = PlayerState.Alive
|
||||||
|
var state_last : PlayerState = PlayerState.Dead
|
||||||
|
|
||||||
|
var radius = 0.15
|
||||||
var angle = 0
|
var angle = 0
|
||||||
var is_dashing = false
|
var is_dashing = false
|
||||||
|
var explosion_velocity: Vector3 = Vector3.ZERO
|
||||||
|
var explosion_influence: float = 0
|
||||||
var dash_time = 0
|
var dash_time = 0
|
||||||
|
var bomb_time = 0
|
||||||
|
var coloring_sprite : Sprite2D
|
||||||
|
var coloring_bomb_sprite : Sprite2D
|
||||||
|
|
||||||
const SPEED = 5.0
|
const SPEED = 5.0
|
||||||
const JUMP_VELOCITY = 4.5
|
|
||||||
const DASH_SPEED: float = 20
|
const DASH_SPEED: float = 20
|
||||||
const DASH_DURATION: float = 0.2
|
const DASH_DURATION: float = 0.2
|
||||||
|
const DASH_ENERGY: float = 40
|
||||||
|
const BOMB_DURATION: float = 0.1
|
||||||
|
const BOMB_ENERGY: float = 60
|
||||||
|
const ENERGY_REPLENISH_RATE: float = 0.5;
|
||||||
|
const EXPLOSION_INFLUENCE_REDUCTION_RATE: float = 10.0;
|
||||||
|
|
||||||
# Get the gravity from the project settings to be synced with RigidBody nodes.
|
# Get the gravity from the project settings to be synced with RigidBody nodes.
|
||||||
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
|
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
coloring_sprite = get_node(coloring_sprite_path)
|
||||||
|
coloring_bomb_sprite = get_node(coloring_bomb_sprite_path)
|
||||||
|
coloring_sprite.modulate = color
|
||||||
|
coloring_sprite.visible = true
|
||||||
|
coloring_bomb_sprite.modulate = color
|
||||||
|
coloring_bomb_sprite.visible = false
|
||||||
|
|
||||||
func _physics_process(delta):
|
func _physics_process(delta):
|
||||||
# Add the gravity.
|
if energy < 100:
|
||||||
if not is_on_floor():
|
energy = min (100, energy + delta + ENERGY_REPLENISH_RATE)
|
||||||
|
|
||||||
|
if state_last != state:
|
||||||
|
if state == PlayerState.Alive:
|
||||||
|
on_player_spawn()
|
||||||
|
elif state == PlayerState.Falling:
|
||||||
|
on_player_falling()
|
||||||
|
elif state == PlayerState.Dead:
|
||||||
|
on_player_dead()
|
||||||
|
|
||||||
|
state_last = state
|
||||||
|
|
||||||
|
if global_position.y < -5:
|
||||||
|
state = PlayerState.Dead
|
||||||
|
elif not is_on_floor():
|
||||||
|
if not is_dashing:
|
||||||
velocity.y -= gravity * delta
|
velocity.y -= gravity * delta
|
||||||
|
state = PlayerState.Falling
|
||||||
|
elif state != PlayerState.Dead:
|
||||||
|
state = PlayerState.Alive
|
||||||
|
elif state == PlayerState.Dead:
|
||||||
|
visible = false
|
||||||
|
return
|
||||||
|
elif state == PlayerState.Alive:
|
||||||
|
visible = true
|
||||||
|
|
||||||
# Handle jump.
|
coloring_sprite.visible = state == PlayerState.Alive
|
||||||
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
|
|
||||||
velocity.y = JUMP_VELOCITY
|
|
||||||
|
|
||||||
if Input.is_action_just_pressed(bomb_action):
|
if bomb_time > 0:
|
||||||
emit_signal("bomb_triggered", self)
|
bomb_time -= delta
|
||||||
|
if bomb_time <= 0:
|
||||||
|
coloring_bomb_sprite.visible = false
|
||||||
|
bomb_time = 0
|
||||||
|
else:
|
||||||
|
if Input.is_action_just_pressed(bomb_action) \
|
||||||
|
and state == PlayerState.Alive \
|
||||||
|
and energy > BOMB_ENERGY:
|
||||||
|
on_drop_bomb()
|
||||||
|
|
||||||
# Get the input direction and handle the movement/deceleration.
|
# Get the input direction and handle the movement/deceleration.
|
||||||
# As good practice, you should replace UI actions with custom gameplay actions.
|
# As good practice, you should replace UI actions with custom gameplay actions.
|
||||||
@@ -51,9 +116,10 @@ func _physics_process(delta):
|
|||||||
velocity.z = move_toward(velocity.z, 0, SPEED)
|
velocity.z = move_toward(velocity.z, 0, SPEED)
|
||||||
geometry.global_basis = Basis.from_euler(Vector3(0, -angle, 0))
|
geometry.global_basis = Basis.from_euler(Vector3(0, -angle, 0))
|
||||||
|
|
||||||
if Input.is_action_just_pressed("dash_p1"):
|
if Input.is_action_just_pressed(dash_action) \
|
||||||
is_dashing = true;
|
and state == PlayerState.Alive \
|
||||||
dash_time = DASH_DURATION
|
and energy > DASH_ENERGY:
|
||||||
|
on_dash()
|
||||||
|
|
||||||
if is_dashing:
|
if is_dashing:
|
||||||
velocity.x = sin(angle) * DASH_SPEED
|
velocity.x = sin(angle) * DASH_SPEED
|
||||||
@@ -65,4 +131,45 @@ func _physics_process(delta):
|
|||||||
if dash_time <= 0:
|
if dash_time <= 0:
|
||||||
is_dashing = false
|
is_dashing = false
|
||||||
|
|
||||||
|
if explosion_influence > 0:
|
||||||
|
velocity += explosion_velocity
|
||||||
|
explosion_influence = max (0, explosion_influence - EXPLOSION_INFLUENCE_REDUCTION_RATE * delta)
|
||||||
|
|
||||||
move_and_slide()
|
move_and_slide()
|
||||||
|
|
||||||
|
coloring_sprite.global_position = calc_coloring_position()
|
||||||
|
coloring_bomb_sprite.global_position = coloring_sprite.global_position
|
||||||
|
|
||||||
|
func calc_coloring_position():
|
||||||
|
var result = Vector2 (global_position.x * 10 + 512, global_position.z * 10 + 512)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
func on_player_spawn():
|
||||||
|
print ("Player " + str(name) + ": spawning")
|
||||||
|
spawn_stream_player.pitch_scale = 0.8 + randf () * 0.4
|
||||||
|
spawn_stream_player.play()
|
||||||
|
|
||||||
|
func on_player_falling():
|
||||||
|
print ("Player " + str(name) + ": falling")
|
||||||
|
|
||||||
|
func on_player_dead():
|
||||||
|
print ("Player " + str(name) + ": death")
|
||||||
|
|
||||||
|
func on_dash():
|
||||||
|
is_dashing = true;
|
||||||
|
dash_time = DASH_DURATION
|
||||||
|
energy = max (0, energy - DASH_ENERGY)
|
||||||
|
dash_stream_player.pitch_scale = 0.9 + randf () * 0.2
|
||||||
|
dash_stream_player.play()
|
||||||
|
|
||||||
|
func on_drop_bomb():
|
||||||
|
coloring_bomb_sprite.visible = true;
|
||||||
|
bomb_time = BOMB_DURATION
|
||||||
|
energy = max (0, energy - BOMB_ENERGY)
|
||||||
|
|
||||||
|
explosion_stream_player.pitch_scale = 0.6 + randf () * 0.2
|
||||||
|
explosion_stream_player.play()
|
||||||
|
|
||||||
|
var bomb_emitter : BombEmitter = bomb_emitter_scene.instantiate()
|
||||||
|
get_parent_node_3d().add_child(bomb_emitter)
|
||||||
|
bomb_emitter.global_position = global_position
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
[gd_scene load_steps=8 format=3 uid="uid://bfyjtfdko3l7o"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://entities/Player.gd" id="1_w5gy0"]
|
||||||
|
[ext_resource type="Material" uid="uid://bxbikke5t70ff" path="res://materials/PlayerMaterial.tres" id="2_jg6ir"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://bhbhh78j5rkfe" path="res://assets/sounds/pixabay/dash/whoosh-6316.mp3" id="2_ykhbt"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://qeg12ynvjvy0" path="res://assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3" id="3_mjsr0"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://b33xjins3dqpp" path="res://assets/sounds/pixabay/sfx/game-teleport-90735.mp3" id="4_y7abk"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="BoxMesh_yle83"]
|
||||||
|
size = Vector3(0.24, 0.75, 0.24)
|
||||||
|
|
||||||
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_rwgp3"]
|
||||||
|
height = 0.75
|
||||||
|
radius = 0.15
|
||||||
|
|
||||||
|
[node name="Player1" type="CharacterBody3D"]
|
||||||
|
collision_layer = 5
|
||||||
|
collision_mask = 7
|
||||||
|
velocity = Vector3(0, -378.927, 0)
|
||||||
|
script = ExtResource("1_w5gy0")
|
||||||
|
|
||||||
|
[node name="Geometry" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.472656, 0)
|
||||||
|
mesh = SubResource("BoxMesh_yle83")
|
||||||
|
surface_material_override/0 = ExtResource("2_jg6ir")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.496337, 0)
|
||||||
|
shape = SubResource("CylinderShape3D_rwgp3")
|
||||||
|
|
||||||
|
[node name="DashAudioStreamPlayer" type="AudioStreamPlayer" parent="."]
|
||||||
|
stream = ExtResource("2_ykhbt")
|
||||||
|
|
||||||
|
[node name="ExplosionAudioStreamPlayer" type="AudioStreamPlayer" parent="."]
|
||||||
|
stream = ExtResource("3_mjsr0")
|
||||||
|
volume_db = -15.707
|
||||||
|
pitch_scale = 0.84
|
||||||
|
|
||||||
|
[node name="SpawnAudioStreamPlayer" type="AudioStreamPlayer" parent="."]
|
||||||
|
stream = ExtResource("4_y7abk")
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
class_name SpawnPoint extends Node3D
|
||||||
|
|
||||||
|
@export var player_index : int = 0
|
||||||
|
@export var fixed_player : bool = false
|
||||||
|
|
||||||
|
var near_players: Array = []
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
var area3d = $'Area3D'
|
||||||
|
|
||||||
|
area3d.connect("body_entered", on_player_enter)
|
||||||
|
area3d.connect("body_exited", on_player_exited)
|
||||||
|
|
||||||
|
func _process(_delta):
|
||||||
|
for player: Player in near_players:
|
||||||
|
if player.state == Player.PlayerState.Dead:
|
||||||
|
near_players.erase(player)
|
||||||
|
|
||||||
|
func on_player_enter(node: Node3D):
|
||||||
|
var player: Player = node as Player
|
||||||
|
if node == null:
|
||||||
|
return
|
||||||
|
|
||||||
|
if near_players.find(player) == -1:
|
||||||
|
near_players.append(player)
|
||||||
|
|
||||||
|
func on_player_exited(node: Node3D):
|
||||||
|
var player: Player = node as Player
|
||||||
|
if node == null:
|
||||||
|
return
|
||||||
|
|
||||||
|
near_players.erase(player)
|
||||||
|
|
||||||
|
func is_occupied():
|
||||||
|
return near_players.size() > 0
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
[gd_scene load_steps=4 format=3 uid="uid://cc521i07ajufm"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://entities/SpawnPoint.gd" id="1_l0ld5"]
|
||||||
|
|
||||||
|
[sub_resource type="CylinderMesh" id="CylinderMesh_8id3y"]
|
||||||
|
top_radius = 0.3
|
||||||
|
height = 0.1
|
||||||
|
radial_segments = 5
|
||||||
|
|
||||||
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_1ha80"]
|
||||||
|
height = 1.0
|
||||||
|
radius = 1.0
|
||||||
|
|
||||||
|
[node name="SpawnPoint" type="Node3D"]
|
||||||
|
script = ExtResource("1_l0ld5")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0239549, 0)
|
||||||
|
mesh = SubResource("CylinderMesh_8id3y")
|
||||||
|
|
||||||
|
[node name="Area3D" type="Area3D" parent="."]
|
||||||
|
collision_layer = 0
|
||||||
|
collision_mask = 4
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("CylinderShape3D_1ha80")
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
[preset.0]
|
||||||
|
|
||||||
|
name="Linux/X11"
|
||||||
|
platform="Linux/X11"
|
||||||
|
runnable=true
|
||||||
|
dedicated_server=false
|
||||||
|
custom_features=""
|
||||||
|
export_filter="all_resources"
|
||||||
|
include_filter=""
|
||||||
|
exclude_filter=""
|
||||||
|
export_path="export/DashBoomColorClash/DashBoomColorClash.x86_64"
|
||||||
|
encryption_include_filters=""
|
||||||
|
encryption_exclude_filters=""
|
||||||
|
encrypt_pck=false
|
||||||
|
encrypt_directory=false
|
||||||
|
|
||||||
|
[preset.0.options]
|
||||||
|
|
||||||
|
custom_template/debug=""
|
||||||
|
custom_template/release=""
|
||||||
|
debug/export_console_wrapper=1
|
||||||
|
binary_format/embed_pck=false
|
||||||
|
texture_format/bptc=true
|
||||||
|
texture_format/s3tc=true
|
||||||
|
texture_format/etc=false
|
||||||
|
texture_format/etc2=false
|
||||||
|
binary_format/architecture="x86_64"
|
||||||
|
ssh_remote_deploy/enabled=false
|
||||||
|
ssh_remote_deploy/host="user@host_ip"
|
||||||
|
ssh_remote_deploy/port="22"
|
||||||
|
ssh_remote_deploy/extra_args_ssh=""
|
||||||
|
ssh_remote_deploy/extra_args_scp=""
|
||||||
|
ssh_remote_deploy/run_script="#!/usr/bin/env bash
|
||||||
|
export DISPLAY=:0
|
||||||
|
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
|
||||||
|
\"{temp_dir}/{exe_name}\" {cmd_args}"
|
||||||
|
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
|
||||||
|
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
|
||||||
|
rm -rf \"{temp_dir}\""
|
||||||
|
dotnet/include_scripts_content=false
|
||||||
|
dotnet/include_debug_symbols=true
|
||||||
|
dotnet/embed_build_outputs=false
|
||||||
|
|
||||||
|
[preset.1]
|
||||||
|
|
||||||
|
name="Windows Desktop"
|
||||||
|
platform="Windows Desktop"
|
||||||
|
runnable=true
|
||||||
|
dedicated_server=false
|
||||||
|
custom_features=""
|
||||||
|
export_filter="all_resources"
|
||||||
|
include_filter=""
|
||||||
|
exclude_filter=""
|
||||||
|
export_path="export/DashBoomColorClash/DashBoomColorClash.exe"
|
||||||
|
encryption_include_filters=""
|
||||||
|
encryption_exclude_filters=""
|
||||||
|
encrypt_pck=false
|
||||||
|
encrypt_directory=false
|
||||||
|
|
||||||
|
[preset.1.options]
|
||||||
|
|
||||||
|
custom_template/debug=""
|
||||||
|
custom_template/release=""
|
||||||
|
debug/export_console_wrapper=1
|
||||||
|
binary_format/embed_pck=false
|
||||||
|
texture_format/bptc=true
|
||||||
|
texture_format/s3tc=true
|
||||||
|
texture_format/etc=false
|
||||||
|
texture_format/etc2=false
|
||||||
|
binary_format/architecture="x86_64"
|
||||||
|
codesign/enable=false
|
||||||
|
codesign/timestamp=true
|
||||||
|
codesign/timestamp_server_url=""
|
||||||
|
codesign/digest_algorithm=1
|
||||||
|
codesign/description=""
|
||||||
|
codesign/custom_options=PackedStringArray()
|
||||||
|
application/modify_resources=true
|
||||||
|
application/icon="res://ui/Icon.png"
|
||||||
|
application/console_wrapper_icon=""
|
||||||
|
application/icon_interpolation=4
|
||||||
|
application/file_version=""
|
||||||
|
application/product_version=""
|
||||||
|
application/company_name=""
|
||||||
|
application/product_name=""
|
||||||
|
application/file_description=""
|
||||||
|
application/copyright=""
|
||||||
|
application/trademarks=""
|
||||||
|
application/export_angle=0
|
||||||
|
ssh_remote_deploy/enabled=false
|
||||||
|
ssh_remote_deploy/host="user@host_ip"
|
||||||
|
ssh_remote_deploy/port="22"
|
||||||
|
ssh_remote_deploy/extra_args_ssh=""
|
||||||
|
ssh_remote_deploy/extra_args_scp=""
|
||||||
|
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
|
||||||
|
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
|
||||||
|
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
|
||||||
|
$settings = New-ScheduledTaskSettingsSet
|
||||||
|
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
|
||||||
|
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
|
||||||
|
Start-ScheduledTask -TaskName godot_remote_debug
|
||||||
|
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
|
||||||
|
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
|
||||||
|
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
|
||||||
|
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
|
||||||
|
Remove-Item -Recurse -Force '{temp_dir}'"
|
||||||
|
dotnet/include_scripts_content=false
|
||||||
|
dotnet/include_debug_symbols=true
|
||||||
|
dotnet/embed_build_outputs=false
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 134 KiB |
@@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dam8r48qo0qqh"
|
||||||
|
path="res://.godot/imported/BasicLevel.png-b10569d186ecf038de4843414924eabd.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://levels/BasicLevel.png"
|
||||||
|
dest_files=["res://.godot/imported/BasicLevel.png-b10569d186ecf038de4843414924eabd.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://dobm413reyqom"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://7a2ma10hq0qa" path="res://scenes/PlatformA.tscn" id="1_ljufl"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bnmtyc1kkt6ku" path="res://scenes/PlatformB.tscn" id="2_alvfs"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cc521i07ajufm" path="res://entities/SpawnPoint.tscn" id="3_5ocaq"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://0fxjod84sli" path="res://scenes/PlatformParts/heptagon_platform_medium.tscn" id="4_w36x1"]
|
||||||
|
|
||||||
|
[node name="LotsaHoles" type="Node3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.76534, 0, 5.93242)
|
||||||
|
|
||||||
|
[node name="Platforms" parent="." instance=ExtResource("1_ljufl")]
|
||||||
|
transform = Transform3D(0.856951, 0, 0.515397, 0, 1, 0, -0.515397, 0, 0.856951, -0.673425, 0, 1.59883)
|
||||||
|
|
||||||
|
[node name="SpawnPoint" parent="." instance=ExtResource("3_5ocaq")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.60433, 0, 0.463968)
|
||||||
|
|
||||||
|
[node name="Platforms2" parent="." instance=ExtResource("2_alvfs")]
|
||||||
|
transform = Transform3D(0.923739, 0, -0.383022, 0, 1, 0, 0.383022, 0, 0.923739, -10.2072, 0, -10.4223)
|
||||||
|
|
||||||
|
[node name="Platforms3" parent="." instance=ExtResource("1_ljufl")]
|
||||||
|
transform = Transform3D(0.817256, 0, 0.576275, 0, 1, 0, -0.576275, 0, 0.817256, 8.80868, 0, -7.00391)
|
||||||
|
|
||||||
|
[node name="SpawnPoint2" parent="." instance=ExtResource("3_5ocaq")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.45146, 0, -7.63975)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform" parent="." instance=ExtResource("4_w36x1")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.819961, 0, -5.89795)
|
||||||
|
|
||||||
|
[node name="SpawnPoint3" parent="." instance=ExtResource("3_5ocaq")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.2548, 0, -10.074)
|
||||||
|
|
||||||
|
[node name="Platforms4" parent="." instance=ExtResource("1_ljufl")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.98194, 0, -2.85678)
|
||||||
|
|
||||||
|
[node name="Platforms5" parent="." instance=ExtResource("1_ljufl")]
|
||||||
|
transform = Transform3D(0.9418, 0, -0.336175, 0, 1, 0, 0.336175, 0, 0.9418, 1.55973, 9.53674e-07, -13.245)
|
||||||
|
|
||||||
|
[node name="Platforms6" parent="." instance=ExtResource("2_alvfs")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.319829, 0, 0.317585)
|
||||||
|
|
||||||
|
[node name="Platforms7" parent="." instance=ExtResource("2_alvfs")]
|
||||||
|
transform = Transform3D(0.441584, 0, 0.89722, 0, 1, 0, -0.89722, 0, 0.441584, -14.4344, 9.53674e-07, -1.29715)
|
||||||
|
|
||||||
|
[node name="SpawnPoint4" parent="." instance=ExtResource("3_5ocaq")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15.1344, 0, 0.296233)
|
||||||
|
|
||||||
|
[node name="Platforms8" parent="." instance=ExtResource("1_ljufl")]
|
||||||
|
transform = Transform3D(-0.247405, 0, 0.968912, 0, 1, 0, -0.968912, 0, -0.247405, -1.1221, 0, -6.80485)
|
||||||
|
|
||||||
|
[node name="Platforms9" parent="." instance=ExtResource("1_ljufl")]
|
||||||
|
transform = Transform3D(-0.878392, 0, -0.477941, 0, 1, 0, 0.477941, 0, -0.878392, -10.3357, 0, 3.40673)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform2" parent="." instance=ExtResource("4_w36x1")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.23604, 0, 1.73223)
|
||||||
|
|
||||||
|
[node name="SpawnPoint5" parent="." instance=ExtResource("3_5ocaq")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.89178, 0, -13.1054)
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 114 KiB |
@@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b3bftdoqgqopj"
|
||||||
|
path="res://.godot/imported/LotsaHoles.png-9e2501e458428cba511d8c99fb395361.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://levels/LotsaHoles.png"
|
||||||
|
dest_files=["res://.godot/imported/LotsaHoles.png-9e2501e458428cba511d8c99fb395361.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://8v8wcdht4g1n"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://7a2ma10hq0qa" path="res://scenes/PlatformA.tscn" id="1_3vod7"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bnmtyc1kkt6ku" path="res://scenes/PlatformB.tscn" id="2_1sjbn"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cc521i07ajufm" path="res://entities/SpawnPoint.tscn" id="3_5fxgl"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://0fxjod84sli" path="res://scenes/PlatformParts/heptagon_platform_medium.tscn" id="4_tix3f"]
|
||||||
|
|
||||||
|
[node name="LotsaHoles" type="Node3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.76534, 0, 5.93242)
|
||||||
|
|
||||||
|
[node name="Platforms" parent="." instance=ExtResource("1_3vod7")]
|
||||||
|
transform = Transform3D(0.856951, 0, 0.515397, 0, 1, 0, -0.515397, 0, 0.856951, -0.673425, 0, 1.59883)
|
||||||
|
|
||||||
|
[node name="SpawnPoint" parent="." instance=ExtResource("3_5fxgl")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.60433, 0, 0.463968)
|
||||||
|
|
||||||
|
[node name="Platforms2" parent="." instance=ExtResource("2_1sjbn")]
|
||||||
|
transform = Transform3D(0.923739, 0, -0.383022, 0, 1, 0, 0.383022, 0, 0.923739, -10.2072, 0, -10.4223)
|
||||||
|
|
||||||
|
[node name="Platforms3" parent="." instance=ExtResource("1_3vod7")]
|
||||||
|
transform = Transform3D(0.817256, 0, 0.576275, 0, 1, 0, -0.576275, 0, 0.817256, 8.80868, 0, -7.00391)
|
||||||
|
|
||||||
|
[node name="SpawnPoint2" parent="." instance=ExtResource("3_5fxgl")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.45146, 0, -7.63975)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform" parent="." instance=ExtResource("4_tix3f")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.819961, 0, -5.89795)
|
||||||
|
|
||||||
|
[node name="SpawnPoint3" parent="." instance=ExtResource("3_5fxgl")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9.31, 0, -10.3338)
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 98 KiB |
@@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b5ah0ej10awd5"
|
||||||
|
path="res://.godot/imported/Platforms.png-6509e9f078e654ad679ba5a9350838f2.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://levels/Platforms.png"
|
||||||
|
dest_files=["res://.godot/imported/Platforms.png-6509e9f078e654ad679ba5a9350838f2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
[gd_scene load_steps=6 format=3 uid="uid://87rik2jwk38y"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://7a2ma10hq0qa" path="res://scenes/PlatformA.tscn" id="1_t5xh4"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bnmtyc1kkt6ku" path="res://scenes/PlatformB.tscn" id="2_20hf0"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cc521i07ajufm" path="res://entities/SpawnPoint.tscn" id="3_63ckc"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://0fxjod84sli" path="res://scenes/PlatformParts/heptagon_platform_medium.tscn" id="4_yewb1"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://deod1xpjlgljl" path="res://scenes/PlatformParts/heptagon_platform_small.tscn" id="5_deyyw"]
|
||||||
|
|
||||||
|
[node name="Platforms" type="Node3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.76534, 0, 5.93242)
|
||||||
|
|
||||||
|
[node name="Platforms" parent="." instance=ExtResource("1_t5xh4")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.14317, 0, -7.62714)
|
||||||
|
|
||||||
|
[node name="Platforms2" parent="." instance=ExtResource("1_t5xh4")]
|
||||||
|
transform = Transform3D(0.960162, 0, 0.279444, 0, 1, 0, -0.279444, 0, 0.960162, 8.23778, 0, -2.69178)
|
||||||
|
|
||||||
|
[node name="Platforms3" parent="." instance=ExtResource("2_20hf0")]
|
||||||
|
transform = Transform3D(0.998982, 0, -0.0451189, 0, 1, 0, 0.0451189, 0, 0.998982, 7.95994, 0, -17.2561)
|
||||||
|
|
||||||
|
[node name="Platforms4" parent="." instance=ExtResource("2_20hf0")]
|
||||||
|
transform = Transform3D(0.922066, 0, 0.387033, 0, 1, 0, -0.387033, 0, 0.922066, -5.98415, 0, -9.7244)
|
||||||
|
|
||||||
|
[node name="Platforms5" parent="." instance=ExtResource("1_t5xh4")]
|
||||||
|
transform = Transform3D(0.923846, 0, -0.382764, 0, 1, 0, 0.382764, 0, 0.923846, 2.31558, 0, -23.054)
|
||||||
|
|
||||||
|
[node name="SpawnPoint" parent="." instance=ExtResource("3_63ckc")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.01383, 0, -1.93276)
|
||||||
|
|
||||||
|
[node name="SpawnPoint2" parent="." instance=ExtResource("3_63ckc")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.21992, 0, -7.43863)
|
||||||
|
|
||||||
|
[node name="SpawnPoint3" parent="." instance=ExtResource("3_63ckc")]
|
||||||
|
transform = Transform3D(0.998982, 0, -0.0451189, 0, 1, 0, 0.0451189, 0, 0.998982, 3.70248, 0, -22.6231)
|
||||||
|
|
||||||
|
[node name="Platforms6" parent="." instance=ExtResource("2_20hf0")]
|
||||||
|
transform = Transform3D(0.886317, 0, -0.463079, 0, 1, 0, 0.463079, 0, 0.886317, 16.7673, 0, -9.85118)
|
||||||
|
|
||||||
|
[node name="SpawnPoint4" parent="." instance=ExtResource("3_63ckc")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16.6107, 0, -8.04518)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform" parent="." instance=ExtResource("4_yewb1")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.28917, 0, -10.1963)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform2" parent="." instance=ExtResource("4_yewb1")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.15056, 0, -9.08093)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform3" parent="." instance=ExtResource("5_deyyw")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.78291, 0, -10.8037)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform4" parent="." instance=ExtResource("4_yewb1")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.07311, 0, -10.3168)
|
||||||
@@ -16,6 +16,6 @@ noise = SubResource("FastNoiseLite_wonuc")
|
|||||||
[resource]
|
[resource]
|
||||||
albedo_color = Color(0.113725, 0.431373, 0.266667, 0.933333)
|
albedo_color = Color(0.113725, 0.431373, 0.266667, 0.933333)
|
||||||
albedo_texture = SubResource("NoiseTexture2D_iklfu")
|
albedo_texture = SubResource("NoiseTexture2D_iklfu")
|
||||||
uv1_scale = Vector3(20, 1, 20)
|
|
||||||
uv1_triplanar = true
|
uv1_triplanar = true
|
||||||
|
uv1_world_triplanar = true
|
||||||
texture_filter = 0
|
texture_filter = 0
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
[gd_resource type="StandardMaterial3D" format=3 uid="uid://bxbikke5t70ff"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://c60s78p4g17ye"]
|
[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://c60s78p4g17ye"]
|
||||||
|
|
||||||
[ext_resource type="Shader" path="res://materials/shader/WorldColoring.gdshader" id="1_ashe5"]
|
[ext_resource type="Shader" path="res://materials/shader/WorldColoringCoop.gdshader" id="1_r8s2v"]
|
||||||
[ext_resource type="Texture2D" uid="uid://b2c7rc40v7wfl" path="res://assets/textures/test_world_color_texture.png" id="2_60odu"]
|
[ext_resource type="Texture2D" uid="uid://b2c7rc40v7wfl" path="res://assets/textures/test_world_color_texture.png" id="2_60odu"]
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
render_priority = 1
|
render_priority = 1
|
||||||
shader = ExtResource("1_ashe5")
|
shader = ExtResource("1_r8s2v")
|
||||||
shader_parameter/world_color_texture = ExtResource("2_60odu")
|
shader_parameter/world_color_texture = ExtResource("2_60odu")
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://biriunillglve"]
|
||||||
|
|
||||||
|
[ext_resource type="Shader" path="res://materials/shader/WorldColoringVersus.gdshader" id="1_sq8hp"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://b2c7rc40v7wfl" path="res://assets/textures/test_world_color_texture.png" id="2_rvt68"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
render_priority = 1
|
||||||
|
shader = ExtResource("1_sq8hp")
|
||||||
|
shader_parameter/world_color_texture = ExtResource("2_rvt68")
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
// based on:
|
||||||
|
// - https://www.youtube.com/watch?v=5CKvGYqagyI
|
||||||
|
// - https://pastebin.com/pbGGjrE8
|
||||||
|
|
||||||
|
#[compute]
|
||||||
|
#version 450
|
||||||
|
|
||||||
|
// Invocations in the (x, y, z) dimension
|
||||||
|
layout(local_size_x = 4, local_size_y = 4, local_size_z = 1) in;
|
||||||
|
|
||||||
|
// A binding to the buffer we create in our script
|
||||||
|
layout(set = 0, binding = 0, std430) buffer MyDataBuffer {
|
||||||
|
int data[];
|
||||||
|
}
|
||||||
|
my_data_buffer;
|
||||||
|
|
||||||
|
layout(set = 0, binding = 1) uniform sampler2D tex;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
if (texture(tex, vec2(gl_GlobalInvocationID.x, gl_GlobalInvocationID.y)).r > 0.0) {
|
||||||
|
atomicAdd(my_data_buffer.data[0], 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (texture(tex, vec2(gl_GlobalInvocationID.x, gl_GlobalInvocationID.y)).b > 0.0) {
|
||||||
|
atomicAdd(my_data_buffer.data[1], 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (texture(tex, vec2(gl_GlobalInvocationID.x, gl_GlobalInvocationID.y)).rgb == vec3(1.0, 0, 1.0)) {
|
||||||
|
atomicAdd(my_data_buffer.data[2], 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="glsl"
|
||||||
|
type="RDShaderFile"
|
||||||
|
uid="uid://daaysa2a1u6b7"
|
||||||
|
path="res://.godot/imported/PixelCountCompute.glsl-abe5c29fd9b584b640dd1cca2cbbc009.res"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://materials/shader/PixelCountCompute.glsl"
|
||||||
|
dest_files=["res://.godot/imported/PixelCountCompute.glsl-abe5c29fd9b584b640dd1cca2cbbc009.res"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
@@ -16,8 +16,7 @@ void fragment() {
|
|||||||
|
|
||||||
vec3 desaturatedColor = vec3(dot(currentColor.rgb, colorToLuminance) * 0.4) + 0.1 * currentColor.rgb;
|
vec3 desaturatedColor = vec3(dot(currentColor.rgb, colorToLuminance) * 0.4) + 0.1 * currentColor.rgb;
|
||||||
|
|
||||||
ALBEDO = desaturatedColor * (1.0 - playerColorationColor.a) + currentColor.rgb * playerColorationColor.a;
|
// ALBEDO = desaturatedColor * (1.0 - playerColorationColor.a) + currentColor.rgb * playerColorationColor.a;
|
||||||
|
|
||||||
ALBEDO = desaturatedColor * (1.0 - playerColorationColor.a) + (playerColorationColor.rgb * 0.3 + currentColor.rgb * 0.7) * playerColorationColor.a;
|
ALBEDO = desaturatedColor * (1.0 - playerColorationColor.a) + (playerColorationColor.rgb * 0.3 + currentColor.rgb * 0.7) * playerColorationColor.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
shader_type spatial;
|
||||||
|
|
||||||
|
uniform sampler2D screen_texture : hint_screen_texture, repeat_disable, filter_nearest;
|
||||||
|
uniform sampler2D world_color_texture : hint_default_black, repeat_disable;
|
||||||
|
|
||||||
|
void vertex() {
|
||||||
|
// Called for every vertex the material is visible on.
|
||||||
|
}
|
||||||
|
|
||||||
|
void fragment() {
|
||||||
|
vec4 projected_coords = INV_VIEW_MATRIX * vec4(VERTEX, 1.0);
|
||||||
|
|
||||||
|
vec4 currentColor = textureLod(screen_texture, SCREEN_UV, 0.0);
|
||||||
|
vec4 playerColorationColor = textureLod(world_color_texture, projected_coords.xz * 0.01 + vec2(0.5), 0.0);
|
||||||
|
vec3 colorToLuminance = vec3(0.2126, 0.7152, 0.0722);
|
||||||
|
|
||||||
|
vec3 desaturatedColor = vec3(dot(currentColor.rgb, colorToLuminance) * 0.4) + 0.1 * currentColor.rgb;
|
||||||
|
|
||||||
|
ALBEDO = desaturatedColor * (1.0 - playerColorationColor.a) + currentColor.rgb * playerColorationColor.a;
|
||||||
|
}
|
||||||
|
|
||||||
|
//void light() {
|
||||||
|
// Called for every pixel for every light affecting the material.
|
||||||
|
// Uncomment to replace the default light processing function with this one.
|
||||||
|
//}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
shader_type spatial;
|
||||||
|
|
||||||
|
uniform sampler2D screen_texture : hint_screen_texture, repeat_disable, filter_nearest;
|
||||||
|
uniform sampler2D world_color_texture : hint_default_black, repeat_disable;
|
||||||
|
|
||||||
|
void vertex() {
|
||||||
|
// Called for every vertex the material is visible on.
|
||||||
|
}
|
||||||
|
|
||||||
|
void fragment() {
|
||||||
|
vec4 projected_coords = INV_VIEW_MATRIX * vec4(VERTEX, 1.0);
|
||||||
|
|
||||||
|
vec4 currentColor = textureLod(screen_texture, SCREEN_UV, 0.0);
|
||||||
|
vec4 playerColorationColor = textureLod(world_color_texture, projected_coords.xz * 0.01 + vec2(0.5), 0.0);
|
||||||
|
vec3 colorToLuminance = vec3(0.2126, 0.7152, 0.0722);
|
||||||
|
|
||||||
|
vec3 desaturatedColor = vec3(dot(currentColor.rgb, colorToLuminance) * 0.4) + 0.1 * currentColor.rgb;
|
||||||
|
|
||||||
|
ALBEDO = desaturatedColor * (1.0 - playerColorationColor.a) + (playerColorationColor.rgb * 0.3 + currentColor.rgb * 0.7) * playerColorationColor.a;
|
||||||
|
}
|
||||||
|
|
||||||
|
//void light() {
|
||||||
|
// Called for every pixel for every light affecting the material.
|
||||||
|
// Uncomment to replace the default light processing function with this one.
|
||||||
|
//}
|
||||||
+110
-10
@@ -11,9 +11,15 @@ config_version=5
|
|||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="DashBoomColorClash"
|
config/name="DashBoomColorClash"
|
||||||
|
config/description="Spread your color in the level. Use bombs to mark spots and dash to evade your opponent!"
|
||||||
|
config/version="1.0"
|
||||||
run/main_scene="res://scenes/Game.tscn"
|
run/main_scene="res://scenes/Game.tscn"
|
||||||
config/features=PackedStringArray("4.2", "GL Compatibility")
|
config/features=PackedStringArray("4.2", "GL Compatibility")
|
||||||
config/icon="res://icon.svg"
|
config/icon="res://ui/Icon.png"
|
||||||
|
|
||||||
|
[display]
|
||||||
|
|
||||||
|
window/size/mode=3
|
||||||
|
|
||||||
[dotnet]
|
[dotnet]
|
||||||
|
|
||||||
@@ -21,51 +27,145 @@ project/assembly_name="DashBoomColorClash"
|
|||||||
|
|
||||||
[input]
|
[input]
|
||||||
|
|
||||||
|
ui_accept={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194310,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":32,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
ui_select={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":3,"pressure":0.0,"pressed":false,"script":null)
|
||||||
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":32,"echo":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
ui_cancel={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194305,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
ui_left={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
|
||||||
|
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":-1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
ui_right={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194321,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
|
||||||
|
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
ui_up={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194320,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
|
||||||
|
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":-1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
ui_down={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194322,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
|
||||||
|
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
ui_menu={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194370,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":6,"pressure":0.0,"pressed":true,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":6,"pressure":0.0,"pressed":true,"script":null)
|
||||||
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
move_up_p1={
|
move_up_p1={
|
||||||
"deadzone": 0.5,
|
"deadzone": 0.5,
|
||||||
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":-1.0,"script":null)
|
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
|
||||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":118,"echo":false,"script":null)
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":118,"echo":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
move_down_p1={
|
move_down_p1={
|
||||||
"deadzone": 0.5,
|
"deadzone": 0.5,
|
||||||
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":1.0,"script":null)
|
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
|
||||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":105,"echo":false,"script":null)
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":105,"echo":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
move_left_p1={
|
move_left_p1={
|
||||||
"deadzone": 0.5,
|
"deadzone": 0.5,
|
||||||
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":-1.0,"script":null)
|
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
|
||||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":117,"echo":false,"script":null)
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":117,"echo":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
move_right_p1={
|
move_right_p1={
|
||||||
"deadzone": 0.5,
|
"deadzone": 0.5,
|
||||||
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null)
|
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
|
||||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":97,"echo":false,"script":null)
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":97,"echo":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
dash_p1={
|
dash_p1={
|
||||||
"deadzone": 0.5,
|
"deadzone": 0.5,
|
||||||
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
|
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
|
||||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":79,"key_label":0,"unicode":102,"echo":false,"script":null)
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":79,"key_label":0,"unicode":102,"echo":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
bomb_p1={
|
bomb_p1={
|
||||||
"deadzone": 0.5,
|
"deadzone": 0.5,
|
||||||
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
|
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
|
||||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":80,"key_label":0,"unicode":113,"echo":false,"script":null)
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":80,"key_label":0,"unicode":113,"echo":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
move_up_p2={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":1,"axis":1,"axis_value":-1.0,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":11,"pressure":0.0,"pressed":true,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
move_down_p2={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":1,"axis":1,"axis_value":1.0,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":12,"pressure":0.0,"pressed":true,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
move_left_p2={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":1,"axis":0,"axis_value":-1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
move_right_p2={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":1,"axis":0,"axis_value":1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
dash_p2={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
|
||||||
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194440,"key_label":0,"unicode":50,"echo":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
bomb_p2={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194441,"key_label":0,"unicode":51,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
[layer_names]
|
[layer_names]
|
||||||
|
|
||||||
3d_physics/layer_1="World"
|
3d_physics/layer_1="World"
|
||||||
3d_physics/layer_2="Obstacles"
|
3d_physics/layer_2="Obstacles"
|
||||||
3d_physics/layer_3="Player"
|
3d_physics/layer_3="Player"
|
||||||
3d_physics/layer_4="Collectibles"
|
3d_physics/layer_4="Clutter"
|
||||||
|
|
||||||
[rendering]
|
[rendering]
|
||||||
|
|
||||||
renderer/rendering_method="gl_compatibility"
|
renderer/rendering_method="mobile"
|
||||||
renderer/rendering_method.mobile="gl_compatibility"
|
environment/defaults/default_clear_color=Color(0.301961, 0.301961, 0.301961, 1)
|
||||||
|
|||||||
+382
-3
@@ -1,15 +1,26 @@
|
|||||||
[gd_scene load_steps=5 format=3 uid="uid://rd48gl8k5x34"]
|
[gd_scene load_steps=13 format=3 uid="uid://rd48gl8k5x34"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://Game.gd" id="1_7jqda"]
|
[ext_resource type="Theme" uid="uid://bb8mjy6l7umui" path="res://themes/GameUI.tres" id="2_eun58"]
|
||||||
[ext_resource type="PackedScene" uid="uid://b1nm5h3yccr16" path="res://scenes/World.tscn" id="2_voimb"]
|
[ext_resource type="PackedScene" uid="uid://b1nm5h3yccr16" path="res://scenes/World.tscn" id="2_voimb"]
|
||||||
|
[ext_resource type="ButtonGroup" uid="uid://ctqarf04xdj1" path="res://ui/LevelSelectButtonGroup.tres" id="4_0dlh8"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://b5ah0ej10awd5" path="res://levels/Platforms.png" id="4_0en0p"]
|
||||||
|
[ext_resource type="Script" path="res://scenes/GameUI.gd" id="4_2tdl1"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://dam8r48qo0qqh" path="res://levels/BasicLevel.png" id="4_l63m5"]
|
||||||
|
[ext_resource type="FontFile" uid="uid://dv01hh045k5n2" path="res://assets/fonts/Rubik_Mono_One/RubikMonoOne-Regular.ttf" id="4_pbhfl"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://b3bftdoqgqopj" path="res://levels/LotsaHoles.png" id="7_8su71"]
|
||||||
|
|
||||||
[sub_resource type="World3D" id="World3D_5g233"]
|
[sub_resource type="World3D" id="World3D_5g233"]
|
||||||
|
|
||||||
[sub_resource type="ViewportTexture" id="ViewportTexture_2lmj8"]
|
[sub_resource type="ViewportTexture" id="ViewportTexture_2lmj8"]
|
||||||
viewport_path = NodePath("Viewport")
|
viewport_path = NodePath("Viewport")
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_y5ieh"]
|
||||||
|
bg_color = Color(1, 0, 0, 1)
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_obhii"]
|
||||||
|
bg_color = Color(0, 0, 1, 1)
|
||||||
|
|
||||||
[node name="Game" type="Node"]
|
[node name="Game" type="Node"]
|
||||||
script = ExtResource("1_7jqda")
|
|
||||||
|
|
||||||
[node name="Viewport" type="SubViewport" parent="."]
|
[node name="Viewport" type="SubViewport" parent="."]
|
||||||
own_world_3d = true
|
own_world_3d = true
|
||||||
@@ -38,3 +49,371 @@ size_flags_horizontal = 4
|
|||||||
size_flags_vertical = 4
|
size_flags_vertical = 4
|
||||||
texture = SubResource("ViewportTexture_2lmj8")
|
texture = SubResource("ViewportTexture_2lmj8")
|
||||||
stretch_mode = 6
|
stretch_mode = 6
|
||||||
|
|
||||||
|
[node name="TopBar" type="Panel" parent="."]
|
||||||
|
visible = false
|
||||||
|
custom_minimum_size = Vector2(0, 100)
|
||||||
|
anchors_preset = 10
|
||||||
|
anchor_right = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
size_flags_horizontal = 4
|
||||||
|
size_flags_vertical = 4
|
||||||
|
|
||||||
|
[node name="GameUI" type="Control" parent="."]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
theme = ExtResource("2_eun58")
|
||||||
|
script = ExtResource("4_2tdl1")
|
||||||
|
world_path = NodePath("../Viewport/World")
|
||||||
|
|
||||||
|
[node name="GameStartupWidgets" type="Panel" parent="GameUI"]
|
||||||
|
visible = false
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
theme = ExtResource("2_eun58")
|
||||||
|
|
||||||
|
[node name="Logo" type="Control" parent="GameUI/GameStartupWidgets"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 8
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_top = 0.5
|
||||||
|
anchor_right = 0.5
|
||||||
|
anchor_bottom = 0.5
|
||||||
|
offset_left = -20.0
|
||||||
|
offset_top = -20.0
|
||||||
|
offset_right = 20.0
|
||||||
|
offset_bottom = 20.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
|
||||||
|
[node name="Label2" type="Label" parent="GameUI/GameStartupWidgets/Logo"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = -356.0
|
||||||
|
offset_top = -160.871
|
||||||
|
offset_right = -34.0
|
||||||
|
offset_bottom = 10.1293
|
||||||
|
rotation = -0.277231
|
||||||
|
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||||
|
theme_override_constants/shadow_offset_x = 20
|
||||||
|
theme_override_constants/shadow_offset_y = 20
|
||||||
|
theme_override_constants/outline_size = 40
|
||||||
|
theme_override_font_sizes/font_size = 160
|
||||||
|
text = "DASH"
|
||||||
|
|
||||||
|
[node name="Label3" type="Label" parent="GameUI/GameStartupWidgets/Logo"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = -142.0
|
||||||
|
offset_top = -107.871
|
||||||
|
offset_right = 182.0
|
||||||
|
offset_bottom = 63.1293
|
||||||
|
rotation = -0.279149
|
||||||
|
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||||
|
theme_override_constants/shadow_offset_x = 20
|
||||||
|
theme_override_constants/shadow_offset_y = 20
|
||||||
|
theme_override_constants/outline_size = 40
|
||||||
|
theme_override_font_sizes/font_size = 160
|
||||||
|
text = "BOOM"
|
||||||
|
|
||||||
|
[node name="Label4" type="Label" parent="GameUI/GameStartupWidgets/Logo"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = -219.0
|
||||||
|
offset_top = 12.1293
|
||||||
|
offset_right = 120.0
|
||||||
|
offset_bottom = 183.129
|
||||||
|
rotation = -0.137962
|
||||||
|
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||||
|
theme_override_constants/shadow_offset_x = 20
|
||||||
|
theme_override_constants/shadow_offset_y = 20
|
||||||
|
theme_override_constants/outline_size = 40
|
||||||
|
theme_override_font_sizes/font_size = 160
|
||||||
|
text = "COLOR"
|
||||||
|
|
||||||
|
[node name="Label5" type="Label" parent="GameUI/GameStartupWidgets/Logo"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = -34.0
|
||||||
|
offset_top = 97.0
|
||||||
|
offset_right = 305.0
|
||||||
|
offset_bottom = 268.0
|
||||||
|
rotation = -0.155661
|
||||||
|
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||||
|
theme_override_constants/shadow_offset_x = 20
|
||||||
|
theme_override_constants/shadow_offset_y = 20
|
||||||
|
theme_override_constants/outline_size = 40
|
||||||
|
theme_override_font_sizes/font_size = 160
|
||||||
|
text = "CLASH"
|
||||||
|
|
||||||
|
[node name="Label2" type="Label" parent="GameUI/GameStartupWidgets"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 2
|
||||||
|
anchor_top = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_left = 17.0
|
||||||
|
offset_top = -50.0
|
||||||
|
offset_right = 705.0
|
||||||
|
offset_bottom = -17.0
|
||||||
|
grow_vertical = 0
|
||||||
|
text = "Music: Run Amok by Kevin MacLeod | https://incompetech.com/"
|
||||||
|
|
||||||
|
[node name="KeyboardControls" type="HBoxContainer" parent="GameUI/GameStartupWidgets"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 7
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_top = 1.0
|
||||||
|
anchor_right = 0.5
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_left = -354.0
|
||||||
|
offset_top = -220.0
|
||||||
|
offset_right = 369.0
|
||||||
|
offset_bottom = -76.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 0
|
||||||
|
|
||||||
|
[node name="GamepadControlsLabel" type="Label" parent="GameUI/GameStartupWidgets/KeyboardControls"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Controls Gamepad:
|
||||||
|
Movement: Analog Stick
|
||||||
|
Dash: Button A / X
|
||||||
|
Bomb: Button B / O"
|
||||||
|
|
||||||
|
[node name="Player1KeyboardControlsLabel" type="Label" parent="GameUI/GameStartupWidgets/KeyboardControls"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Player1:
|
||||||
|
Movement: W A S D
|
||||||
|
Dash: O
|
||||||
|
Bomb: P"
|
||||||
|
|
||||||
|
[node name="Player2KeyboardControlsLabel" type="Label" parent="GameUI/GameStartupWidgets/KeyboardControls"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Player2:
|
||||||
|
Movement: ←↑→↓
|
||||||
|
Dash: Keypad 2
|
||||||
|
Bomb: Keypad 3"
|
||||||
|
|
||||||
|
[node name="GameLevelSelectWidgets" type="Panel" parent="GameUI"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="GameUI/GameLevelSelectWidgets"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 5
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_right = 0.5
|
||||||
|
offset_left = -169.0
|
||||||
|
offset_top = 76.0
|
||||||
|
offset_right = 153.0
|
||||||
|
offset_bottom = 162.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
theme_override_font_sizes/font_size = 80
|
||||||
|
text = "Level Select"
|
||||||
|
|
||||||
|
[node name="LevelListContainer" type="HBoxContainer" parent="GameUI/GameLevelSelectWidgets"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 14
|
||||||
|
anchor_top = 0.5
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 0.5
|
||||||
|
offset_top = -151.0
|
||||||
|
offset_bottom = 148.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
focus_next = NodePath("BasicLevelButton")
|
||||||
|
focus_mode = 2
|
||||||
|
theme_override_constants/separation = 32
|
||||||
|
alignment = 1
|
||||||
|
|
||||||
|
[node name="BasicLevelButton" type="Button" parent="GameUI/GameLevelSelectWidgets/LevelListContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
toggle_mode = true
|
||||||
|
button_group = ExtResource("4_0dlh8")
|
||||||
|
icon = ExtResource("4_l63m5")
|
||||||
|
|
||||||
|
[node name="PlatformLevelButton" type="Button" parent="GameUI/GameLevelSelectWidgets/LevelListContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
toggle_mode = true
|
||||||
|
button_group = ExtResource("4_0dlh8")
|
||||||
|
icon = ExtResource("4_0en0p")
|
||||||
|
|
||||||
|
[node name="PlatformLevelButton2" type="Button" parent="GameUI/GameLevelSelectWidgets/LevelListContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
toggle_mode = true
|
||||||
|
button_group = ExtResource("4_0dlh8")
|
||||||
|
icon = ExtResource("7_8su71")
|
||||||
|
|
||||||
|
[node name="GameRunningWidgets" type="Panel" parent="GameUI"]
|
||||||
|
visible = false
|
||||||
|
custom_minimum_size = Vector2(0, 80)
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 10
|
||||||
|
anchor_right = 1.0
|
||||||
|
offset_bottom = 80.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
|
||||||
|
[node name="Player1Widgets" type="VBoxContainer" parent="GameUI/GameRunningWidgets"]
|
||||||
|
layout_mode = 1
|
||||||
|
offset_left = 14.0
|
||||||
|
offset_top = 13.0
|
||||||
|
offset_right = 414.0
|
||||||
|
offset_bottom = 124.0
|
||||||
|
alignment = 1
|
||||||
|
|
||||||
|
[node name="NameLabel" type="Label" parent="GameUI/GameRunningWidgets/Player1Widgets"]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_colors/font_color = Color(1, 0, 0, 1)
|
||||||
|
text = "Red"
|
||||||
|
|
||||||
|
[node name="ScoreLabel" type="Label" parent="GameUI/GameRunningWidgets/Player1Widgets"]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_colors/font_color = Color(1, 0, 0, 1)
|
||||||
|
text = "0
|
||||||
|
"
|
||||||
|
|
||||||
|
[node name="EnergyProgressBar" type="ProgressBar" parent="GameUI/GameRunningWidgets/Player1Widgets"]
|
||||||
|
custom_minimum_size = Vector2(400, 0)
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_styles/fill = SubResource("StyleBoxFlat_y5ieh")
|
||||||
|
value = 33.0
|
||||||
|
|
||||||
|
[node name="Player2Widgets" type="VBoxContainer" parent="GameUI/GameRunningWidgets"]
|
||||||
|
layout_direction = 3
|
||||||
|
layout_mode = 1
|
||||||
|
offset_left = 21.0
|
||||||
|
offset_top = 14.0
|
||||||
|
offset_right = 421.0
|
||||||
|
offset_bottom = 125.0
|
||||||
|
size_flags_horizontal = 8
|
||||||
|
alignment = 1
|
||||||
|
|
||||||
|
[node name="NameLabel" type="Label" parent="GameUI/GameRunningWidgets/Player2Widgets"]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_colors/font_color = Color(0, 0, 1, 1)
|
||||||
|
text = "Blue"
|
||||||
|
|
||||||
|
[node name="ScoreLabel" type="Label" parent="GameUI/GameRunningWidgets/Player2Widgets"]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_colors/font_color = Color(0, 0, 1, 1)
|
||||||
|
text = "0
|
||||||
|
"
|
||||||
|
|
||||||
|
[node name="EnergyProgressBar" type="ProgressBar" parent="GameUI/GameRunningWidgets/Player2Widgets"]
|
||||||
|
custom_minimum_size = Vector2(400, 0)
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_styles/fill = SubResource("StyleBoxFlat_obhii")
|
||||||
|
value = 75.0
|
||||||
|
|
||||||
|
[node name="TimeWidgets" type="VBoxContainer" parent="GameUI/GameRunningWidgets"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 5
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_right = 0.5
|
||||||
|
offset_left = -48.0
|
||||||
|
offset_right = 48.0
|
||||||
|
offset_bottom = 70.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="GameUI/GameRunningWidgets/TimeWidgets"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Time Left"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="TimeLeftLabel" type="Label" parent="GameUI/GameRunningWidgets/TimeWidgets"]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_fonts/font = ExtResource("4_pbhfl")
|
||||||
|
theme_override_font_sizes/font_size = 40
|
||||||
|
text = "00:30:00"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="GameFinishedWidgets" type="Panel" parent="GameUI"]
|
||||||
|
visible = false
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
theme = ExtResource("2_eun58")
|
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="GameUI/GameFinishedWidgets"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 8
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_top = 0.5
|
||||||
|
anchor_right = 0.5
|
||||||
|
anchor_bottom = 0.5
|
||||||
|
offset_left = -240.0
|
||||||
|
offset_top = -64.0
|
||||||
|
offset_right = 240.0
|
||||||
|
offset_bottom = 64.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_font_sizes/font_size = 120
|
||||||
|
text = "Game Over!"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="WinnerLabel" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Player 1 wins"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="HBoxContainer" type="HBoxContainer" parent="GameUI/GameFinishedWidgets/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
alignment = 1
|
||||||
|
|
||||||
|
[node name="Player1Stats" type="VBoxContainer" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer"]
|
||||||
|
custom_minimum_size = Vector2(200, 0)
|
||||||
|
layout_direction = 2
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer/Player1Stats"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Player 1"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="Points" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer/Player1Stats"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "0"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="Player2Stats" type="VBoxContainer" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer"]
|
||||||
|
custom_minimum_size = Vector2(200, 0)
|
||||||
|
layout_direction = 2
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer/Player2Stats"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Player 2"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="Points" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer/Player2Stats"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "0"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="GameUI/GameFinishedWidgets"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 7
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_top = 1.0
|
||||||
|
anchor_right = 0.5
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_left = -217.0
|
||||||
|
offset_top = -54.0
|
||||||
|
offset_right = 228.0
|
||||||
|
offset_bottom = -21.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 0
|
||||||
|
text = "Press Escape/Options/Start to continue"
|
||||||
|
|||||||
@@ -0,0 +1,132 @@
|
|||||||
|
extends Control
|
||||||
|
|
||||||
|
@export var world_path : NodePath = NodePath()
|
||||||
|
|
||||||
|
@onready var game_running_widgets : Control = $'GameRunningWidgets'
|
||||||
|
@onready var game_startup_widgets : Control = $'GameStartupWidgets'
|
||||||
|
@onready var game_finished_widgets : Control = $'GameFinishedWidgets'
|
||||||
|
@onready var game_level_select_widgets : Control = $'GameLevelSelectWidgets'
|
||||||
|
|
||||||
|
@onready var level_list_container: HBoxContainer = $'GameLevelSelectWidgets/LevelListContainer'
|
||||||
|
|
||||||
|
@onready var player1_score_label : Label = $'GameRunningWidgets/Player1Widgets/ScoreLabel'
|
||||||
|
@onready var player1_energy_progressbar : ProgressBar = $'GameRunningWidgets/Player1Widgets/EnergyProgressBar'
|
||||||
|
@onready var player2_score_label : Label = $'GameRunningWidgets/Player2Widgets/ScoreLabel'
|
||||||
|
@onready var player2_energy_progressbar : ProgressBar = $'GameRunningWidgets/Player2Widgets/EnergyProgressBar'
|
||||||
|
@onready var player2_widgets : Control = $'GameRunningWidgets/Player2Widgets'
|
||||||
|
|
||||||
|
@onready var time_left_label : Label = $'GameRunningWidgets/TimeWidgets/TimeLeftLabel'
|
||||||
|
|
||||||
|
@onready var winner_label : Label = $'GameFinishedWidgets/VBoxContainer/WinnerLabel'
|
||||||
|
@onready var player1_stats_points : Label = $'GameFinishedWidgets/VBoxContainer/HBoxContainer/Player1Stats/Points'
|
||||||
|
@onready var player2_stats_points : Label = $'GameFinishedWidgets/VBoxContainer/HBoxContainer/Player2Stats/Points'
|
||||||
|
|
||||||
|
var world : World = null
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
func _ready():
|
||||||
|
world = get_node(world_path)
|
||||||
|
|
||||||
|
initialize_level_buttons()
|
||||||
|
|
||||||
|
game_level_select_widgets.connect("visibility_changed", on_game_level_select_visibility_changed)
|
||||||
|
|
||||||
|
if world.players.size() == 1:
|
||||||
|
player2_widgets.visible = false
|
||||||
|
|
||||||
|
func _process(_delta):
|
||||||
|
if world.game_state == World.GameState.Startup:
|
||||||
|
game_startup_widgets.visible = true
|
||||||
|
game_running_widgets.visible = false
|
||||||
|
game_finished_widgets.visible = false
|
||||||
|
game_level_select_widgets.visible = false
|
||||||
|
elif world.game_state == World.GameState.LevelSelect:
|
||||||
|
game_startup_widgets.visible = false
|
||||||
|
game_running_widgets.visible = false
|
||||||
|
game_finished_widgets.visible = false
|
||||||
|
game_level_select_widgets.visible = true
|
||||||
|
elif world.game_state == World.GameState.Running:
|
||||||
|
game_startup_widgets.visible = false
|
||||||
|
game_running_widgets.visible = true
|
||||||
|
game_finished_widgets.visible = false
|
||||||
|
game_level_select_widgets.visible = false
|
||||||
|
|
||||||
|
var minutes = floor(world.time_left / 60.)
|
||||||
|
var seconds = fmod(floor(world.time_left), 60)
|
||||||
|
var milliseconds = floor((world.time_left - floor(world.time_left)) * 100)
|
||||||
|
|
||||||
|
time_left_label.text = "%02d:%02d:%02d" % [minutes, seconds, milliseconds]
|
||||||
|
|
||||||
|
player1_score_label.add_theme_color_override("font-color", world.players[0].color)
|
||||||
|
if player2_widgets.visible:
|
||||||
|
player2_score_label.add_theme_color_override("font-color", world.players[1].color)
|
||||||
|
elif world.game_state == World.GameState.Finished:
|
||||||
|
game_startup_widgets.visible = false
|
||||||
|
game_running_widgets.visible = false
|
||||||
|
game_finished_widgets.visible = true
|
||||||
|
game_level_select_widgets.visible = false
|
||||||
|
|
||||||
|
player1_score_label.text = str(world.players[0].score)
|
||||||
|
player1_energy_progressbar.value = world.players[0].energy
|
||||||
|
player1_stats_points.text = str(world.players[0].score)
|
||||||
|
var winner_player : Player = world.players[0]
|
||||||
|
|
||||||
|
if player2_widgets.visible:
|
||||||
|
player2_score_label.text = str(world.players[1].score)
|
||||||
|
player2_energy_progressbar.value = world.players[1].energy
|
||||||
|
player2_stats_points.text = str(world.players[1].score)
|
||||||
|
if world.players[1].score > world.players[0].score:
|
||||||
|
winner_player = world.players[1]
|
||||||
|
|
||||||
|
winner_label.add_theme_color_override("font_color", winner_player.color)
|
||||||
|
winner_label.text = winner_player.name + " wins!"
|
||||||
|
|
||||||
|
|
||||||
|
func _input(event):
|
||||||
|
if event.is_action_pressed("ui_accept"):
|
||||||
|
if world.game_state == World.GameState.Startup:
|
||||||
|
world.game_state = World.GameState.LevelSelect
|
||||||
|
if event.is_action_pressed("ui_menu"):
|
||||||
|
if world.game_state == World.GameState.Finished:
|
||||||
|
world.game_state = World.GameState.Startup
|
||||||
|
if event.is_action_pressed("ui_cancel"):
|
||||||
|
if world.game_state == World.GameState.LevelSelect:
|
||||||
|
world.game_state = World.GameState.Startup
|
||||||
|
elif world.game_state == World.GameState.Startup:
|
||||||
|
get_tree().quit()
|
||||||
|
|
||||||
|
func initialize_level_buttons():
|
||||||
|
var level_button : Button = level_list_container.get_child(0)
|
||||||
|
if level_button == null:
|
||||||
|
push_error("Cannot initialize level selection: no level button found!")
|
||||||
|
return
|
||||||
|
|
||||||
|
var level_select_button_group : ButtonGroup = level_button.button_group
|
||||||
|
level_select_button_group.connect("pressed", on_level_button_pressed)
|
||||||
|
|
||||||
|
func update_selected_level():
|
||||||
|
var level_button: Button = level_list_container.get_child(0)
|
||||||
|
if level_button == null:
|
||||||
|
push_error("Cannot update selected level: no level found")
|
||||||
|
|
||||||
|
var button_index: int = -1
|
||||||
|
for button: Button in level_button.button_group.get_buttons():
|
||||||
|
button_index += 1
|
||||||
|
if button_index == world.level_index:
|
||||||
|
button.grab_focus()
|
||||||
|
return
|
||||||
|
|
||||||
|
func on_level_button_pressed(button: Button):
|
||||||
|
print("level button " + str(button) + " pressed")
|
||||||
|
var button_index: int = -1
|
||||||
|
for level_button : Button in level_list_container.get_children():
|
||||||
|
button_index += 1
|
||||||
|
print(str(level_button) + " toggled: " + str(level_button.is_hovered()))
|
||||||
|
if level_button == button:
|
||||||
|
world.level_index = button_index
|
||||||
|
|
||||||
|
print("level index: " + str(world.level_index))
|
||||||
|
world.game_state = World.GameState.Running
|
||||||
|
|
||||||
|
func on_game_level_select_visibility_changed():
|
||||||
|
update_selected_level()
|
||||||
@@ -0,0 +1,156 @@
|
|||||||
|
# based on:
|
||||||
|
# - https://www.youtube.com/watch?v=5CKvGYqagyI
|
||||||
|
# - https://pastebin.com/wXCqk1nQ
|
||||||
|
|
||||||
|
class_name PixelCountComputeShader extends Node
|
||||||
|
|
||||||
|
@export var paint_viewport_path: NodePath = NodePath()
|
||||||
|
|
||||||
|
var red_score := 0
|
||||||
|
var blue_score := 0
|
||||||
|
var pink_score := 0
|
||||||
|
|
||||||
|
var thread: Thread
|
||||||
|
var semaphore: Semaphore
|
||||||
|
var mutex: Mutex
|
||||||
|
var exit := false
|
||||||
|
|
||||||
|
var paint_texture: ViewportTexture
|
||||||
|
var paint_viewport: Viewport
|
||||||
|
|
||||||
|
var rd: RenderingDevice
|
||||||
|
var shader
|
||||||
|
var pipeline
|
||||||
|
|
||||||
|
var pixel_count_result_buffer
|
||||||
|
var pixel_count_uniform
|
||||||
|
|
||||||
|
var v_tex
|
||||||
|
var samp
|
||||||
|
var tex_uniform
|
||||||
|
|
||||||
|
var uniform_set
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
paint_viewport = get_node(paint_viewport_path)
|
||||||
|
paint_texture = paint_viewport.get_texture()
|
||||||
|
|
||||||
|
mutex = Mutex.new()
|
||||||
|
semaphore = Semaphore.new()
|
||||||
|
thread = Thread.new()
|
||||||
|
thread.start(_thread_calculate_score)
|
||||||
|
|
||||||
|
# We will be using our own RenderingDevice to handle the compute commands
|
||||||
|
rd = RenderingServer.create_local_rendering_device()
|
||||||
|
|
||||||
|
# Create shader and pipeline
|
||||||
|
var shader_file = load("res://materials/shader/PixelCountCompute.glsl")
|
||||||
|
var shader_spirv = shader_file.get_spirv()
|
||||||
|
shader = rd.shader_create_from_spirv(shader_spirv)
|
||||||
|
pipeline = rd.compute_pipeline_create(shader)
|
||||||
|
|
||||||
|
var pb = PackedInt32Array([0,0,0])
|
||||||
|
var pbb = pb.to_byte_array()
|
||||||
|
|
||||||
|
pixel_count_result_buffer = rd.storage_buffer_create(pbb.size(), pbb)
|
||||||
|
|
||||||
|
pixel_count_uniform = RDUniform.new()
|
||||||
|
pixel_count_uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_STORAGE_BUFFER
|
||||||
|
pixel_count_uniform.binding = 0
|
||||||
|
pixel_count_uniform.add_id(pixel_count_result_buffer)
|
||||||
|
|
||||||
|
var img = paint_texture.get_image()
|
||||||
|
var ta = img.get_data()
|
||||||
|
|
||||||
|
var fmt = RDTextureFormat.new()
|
||||||
|
fmt.width = paint_texture.get_width()
|
||||||
|
fmt.height = paint_texture.get_height()
|
||||||
|
fmt.usage_bits = RenderingDevice.TEXTURE_USAGE_CAN_UPDATE_BIT | RenderingDevice.TEXTURE_USAGE_SAMPLING_BIT
|
||||||
|
fmt.format = RenderingDevice.DATA_FORMAT_R8G8B8A8_SRGB
|
||||||
|
|
||||||
|
v_tex = rd.texture_create(fmt, RDTextureView.new(), [ta])
|
||||||
|
var samp_state = RDSamplerState.new()
|
||||||
|
samp_state.unnormalized_uvw = true
|
||||||
|
samp = rd.sampler_create(samp_state)
|
||||||
|
|
||||||
|
tex_uniform = RDUniform.new()
|
||||||
|
tex_uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_SAMPLER_WITH_TEXTURE
|
||||||
|
tex_uniform.binding = 1
|
||||||
|
tex_uniform.add_id(samp)
|
||||||
|
tex_uniform.add_id(v_tex)
|
||||||
|
|
||||||
|
uniform_set = rd.uniform_set_create([pixel_count_uniform, tex_uniform], shader, 0)
|
||||||
|
|
||||||
|
func recalculate_score():
|
||||||
|
await RenderingServer.frame_post_draw
|
||||||
|
semaphore.post()
|
||||||
|
|
||||||
|
func get_blue_score() -> int:
|
||||||
|
var result := blue_score
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
func get_red_score() -> int:
|
||||||
|
var result := red_score
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
func _thread_calculate_score():
|
||||||
|
while true:
|
||||||
|
semaphore.wait()
|
||||||
|
|
||||||
|
mutex.lock()
|
||||||
|
var should_exit := exit
|
||||||
|
mutex.unlock()
|
||||||
|
|
||||||
|
if should_exit:
|
||||||
|
break
|
||||||
|
|
||||||
|
mutex.lock()
|
||||||
|
var image := paint_texture.get_image()
|
||||||
|
#var image := paint_viewport.get_texture()
|
||||||
|
mutex.unlock()
|
||||||
|
|
||||||
|
var size = image.get_size()
|
||||||
|
var ta = image.get_data()
|
||||||
|
|
||||||
|
rd.texture_update(v_tex, 0, ta)
|
||||||
|
|
||||||
|
# Start compute list to start recording our compute commands
|
||||||
|
var compute_list = rd.compute_list_begin()
|
||||||
|
# Bind the pipeline, this tells the GPU what shader to use
|
||||||
|
rd.compute_list_bind_compute_pipeline(compute_list, pipeline)
|
||||||
|
# Binds the uniform set with the data we want to give our shader
|
||||||
|
rd.compute_list_bind_uniform_set(compute_list, uniform_set, 0)
|
||||||
|
# Dispatch 1x1x1 (XxYxZ) work groups
|
||||||
|
rd.compute_list_dispatch(compute_list, 1024/4, 1024/4, 1)
|
||||||
|
#rd.compute_list_add_barrier(compute_list)
|
||||||
|
# Tell the GPU we are done with this compute task
|
||||||
|
rd.compute_list_end()
|
||||||
|
|
||||||
|
# Force the GPU to start our commands
|
||||||
|
rd.submit()
|
||||||
|
# Force the CPU to wait for the GPU to finish with the recorded commands
|
||||||
|
rd.sync()
|
||||||
|
|
||||||
|
mutex.lock()
|
||||||
|
# Now we can grab our data from the storage buffer
|
||||||
|
var byte_data = rd.buffer_get_data(pixel_count_result_buffer)
|
||||||
|
var output := byte_data.to_int32_array()
|
||||||
|
|
||||||
|
red_score = floor(output[0]/100)
|
||||||
|
blue_score = floor(output[1]/100)
|
||||||
|
pink_score = floor(output[2]/100)
|
||||||
|
|
||||||
|
var pb = PackedInt32Array([0,0,0])
|
||||||
|
var pbb = pb.to_byte_array()
|
||||||
|
rd.buffer_update(pixel_count_result_buffer, 0, pbb.size(), pbb)
|
||||||
|
mutex.unlock()
|
||||||
|
|
||||||
|
func _exit_tree():
|
||||||
|
mutex.lock()
|
||||||
|
exit = true
|
||||||
|
mutex.unlock()
|
||||||
|
|
||||||
|
semaphore.post()
|
||||||
|
thread.wait_to_finish()
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
[gd_scene load_steps=2 format=3 uid="uid://bqgleq3w0o5wj"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://scenes/PixelCountComputeShader.gd" id="1_g7ep2"]
|
||||||
|
|
||||||
|
[node name="PixelCountComputeShader" type="Node"]
|
||||||
|
script = ExtResource("1_g7ep2")
|
||||||
|
paint_viewport_path = NodePath("../DrawViewport")
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://7a2ma10hq0qa"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://b08dmcbgq6jyd" path="res://scenes/PlatformParts/rectangle_platform_big.tscn" id="1_g3vn8"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://deod1xpjlgljl" path="res://scenes/PlatformParts/heptagon_platform_small.tscn" id="2_cf5t4"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://0fxjod84sli" path="res://scenes/PlatformParts/heptagon_platform_medium.tscn" id="3_3twio"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://c62j3c1n688uw" path="res://scenes/Wall.tscn" id="4_2reix"]
|
||||||
|
|
||||||
|
[node name="Platforms" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="RectanglePlatform" parent="." instance=ExtResource("1_g3vn8")]
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform2" parent="." instance=ExtResource("2_cf5t4")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.91408, -1.19209e-07, 0.855268)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform" parent="." instance=ExtResource("3_3twio")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.19921, 0, 2.0175)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform3" parent="." instance=ExtResource("2_cf5t4")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.86004, -1.19209e-07, 2.3567)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform4" parent="." instance=ExtResource("3_3twio")]
|
||||||
|
transform = Transform3D(0.962403, 0, -0.271625, 0, 1, 0, 0.271625, 0, 0.962403, 2.54967, 0, -2.50341)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform5" parent="." instance=ExtResource("2_cf5t4")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.02991, -1.19209e-07, -2.42698)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform6" parent="." instance=ExtResource("3_3twio")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.3652, 0, 1.87721)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform7" parent="." instance=ExtResource("2_cf5t4")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.17066, 0, 0.0834248)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform8" parent="." instance=ExtResource("2_cf5t4")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.27859, 0, 0.760057)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform9" parent="." instance=ExtResource("3_3twio")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.37052, 2.38419e-07, -3.29014)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform10" parent="." instance=ExtResource("2_cf5t4")]
|
||||||
|
transform = Transform3D(0.820272, 0, -0.571974, 0, 1, 0, 0.571974, 0, 0.820272, -3.73726, -1.19209e-07, -2.20909)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform11" parent="." instance=ExtResource("3_3twio")]
|
||||||
|
transform = Transform3D(0.975802, 0, -0.218654, 0, 1, 0, 0.218654, 0, 0.975802, -1.66098, 1.19209e-07, -2.16745)
|
||||||
|
|
||||||
|
[node name="Wall" parent="." instance=ExtResource("4_2reix")]
|
||||||
|
transform = Transform3D(-0.00234742, 0, 0.999989, 0, 1, 0, -0.499994, 0, -0.00469485, -2.99675, 0, 0.787979)
|
||||||
|
|
||||||
|
[node name="Wall2" parent="." instance=ExtResource("4_2reix")]
|
||||||
|
transform = Transform3D(0.6, 0, 0, 0, 1, 0, 0, 0, 1, -1.71071, 0, 1.61891)
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
[gd_scene load_steps=4 format=3 uid="uid://bnmtyc1kkt6ku"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://b08dmcbgq6jyd" path="res://scenes/PlatformParts/rectangle_platform_big.tscn" id="1_d57r4"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://deod1xpjlgljl" path="res://scenes/PlatformParts/heptagon_platform_small.tscn" id="2_le02h"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://0fxjod84sli" path="res://scenes/PlatformParts/heptagon_platform_medium.tscn" id="3_s83kt"]
|
||||||
|
|
||||||
|
[node name="Platforms" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="RectanglePlatform" parent="." instance=ExtResource("1_d57r4")]
|
||||||
|
|
||||||
|
[node name="RectanglePlatform2" parent="." instance=ExtResource("1_d57r4")]
|
||||||
|
transform = Transform3D(0.681526, 0, 0.731794, 0, 1, 0, -0.731794, 0, 0.681526, 4.78169, 9.53674e-07, -3.21263)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform" parent="." instance=ExtResource("3_s83kt")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.32937, 0, -2.07106)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform2" parent="." instance=ExtResource("3_s83kt")]
|
||||||
|
transform = Transform3D(0.928874, 0, -0.370395, 0, 1, 0, 0.370395, 0, 0.928874, -2.56182, 0, 2.31361)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform3" parent="." instance=ExtResource("3_s83kt")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.00963, 0, -6.48031)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform4" parent="." instance=ExtResource("3_s83kt")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.84411, 0, 2.80151)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform5" parent="." instance=ExtResource("2_le02h")]
|
||||||
|
transform = Transform3D(0.958158, 0, 0.28624, 0, 1, 0, -0.28624, 0, 0.958158, 1.35414, 0, 2.51217)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform6" parent="." instance=ExtResource("3_s83kt")]
|
||||||
|
transform = Transform3D(0.824482, 0, 0.565888, 0, 1, 0, -0.565888, 0, 0.824482, 8.5663, 0, -3.67112)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform7" parent="." instance=ExtResource("3_s83kt")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.35682, 0, -1.68474)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform8" parent="." instance=ExtResource("2_le02h")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.88906, -4.76837e-07, -1.68689)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform9" parent="." instance=ExtResource("3_s83kt")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.25496, 0, -5.96782)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform10" parent="." instance=ExtResource("3_s83kt")]
|
||||||
|
transform = Transform3D(0.776421, 0, -0.630215, 0, 1, 0, 0.630215, 0, 0.776421, 2.19849, 0, -4.99241)
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform11" parent="." instance=ExtResource("2_le02h")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.39733, 0, -3.61972)
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
[gd_scene load_steps=4 format=3 uid="uid://25h8ijy682em"]
|
||||||
|
|
||||||
|
[ext_resource type="Material" uid="uid://bg3dawo5kkosg" path="res://materials/GrassNoiseMaterial.tres" id="1_ist2t"]
|
||||||
|
|
||||||
|
[sub_resource type="CylinderMesh" id="CylinderMesh_jqmqb"]
|
||||||
|
material = ExtResource("1_ist2t")
|
||||||
|
top_radius = 5.0
|
||||||
|
bottom_radius = 4.9
|
||||||
|
height = 0.2
|
||||||
|
radial_segments = 7
|
||||||
|
rings = 1
|
||||||
|
|
||||||
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_xdt1a"]
|
||||||
|
height = 0.2
|
||||||
|
radius = 4.6
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform" type="StaticBody3D"]
|
||||||
|
collision_layer = 3
|
||||||
|
collision_mask = 0
|
||||||
|
|
||||||
|
[node name="Geometry" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.1, 0)
|
||||||
|
mesh = SubResource("CylinderMesh_jqmqb")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.1, 0)
|
||||||
|
shape = SubResource("CylinderShape3D_xdt1a")
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
[gd_scene load_steps=4 format=3 uid="uid://0fxjod84sli"]
|
||||||
|
|
||||||
|
[ext_resource type="Material" uid="uid://bg3dawo5kkosg" path="res://materials/GrassNoiseMaterial.tres" id="1_f6x8l"]
|
||||||
|
|
||||||
|
[sub_resource type="CylinderMesh" id="CylinderMesh_jqmqb"]
|
||||||
|
material = ExtResource("1_f6x8l")
|
||||||
|
top_radius = 1.5
|
||||||
|
bottom_radius = 1.45
|
||||||
|
height = 0.2
|
||||||
|
radial_segments = 7
|
||||||
|
rings = 1
|
||||||
|
|
||||||
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_xdt1a"]
|
||||||
|
height = 0.2
|
||||||
|
radius = 1.4
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform" type="StaticBody3D"]
|
||||||
|
collision_layer = 3
|
||||||
|
collision_mask = 0
|
||||||
|
|
||||||
|
[node name="Geometry" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.096, 0)
|
||||||
|
mesh = SubResource("CylinderMesh_jqmqb")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.1, 0)
|
||||||
|
shape = SubResource("CylinderShape3D_xdt1a")
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
[gd_scene load_steps=4 format=3 uid="uid://deod1xpjlgljl"]
|
||||||
|
|
||||||
|
[ext_resource type="Material" uid="uid://bg3dawo5kkosg" path="res://materials/GrassNoiseMaterial.tres" id="1_wshgh"]
|
||||||
|
|
||||||
|
[sub_resource type="CylinderMesh" id="CylinderMesh_jqmqb"]
|
||||||
|
material = ExtResource("1_wshgh")
|
||||||
|
bottom_radius = 0.45
|
||||||
|
height = 0.2
|
||||||
|
radial_segments = 7
|
||||||
|
rings = 1
|
||||||
|
|
||||||
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_xdt1a"]
|
||||||
|
height = 0.2
|
||||||
|
radius = 0.48
|
||||||
|
|
||||||
|
[node name="HeptagonPlatform" type="StaticBody3D"]
|
||||||
|
collision_layer = 3
|
||||||
|
collision_mask = 0
|
||||||
|
|
||||||
|
[node name="Geometry" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.097, 0)
|
||||||
|
mesh = SubResource("CylinderMesh_jqmqb")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.1, 0)
|
||||||
|
shape = SubResource("CylinderShape3D_xdt1a")
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
[gd_scene load_steps=4 format=3 uid="uid://b08dmcbgq6jyd"]
|
||||||
|
|
||||||
|
[ext_resource type="Material" uid="uid://bg3dawo5kkosg" path="res://materials/GrassNoiseMaterial.tres" id="1_clmc7"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="BoxMesh_a5xg2"]
|
||||||
|
material = ExtResource("1_clmc7")
|
||||||
|
size = Vector3(8, 0.2, 5)
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_k5g7w"]
|
||||||
|
size = Vector3(8, 0.2, 5)
|
||||||
|
|
||||||
|
[node name="RectanglePlatform" type="StaticBody3D"]
|
||||||
|
collision_layer = 3
|
||||||
|
collision_mask = 0
|
||||||
|
|
||||||
|
[node name="Geometry" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.1, 0)
|
||||||
|
mesh = SubResource("BoxMesh_a5xg2")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.1, 0)
|
||||||
|
shape = SubResource("BoxShape3D_k5g7w")
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
[gd_scene load_steps=4 format=3 uid="uid://8d6qvu6w0cqp"]
|
||||||
|
|
||||||
|
[ext_resource type="Material" uid="uid://bg3dawo5kkosg" path="res://materials/GrassNoiseMaterial.tres" id="1_62h5y"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="BoxMesh_su8i1"]
|
||||||
|
material = ExtResource("1_62h5y")
|
||||||
|
size = Vector3(4.8, 0.2, 3)
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_k5g7w"]
|
||||||
|
size = Vector3(4.8, 0.2, 3)
|
||||||
|
|
||||||
|
[node name="RectanglePlatform" type="StaticBody3D"]
|
||||||
|
collision_layer = 3
|
||||||
|
collision_mask = 0
|
||||||
|
|
||||||
|
[node name="Geometry" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.1, 0)
|
||||||
|
mesh = SubResource("BoxMesh_su8i1")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.1, 0)
|
||||||
|
shape = SubResource("BoxShape3D_k5g7w")
|
||||||
@@ -0,0 +1,600 @@
|
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://0lrpepyejfxg"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://c62j3c1n688uw" path="res://scenes/Wall.tscn" id="1_pf85c"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_p0rqu"]
|
||||||
|
size = Vector3(4, 1, 0.4)
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mr6ph"]
|
||||||
|
albedo_color = Color(0.670588, 0.262745, 0.262745, 1)
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="BoxMesh_237xr"]
|
||||||
|
material = SubResource("StandardMaterial3D_mr6ph")
|
||||||
|
size = Vector3(4, 1, 0.4)
|
||||||
|
|
||||||
|
[node name="Obstacles" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="Wall" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(0.625706, 0, -0.780059, 0, 1, 0, 0.780059, 0, 0.625706, 4.38367, 0, -0.230851)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall2" parent="." instance=ExtResource("1_pf85c")]
|
||||||
|
|
||||||
|
[node name="Wall3" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.367962, 0, -0.929841, 0, 1, 0, 0.929841, 0, -0.367962, 6.83599, 0, 3.24005)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall3"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall3"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall4" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(0.152434, 0, -0.988314, 0, 1, 0, 0.988314, 0, 0.152434, -0.835927, 0, -3.97188)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall4"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall4"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall5" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.327812, 0, -0.944743, 0, 1, 0, 0.944743, 0, -0.327812, 9.64452, 0, -4.22134)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall5"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall5"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall6" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.266549, 0, -0.963822, 0, 1, 0, 0.963822, 0, -0.266549, 5.08324, 0, -8.77616)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall6"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall6"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall7" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.983128, 0, -0.182922, 0, 1, 0, 0.182922, 0, -0.983128, 8.00946, 0, -0.298632)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall7"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall7"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall8" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.755876, 0, -0.654715, 0, 1, 0, 0.654715, 0, -0.755876, 10.0366, 0, -10.6312)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall8"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall8"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall9" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.991202, 0, -0.13236, 0, 1, 0, 0.13236, 0, -0.991202, -5.06147, 0, -4.51615)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall9"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall9"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall10" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.980673, 0, -0.195655, 0, 1, 0, 0.195655, 0, -0.980673, -3.04629, 0, -10.6391)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall10"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall10"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall11" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.605739, 0, 0.795664, 0, 1, 0, -0.795664, 0, -0.605739, -9.30035, 0, -4.21121)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall11"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall11"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall12" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.924812, 0, 0.380425, 0, 1, 0, -0.380425, 0, -0.924812, 0.839184, 0, -7.05027)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall12"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall12"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall13" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(0.825192, 0, -0.564852, 0, 1, 0, 0.564852, 0, 0.825192, -8.35868, 0, 11.0594)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall13"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall13"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall14" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(0.859719, 0, -0.510768, 0, 1, 0, 0.510768, 0, 0.859719, -13.9532, 0, 14.2614)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall14"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall14"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall15" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.0822168, 0, -0.996615, 0, 1, 0, 0.996615, 0, -0.0822168, -5.00445, 0, 13.669)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall15"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall15"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall16" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(0.432747, 0, -0.901516, 0, 1, 0, 0.901516, 0, 0.432747, -14.4395, 0, 8.99451)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall16"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall16"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall17" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.0394692, 0, -0.999221, 0, 1, 0, 0.999221, 0, -0.0394692, -4.48265, 0, 5.71366)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall17"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall17"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall18" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(0.0246939, 0, -0.999695, 0, 1, 0, 0.999695, 0, 0.0246939, -10.1697, 0, 2.67894)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall18"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall18"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall19" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.887703, 0, -0.460417, 0, 1, 0, 0.460417, 0, -0.887703, -4.90868, 0, 9.94208)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall19"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall19"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall20" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.53329, 0, -0.845933, 0, 1, 0, 0.845933, 0, -0.53329, -5.96803, 0, -0.533995)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall20"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall20"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall21" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.910106, 0, -0.414375, 0, 1, 0, 0.414375, 0, -0.910106, -18.6411, 0, 9.70022)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall21"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall21"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall22" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.881658, 0, -0.471889, 0, 1, 0, 0.471889, 0, -0.881658, -18.4899, 0, 3.25593)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall22"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall22"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall23" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.810614, 0, 0.58558, 0, 1, 0, -0.58558, 0, -0.810614, -22.6089, 0, 11.2224)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall23"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall23"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall24" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.99542, 0, 0.0956026, 0, 1, 0, -0.0956026, 0, -0.99542, -13.73, 0, 5.56244)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall24"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall24"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall25" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(0.388995, 0, -0.92124, 0, 1, 0, 0.92124, 0, 0.388995, 19.217, 1.90735e-06, -8.11925)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall25"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall25"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall26" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(0.447275, 0, -0.894397, 0, 1, 0, 0.894397, 0, 0.447275, 12.7794, 1.90735e-06, -8.4489)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall26"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall26"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall27" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.607819, 0, -0.794075, 0, 1, 0, 0.794075, 0, -0.607819, 20.6286, 1.90735e-06, -4.11073)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall27"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall27"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall28" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.123151, 0, -0.992388, 0, 1, 0, 0.992388, 0, -0.123151, 15.2169, 1.90735e-06, -13.1431)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall28"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall28"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall29" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.573262, 0, -0.819372, 0, 1, 0, 0.819372, 0, -0.573262, 25.3674, 1.90735e-06, -10.522)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall29"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall29"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall30" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.519534, 0, -0.85445, 0, 1, 0, 0.85445, 0, -0.519534, 22.2227, 1.90735e-06, -16.149)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall30"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall30"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall31" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.995722, 0, 0.0924053, 0, 1, 0, -0.0924053, 0, -0.995722, 22.7236, 1.90735e-06, -7.19467)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall31"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall31"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall32" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.905895, 0, -0.423504, 0, 1, 0, 0.423504, 0, -0.905895, 27.4943, 1.90735e-06, -16.5814)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall32"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall32"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall33" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.989686, 0, 0.143251, 0, 1, 0, -0.143251, 0, -0.989686, 11.3004, 1.90735e-06, -14.8202)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall33"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall33"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall34" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.996836, 0, 0.0794856, 0, 1, 0, -0.0794856, 0, -0.996836, 14.9105, 1.90735e-06, -20.1605)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall34"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall34"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall35" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.365527, 0, 0.930801, 0, 1, 0, -0.930801, 0, -0.365527, 7.13928, 1.90735e-06, -15.684)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall35"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall35"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall36" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.785835, 0, 0.618436, 0, 1, 0, -0.618436, 0, -0.785835, 17.6687, 1.90735e-06, -15.6472)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall36"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall36"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall37" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(0.625706, 0, -0.780059, 0, 1, 0, 0.780059, 0, 0.625706, -18.8638, 0, -7.46463)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall37"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall37"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall38" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(0.674444, 0, -0.738326, 0, 1, 0, 0.738326, 0, 0.674444, -25.1469, 0, -6.02437)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall38"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall38"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall39" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.367962, 0, -0.929841, 0, 1, 0, 0.929841, 0, -0.367962, -16.4115, 0, -3.99372)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall39"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall39"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall40" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(0.152434, 0, -0.988314, 0, 1, 0, 0.988314, 0, 0.152434, -24.0834, 0, -11.2057)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall40"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall40"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall41" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.327812, 0, -0.944743, 0, 1, 0, 0.944743, 0, -0.327812, -13.603, 0, -11.4551)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall41"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall41"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall42" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.266549, 0, -0.963822, 0, 1, 0, 0.963822, 0, -0.266549, -18.1642, 0, -16.0099)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall42"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall42"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall43" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.983128, 0, -0.182922, 0, 1, 0, 0.182922, 0, -0.983128, -15.238, 0, -7.53241)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall43"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall43"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall44" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.755876, 0, -0.654715, 0, 1, 0, 0.654715, 0, -0.755876, -13.2109, 0, -17.8649)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall44"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall44"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall45" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.991202, 0, -0.13236, 0, 1, 0, 0.13236, 0, -0.991202, -28.309, 0, -11.7499)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall45"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall45"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall46" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(0.625706, 0, -0.780059, 0, 1, 0, 0.780059, 0, 0.625706, 10.0284, 0, 11.3939)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall46"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall46"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall47" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(0.674444, 0, -0.738326, 0, 1, 0, 0.738326, 0, 0.674444, 3.74525, 0, 12.8342)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall47"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall47"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall48" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.367962, 0, -0.929841, 0, 1, 0, 0.929841, 0, -0.367962, 12.4807, 0, 14.8648)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall48"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall48"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall49" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(0.152434, 0, -0.988314, 0, 1, 0, 0.988314, 0, 0.152434, 4.80875, 0, 7.65288)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall49"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall49"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall50" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.327812, 0, -0.944743, 0, 1, 0, 0.944743, 0, -0.327812, 15.2892, 0, 7.40342)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall50"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall50"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall51" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.266549, 0, -0.963822, 0, 1, 0, 0.963822, 0, -0.266549, 10.7279, 0, 2.84861)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall51"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall51"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall52" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.983128, 0, -0.182922, 0, 1, 0, 0.182922, 0, -0.983128, 13.6541, 0, 11.3261)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall52"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall52"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall53" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.755876, 0, -0.654715, 0, 1, 0, 0.654715, 0, -0.755876, 15.6813, 0, 0.993603)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall53"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall53"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
|
|
||||||
|
[node name="Wall54" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(-0.991202, 0, -0.13236, 0, 1, 0, 0.13236, 0, -0.991202, 0.583206, 0, 7.10862)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall54"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall54"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
[gd_scene load_steps=4 format=3 uid="uid://c62j3c1n688uw"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_p0rqu"]
|
||||||
|
size = Vector3(4, 1, 0.4)
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mr6ph"]
|
||||||
|
albedo_color = Color(0.670588, 0.262745, 0.262745, 1)
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="BoxMesh_237xr"]
|
||||||
|
material = SubResource("StandardMaterial3D_mr6ph")
|
||||||
|
size = Vector3(4, 1, 0.4)
|
||||||
|
|
||||||
|
[node name="Wall" type="StaticBody3D"]
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
shape = SubResource("BoxShape3D_p0rqu")
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
|
mesh = SubResource("BoxMesh_237xr")
|
||||||
+263
-24
@@ -1,42 +1,158 @@
|
|||||||
extends Node3D
|
class_name World extends Node3D
|
||||||
|
|
||||||
|
var players: Array
|
||||||
|
|
||||||
|
@onready var score_update_timer: Timer = $ScoreUpdateTimer
|
||||||
|
@onready var pixel_count_compute_shader: PixelCountComputeShader = $PixelCountComputeShader
|
||||||
|
|
||||||
@onready var player1: CharacterBody3D = $Player1
|
|
||||||
@onready var camera: Camera3D = $Camera3D
|
@onready var camera: Camera3D = $Camera3D
|
||||||
@onready var level: Node3D = $Level
|
@onready var level: Node3D = $Level
|
||||||
@onready var world_coloring_viewport: SubViewport = $WorldColoringViewport
|
@onready var world_coloring_viewport: SubViewport = $WorldColoringViewport
|
||||||
@onready var world_coloring_player1_texture_rect: TextureRect = $WorldColoringViewport/Player1TextureRect
|
@onready var music_stream_player: AudioStreamPlayer = $MusicAudioStreamPlayer
|
||||||
@onready var world_coloring_player1_sprite: Sprite2D = $WorldColoringViewport/Player1Sprite
|
|
||||||
@onready var world_coloring_player1_bomb_sprite: Sprite2D = $WorldColoringViewport/Player1BombSprite
|
|
||||||
|
|
||||||
var camera_offset: Vector3;
|
var player_scene = preload("res://entities/Player.tscn")
|
||||||
|
var player_override_material = preload("res://materials/PlayerMaterial.tres")
|
||||||
|
|
||||||
|
var level_scenes : Array = [
|
||||||
|
preload("res://levels/BasicLevel.tscn"),
|
||||||
|
preload("res://levels/Platforms.tscn"),
|
||||||
|
preload("res://levels/LotsaHoles.tscn")
|
||||||
|
]
|
||||||
|
|
||||||
|
var level_index = 0
|
||||||
|
var last_level_index = -1
|
||||||
|
|
||||||
|
const GAME_DURATION_SECONDS = 20
|
||||||
|
|
||||||
|
var camera_position: Vector3;
|
||||||
var world_coloring_material: ShaderMaterial
|
var world_coloring_material: ShaderMaterial
|
||||||
|
var world_plane: Plane = Plane(Vector3.UP, Vector3.ZERO)
|
||||||
|
var spawn_points: Array = Array()
|
||||||
|
|
||||||
|
enum GameState {
|
||||||
|
Startup,
|
||||||
|
LevelSelect,
|
||||||
|
Running,
|
||||||
|
Finished
|
||||||
|
}
|
||||||
|
|
||||||
|
var time_left = GAME_DURATION_SECONDS
|
||||||
|
var game_state : GameState = GameState.Startup
|
||||||
|
var game_state_last : GameState = GameState.Finished
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
# Called when the node enters the scene tree for the first time.
|
||||||
func _ready():
|
func _ready():
|
||||||
camera_offset = camera.global_position - player1.global_position
|
camera_position = camera.global_position
|
||||||
|
|
||||||
world_coloring_material = load("res://materials/WorldColoringMaterialPass.tres")
|
score_update_timer.connect("timeout", update_score)
|
||||||
world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture())
|
|
||||||
|
|
||||||
world_coloring_player1_sprite.modulate = player1.color
|
load_level()
|
||||||
world_coloring_player1_bomb_sprite.modulate = player1.color
|
|
||||||
|
|
||||||
player1.connect("bomb_triggered", player_bomb_triggered)
|
|
||||||
|
|
||||||
apply_world_coloring_recursive(level)
|
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
func _process(_delta):
|
func _process(_delta):
|
||||||
camera.global_position = player1.global_position + camera_offset
|
if game_state_last != game_state:
|
||||||
pass
|
if game_state == GameState.Startup:
|
||||||
|
on_game_startup()
|
||||||
|
elif game_state == GameState.LevelSelect:
|
||||||
|
on_game_level_select()
|
||||||
|
elif game_state == GameState.Running:
|
||||||
|
on_game_running()
|
||||||
|
elif game_state == GameState.Finished:
|
||||||
|
on_game_finished()
|
||||||
|
game_state_last = game_state
|
||||||
|
|
||||||
|
if game_state == GameState.Running:
|
||||||
|
time_left -= _delta;
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
|
||||||
|
if time_left <= 0:
|
||||||
|
game_state = GameState.Finished
|
||||||
|
|
||||||
|
var player1 : Player = players[0]
|
||||||
|
var player_center = Vector3.ZERO
|
||||||
|
var player_coords_rect : Rect2 = Rect2(
|
||||||
|
player1.global_position.x,
|
||||||
|
player1.global_position.z,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
|
||||||
|
for player: CharacterBody3D in players:
|
||||||
|
player_center += player.global_position
|
||||||
|
player_coords_rect = player_coords_rect.expand(Vector2(player.global_position.x, player.global_position.z))
|
||||||
|
|
||||||
|
player_center = player_center / players.size()
|
||||||
|
player_center.y = 0
|
||||||
|
|
||||||
|
var view_width = player_coords_rect.size.x + 10
|
||||||
|
var view_height = player_coords_rect.size.y + 15
|
||||||
|
var camera_dist = max (view_width, view_height) * 0.5 / sin(deg_to_rad(camera.fov) * 0.5)
|
||||||
|
|
||||||
|
var camera_direction : Vector3 = -camera.basis.z
|
||||||
|
camera_position = player_center - camera_direction * camera_dist
|
||||||
|
|
||||||
|
camera.global_position = camera_position
|
||||||
|
|
||||||
func _physics_process(_delta):
|
func _physics_process(_delta):
|
||||||
world_coloring_player1_sprite.global_position = player_position_to_world_coloring_position(player1.global_position)
|
if level_index != last_level_index:
|
||||||
|
load_level()
|
||||||
|
|
||||||
world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture())
|
world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture())
|
||||||
|
|
||||||
func player_position_to_world_coloring_position(player_position: Vector3):
|
if game_state != GameState.Running:
|
||||||
var result = Vector2 (player_position.x * 10 + 500, player_position.z * 10 + 500)
|
return
|
||||||
return result;
|
|
||||||
|
for player: Player in players:
|
||||||
|
if player.state == Player.PlayerState.Dead:
|
||||||
|
var occupied = true
|
||||||
|
var spawn_point
|
||||||
|
|
||||||
|
while occupied:
|
||||||
|
spawn_point = spawn_points.pick_random() as SpawnPoint
|
||||||
|
if not spawn_point.is_occupied():
|
||||||
|
occupied = false
|
||||||
|
|
||||||
|
player.global_position = spawn_point.global_position + Vector3.UP * 2
|
||||||
|
player.state = Player.PlayerState.Alive
|
||||||
|
spawn_point.near_players.append(player)
|
||||||
|
|
||||||
|
func _unhandled_input(event):
|
||||||
|
if game_state == GameState.Startup:
|
||||||
|
if event.is_action_pressed("ui_accept"):
|
||||||
|
game_state = GameState.Running
|
||||||
|
|
||||||
|
func load_level():
|
||||||
|
print("Loading level " + str(level_scenes[level_index]))
|
||||||
|
|
||||||
|
for node in level.get_children():
|
||||||
|
node.queue_free()
|
||||||
|
|
||||||
|
var level_instance = level_scenes[level_index].instantiate()
|
||||||
|
print("Loaded level " + level_instance.name)
|
||||||
|
level.add_child(level_instance)
|
||||||
|
|
||||||
|
spawn_points.clear()
|
||||||
|
for node in $Players.get_children():
|
||||||
|
node.queue_free()
|
||||||
|
|
||||||
|
find_spawn_points(level)
|
||||||
|
print("Found " + str(spawn_points.size()) + " spawn points.")
|
||||||
|
spawn_players()
|
||||||
|
apply_world_coloring_recursive(level)
|
||||||
|
|
||||||
|
last_level_index = level_index
|
||||||
|
|
||||||
|
func find_spawn_points (node: Node3D):
|
||||||
|
for child in node.get_children():
|
||||||
|
if child.is_queued_for_deletion():
|
||||||
|
continue
|
||||||
|
|
||||||
|
var spawn_point = child as SpawnPoint
|
||||||
|
if spawn_point:
|
||||||
|
spawn_points.append(spawn_point)
|
||||||
|
|
||||||
|
find_spawn_points(child)
|
||||||
|
|
||||||
func apply_world_coloring_recursive (node):
|
func apply_world_coloring_recursive (node):
|
||||||
for child in node.get_children():
|
for child in node.get_children():
|
||||||
@@ -53,6 +169,129 @@ func assign_world_coloring_pass(mesh_instance: MeshInstance3D) -> void:
|
|||||||
|
|
||||||
material.next_pass = world_coloring_material
|
material.next_pass = world_coloring_material
|
||||||
|
|
||||||
func player_bomb_triggered(player):
|
func update_score():
|
||||||
world_coloring_player1_bomb_sprite.global_position = player_position_to_world_coloring_position(player.global_position)
|
pixel_count_compute_shader.recalculate_score()
|
||||||
world_coloring_player1_bomb_sprite.visible = true
|
|
||||||
|
players[0].score = pixel_count_compute_shader.red_score
|
||||||
|
|
||||||
|
if players.size() > 1:
|
||||||
|
players[1].score = pixel_count_compute_shader.blue_score
|
||||||
|
|
||||||
|
func spawn_players():
|
||||||
|
var players_node = $Players
|
||||||
|
|
||||||
|
var player1: Player = player_scene.instantiate()
|
||||||
|
player1.name = "Red"
|
||||||
|
player1.color = Color(1, 0, 0, 1)
|
||||||
|
player1.coloring_sprite_path = world_coloring_viewport.get_node("Player1Sprite").get_path()
|
||||||
|
player1.coloring_bomb_sprite_path = world_coloring_viewport.get_node("Player1BombSprite").get_path()
|
||||||
|
player1.move_right_action += "_p1"
|
||||||
|
player1.move_left_action += "_p1"
|
||||||
|
player1.move_up_action += "_p1"
|
||||||
|
player1.move_down_action += "_p1"
|
||||||
|
player1.dash_action += "_p1"
|
||||||
|
player1.bomb_action += "_p1"
|
||||||
|
|
||||||
|
var player2: Player = player_scene.instantiate()
|
||||||
|
player2.name = "Blue"
|
||||||
|
player2.color = Color(0, 0, 1, 1)
|
||||||
|
player2.coloring_sprite_path = world_coloring_viewport.get_node("Player2Sprite").get_path()
|
||||||
|
player2.coloring_bomb_sprite_path = world_coloring_viewport.get_node("Player2BombSprite").get_path()
|
||||||
|
player2.move_right_action += "_p2"
|
||||||
|
player2.move_left_action += "_p2"
|
||||||
|
player2.move_up_action += "_p2"
|
||||||
|
player2.move_down_action += "_p2"
|
||||||
|
player2.dash_action += "_p2"
|
||||||
|
player2.bomb_action += "_p2"
|
||||||
|
|
||||||
|
players_node.add_child(player1)
|
||||||
|
players_node.add_child(player2)
|
||||||
|
|
||||||
|
players.clear()
|
||||||
|
|
||||||
|
players.append(player1)
|
||||||
|
players.append(player2)
|
||||||
|
|
||||||
|
var player1_material : StandardMaterial3D = player_override_material.duplicate()
|
||||||
|
player1_material.albedo_color = player1.color
|
||||||
|
player1.geometry.set_surface_override_material(0, player1_material)
|
||||||
|
player1.name = "Red"
|
||||||
|
|
||||||
|
var player2_material : StandardMaterial3D = player_override_material.duplicate()
|
||||||
|
player2_material.albedo_color = player2.color
|
||||||
|
player2.geometry.set_surface_override_material(0, player2_material)
|
||||||
|
player2.name = "Blue"
|
||||||
|
|
||||||
|
if players.size() == 1:
|
||||||
|
world_coloring_material = load("res://materials/WorldColoringMaterialPass.tres")
|
||||||
|
world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture())
|
||||||
|
else:
|
||||||
|
world_coloring_material = load("res://materials/WorldColoringMaterialPassVersus.tres")
|
||||||
|
world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture())
|
||||||
|
|
||||||
|
for player: Player in players:
|
||||||
|
player.state = player.PlayerState.Dead
|
||||||
|
|
||||||
|
func remove_players():
|
||||||
|
var players_node = $Players
|
||||||
|
|
||||||
|
for player: Player in players_node.get_children():
|
||||||
|
player.queue_free()
|
||||||
|
|
||||||
|
players.clear()
|
||||||
|
|
||||||
|
func on_game_startup():
|
||||||
|
print("Switching to startup")
|
||||||
|
stop_gameplay()
|
||||||
|
|
||||||
|
music_stream_player.stop()
|
||||||
|
|
||||||
|
world_coloring_viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONCE
|
||||||
|
world_coloring_viewport.render_target_update_mode = SubViewport.UPDATE_ONCE
|
||||||
|
|
||||||
|
func on_game_level_select():
|
||||||
|
print("Switching to level select")
|
||||||
|
stop_gameplay()
|
||||||
|
|
||||||
|
music_stream_player.stop()
|
||||||
|
|
||||||
|
world_coloring_viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONCE
|
||||||
|
world_coloring_viewport.render_target_update_mode = SubViewport.UPDATE_ONCE
|
||||||
|
|
||||||
|
func on_game_running():
|
||||||
|
print("Switching to gameplay")
|
||||||
|
start_gameplay()
|
||||||
|
|
||||||
|
music_stream_player.play()
|
||||||
|
|
||||||
|
world_coloring_viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_NEVER
|
||||||
|
world_coloring_viewport.render_target_update_mode = SubViewport.UPDATE_ALWAYS
|
||||||
|
|
||||||
|
func on_game_finished():
|
||||||
|
print("Switching to finished")
|
||||||
|
stop_gameplay()
|
||||||
|
|
||||||
|
world_coloring_viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_NEVER
|
||||||
|
world_coloring_viewport.render_target_update_mode = SubViewport.UPDATE_ONCE
|
||||||
|
|
||||||
|
func stop_gameplay():
|
||||||
|
print("Stopping gameplay")
|
||||||
|
for player: Player in players:
|
||||||
|
player.coloring_sprite.visible = false
|
||||||
|
player.coloring_bomb_sprite.visible = false
|
||||||
|
player.set_process(false)
|
||||||
|
player.set_process_input(false)
|
||||||
|
player.set_physics_process(false)
|
||||||
|
|
||||||
|
func start_gameplay():
|
||||||
|
print("Starting gameplay")
|
||||||
|
time_left = GAME_DURATION_SECONDS
|
||||||
|
|
||||||
|
for player: Player in players:
|
||||||
|
player.energy = 100;
|
||||||
|
player.coloring_sprite.visible = true
|
||||||
|
player.coloring_bomb_sprite.visible = false
|
||||||
|
player.set_process(true)
|
||||||
|
player.set_process_input(true)
|
||||||
|
player.set_physics_process(true)
|
||||||
|
player.state = Player.PlayerState.Dead
|
||||||
|
|||||||
+38
-108
@@ -1,60 +1,38 @@
|
|||||||
[gd_scene load_steps=16 format=3 uid="uid://b1nm5h3yccr16"]
|
[gd_scene load_steps=11 format=3 uid="uid://b1nm5h3yccr16"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://entities/Player.gd" id="1_ca7jo"]
|
|
||||||
[ext_resource type="Script" path="res://scenes/World.gd" id="1_gtcjp"]
|
[ext_resource type="Script" path="res://scenes/World.gd" id="1_gtcjp"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cek45oeqv3jvj" path="res://assets/textures/test_world_color_texture_viewport.png" id="3_bvxb7"]
|
[ext_resource type="AudioStream" uid="uid://5da1smwywxdk" path="res://assets/music/Run-Amok(chosic.com).mp3" id="3_owwdt"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bnsrnuuq28p4d" path="res://assets/textures/player_draw_mask.png" id="4_dipd5"]
|
[ext_resource type="Texture2D" uid="uid://bnsrnuuq28p4d" path="res://assets/textures/player_draw_mask.png" id="4_dipd5"]
|
||||||
[ext_resource type="Material" uid="uid://bg3dawo5kkosg" path="res://materials/GrassNoiseMaterial.tres" id="4_pseda"]
|
|
||||||
[ext_resource type="Texture2D" uid="uid://vcebfpqo2ko7" path="res://assets/textures/player_bomb_mask.png" id="5_17c1g"]
|
[ext_resource type="Texture2D" uid="uid://vcebfpqo2ko7" path="res://assets/textures/player_bomb_mask.png" id="5_17c1g"]
|
||||||
|
[ext_resource type="PackedScene" path="res://scenes/PixelCountComputeShader.tscn" id="6_75vqy"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://87rik2jwk38y" path="res://levels/Platforms.tscn" id="6_n6e0v"]
|
||||||
|
|
||||||
[sub_resource type="BoxMesh" id="BoxMesh_yle83"]
|
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_5gauv"]
|
||||||
size = Vector3(0.24, 0.75, 0.24)
|
sky_energy_multiplier = 5.0
|
||||||
|
|
||||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_rwgp3"]
|
[sub_resource type="Sky" id="Sky_qfldx"]
|
||||||
height = 0.75
|
sky_material = SubResource("ProceduralSkyMaterial_5gauv")
|
||||||
radius = 0.15
|
|
||||||
|
|
||||||
[sub_resource type="Environment" id="Environment_f3jci"]
|
[sub_resource type="Environment" id="Environment_f3jci"]
|
||||||
|
background_mode = 2
|
||||||
|
sky = SubResource("Sky_qfldx")
|
||||||
ambient_light_source = 3
|
ambient_light_source = 3
|
||||||
ambient_light_color = Color(0.521569, 0.521569, 0.521569, 1)
|
|
||||||
ambient_light_energy = 2.64
|
ambient_light_energy = 2.64
|
||||||
|
|
||||||
[sub_resource type="World3D" id="World3D_s7kgt"]
|
[sub_resource type="World3D" id="World3D_s7kgt"]
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_p0rqu"]
|
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mr6ph"]
|
|
||||||
albedo_color = Color(1, 0.137255, 1, 1)
|
|
||||||
|
|
||||||
[sub_resource type="BoxMesh" id="BoxMesh_237xr"]
|
|
||||||
material = SubResource("StandardMaterial3D_mr6ph")
|
|
||||||
|
|
||||||
[sub_resource type="BoxMesh" id="BoxMesh_bwn4a"]
|
|
||||||
material = ExtResource("4_pseda")
|
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_mneaf"]
|
|
||||||
size = Vector3(100, 2, 100)
|
|
||||||
|
|
||||||
[node name="World" type="Node3D"]
|
[node name="World" type="Node3D"]
|
||||||
script = ExtResource("1_gtcjp")
|
script = ExtResource("1_gtcjp")
|
||||||
|
|
||||||
[node name="Player1" type="CharacterBody3D" parent="."]
|
[node name="ScoreUpdateTimer" type="Timer" parent="."]
|
||||||
collision_mask = 3
|
wait_time = 0.33
|
||||||
script = ExtResource("1_ca7jo")
|
autostart = true
|
||||||
move_right_action = "move_right_p1"
|
|
||||||
move_left_action = "move_left_p1"
|
|
||||||
move_down_action = "move_down_p1"
|
|
||||||
move_up_action = "move_up_p1"
|
|
||||||
dash_action = "dash_p1"
|
|
||||||
bomb_action = "bomb_p1"
|
|
||||||
|
|
||||||
[node name="Geometry" type="MeshInstance3D" parent="Player1"]
|
[node name="PixelCountComputeShader" parent="." instance=ExtResource("6_75vqy")]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.472544, 0)
|
paint_viewport_path = NodePath("../WorldColoringViewport")
|
||||||
mesh = SubResource("BoxMesh_yle83")
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Player1"]
|
[node name="MusicAudioStreamPlayer" type="AudioStreamPlayer" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.496337, 0)
|
stream = ExtResource("3_owwdt")
|
||||||
shape = SubResource("CylinderShape3D_rwgp3")
|
|
||||||
|
|
||||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||||
environment = SubResource("Environment_f3jci")
|
environment = SubResource("Environment_f3jci")
|
||||||
@@ -75,83 +53,35 @@ own_world_3d = true
|
|||||||
world_3d = SubResource("World3D_s7kgt")
|
world_3d = SubResource("World3D_s7kgt")
|
||||||
transparent_bg = true
|
transparent_bg = true
|
||||||
handle_input_locally = false
|
handle_input_locally = false
|
||||||
size = Vector2i(1000, 1000)
|
size = Vector2i(1024, 1024)
|
||||||
render_target_clear_mode = 1
|
render_target_clear_mode = 1
|
||||||
render_target_update_mode = 4
|
render_target_update_mode = 4
|
||||||
|
|
||||||
[node name="TextureRect" type="TextureRect" parent="WorldColoringViewport"]
|
|
||||||
visible = false
|
|
||||||
anchors_preset = 15
|
|
||||||
anchor_right = 1.0
|
|
||||||
anchor_bottom = 1.0
|
|
||||||
grow_horizontal = 2
|
|
||||||
grow_vertical = 2
|
|
||||||
texture = ExtResource("3_bvxb7")
|
|
||||||
|
|
||||||
[node name="Player1TextureRect" type="TextureRect" parent="WorldColoringViewport"]
|
|
||||||
visible = false
|
|
||||||
anchors_preset = 8
|
|
||||||
anchor_left = 0.5
|
|
||||||
anchor_top = 0.5
|
|
||||||
anchor_right = 0.5
|
|
||||||
anchor_bottom = 0.5
|
|
||||||
offset_left = -20.0
|
|
||||||
offset_top = -20.0
|
|
||||||
offset_right = 20.0
|
|
||||||
offset_bottom = 20.0
|
|
||||||
grow_horizontal = 2
|
|
||||||
grow_vertical = 2
|
|
||||||
size_flags_horizontal = 4
|
|
||||||
size_flags_vertical = 4
|
|
||||||
texture = ExtResource("4_dipd5")
|
|
||||||
|
|
||||||
[node name="Player1Sprite" type="Sprite2D" parent="WorldColoringViewport"]
|
[node name="Player1Sprite" type="Sprite2D" parent="WorldColoringViewport"]
|
||||||
|
modulate = Color(0.117647, 0.564706, 1, 1)
|
||||||
|
position = Vector2(500, 500)
|
||||||
texture = ExtResource("4_dipd5")
|
texture = ExtResource("4_dipd5")
|
||||||
|
|
||||||
[node name="Player1BombSprite" type="Sprite2D" parent="WorldColoringViewport"]
|
[node name="Player1BombSprite" type="Sprite2D" parent="WorldColoringViewport"]
|
||||||
|
visible = false
|
||||||
|
modulate = Color(0.117647, 0.564706, 1, 1)
|
||||||
|
position = Vector2(500, 500)
|
||||||
texture = ExtResource("5_17c1g")
|
texture = ExtResource("5_17c1g")
|
||||||
|
|
||||||
|
[node name="Player2Sprite" type="Sprite2D" parent="WorldColoringViewport"]
|
||||||
|
modulate = Color(0.878431, 0, 0.980392, 1)
|
||||||
|
position = Vector2(530, 500)
|
||||||
|
texture = ExtResource("4_dipd5")
|
||||||
|
|
||||||
|
[node name="Player2BombSprite" type="Sprite2D" parent="WorldColoringViewport"]
|
||||||
|
visible = false
|
||||||
|
modulate = Color(0.878431, 0, 0.980392, 1)
|
||||||
|
position = Vector2(530, 500)
|
||||||
|
texture = ExtResource("5_17c1g")
|
||||||
|
|
||||||
|
[node name="Players" type="Node3D" parent="."]
|
||||||
|
|
||||||
[node name="Level" type="Node3D" parent="."]
|
[node name="Level" type="Node3D" parent="."]
|
||||||
|
|
||||||
[node name="Box" type="StaticBody3D" parent="Level"]
|
[node name="Platforms" parent="Level" instance=ExtResource("6_n6e0v")]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.38367, 0, 2.83298)
|
transform = Transform3D(1, 3.19189e-15, 0, -2.16493e-15, 1, -9.99201e-16, 0, -1.33227e-15, 1, -6.76534, 0, 5.93242)
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Level/Box"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
|
||||||
shape = SubResource("BoxShape3D_p0rqu")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Level/Box"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
|
||||||
mesh = SubResource("BoxMesh_237xr")
|
|
||||||
|
|
||||||
[node name="Platform2" type="StaticBody3D" parent="Level"]
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Level/Platform2"]
|
|
||||||
transform = Transform3D(101, 0, 0, 0, 2, 0, 0, 0, 101, 0, -1, 0)
|
|
||||||
mesh = SubResource("BoxMesh_bwn4a")
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Level/Platform2"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
|
|
||||||
shape = SubResource("BoxShape3D_mneaf")
|
|
||||||
|
|
||||||
[node name="BoxNorthEast" type="StaticBody3D" parent="Level"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -50, 0, -50)
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Level/BoxNorthEast"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
|
||||||
shape = SubResource("BoxShape3D_p0rqu")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Level/BoxNorthEast"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
|
||||||
mesh = SubResource("BoxMesh_237xr")
|
|
||||||
|
|
||||||
[node name="BoxSouthWest" type="StaticBody3D" parent="Level"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 50, 0, 50)
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Level/BoxSouthWest"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
|
||||||
shape = SubResource("BoxShape3D_p0rqu")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Level/BoxSouthWest"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
|
||||||
mesh = SubResource("BoxMesh_237xr")
|
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
[gd_resource type="Theme" load_steps=2 format=3 uid="uid://bb8mjy6l7umui"]
|
||||||
|
|
||||||
|
[ext_resource type="FontFile" uid="uid://bf6q51e8x2s1h" path="res://assets/fonts/Bangers-Regular/Bangers-Regular.ttf" id="1_k4p25"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
default_font = ExtResource("1_k4p25")
|
||||||
|
default_font_size = 30
|
||||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 121 KiB |
@@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://78p6eeqptp1e"
|
||||||
|
path="res://.godot/imported/Icon.png-4e0acb046e84f1b83d0c49e76b0ec5a4.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://ui/Icon.png"
|
||||||
|
dest_files=["res://.godot/imported/Icon.png-4e0acb046e84f1b83d0c49e76b0ec5a4.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
[gd_resource type="ButtonGroup" format=3 uid="uid://ctqarf04xdj1"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
Reference in New Issue
Block a user