mirror of
https://github.com/godotengine/godot-demo-projects.git
synced 2026-01-05 10:09:47 +03:00
Compare commits
119 Commits
3.1-c34a2b
...
3.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ea5b868fc7 | ||
|
|
a6ae6f64be | ||
|
|
507b8c6cf6 | ||
|
|
e59d96ef7a | ||
|
|
19584aae6a | ||
|
|
342f27e327 | ||
|
|
4d10544dd9 | ||
|
|
86944d5236 | ||
|
|
827d67b2ab | ||
|
|
177884ff19 | ||
|
|
87f42b77e0 | ||
|
|
b0e1cc0227 | ||
|
|
7af4d281b9 | ||
|
|
c270db0635 | ||
|
|
746928b623 | ||
|
|
b0b63e80f5 | ||
|
|
7421736568 | ||
|
|
db6967868f | ||
|
|
49a01d6f87 | ||
|
|
ff10a807d0 | ||
|
|
704ebeec81 | ||
|
|
60f515eaf9 | ||
|
|
3eeba859b1 | ||
|
|
9218f88723 | ||
|
|
375d5d13d2 | ||
|
|
c9d3646d45 | ||
|
|
9975c95065 | ||
|
|
c90a251445 | ||
|
|
cd7c652975 | ||
|
|
e5ee4a5971 | ||
|
|
729be3461d | ||
|
|
abf9d68bf4 | ||
|
|
67a490ab50 | ||
|
|
f07c7091fc | ||
|
|
ac882369bc | ||
|
|
6899d44615 | ||
|
|
84c8d6ef69 | ||
|
|
691f1d94d6 | ||
|
|
cb5906aea3 | ||
|
|
237a8654b0 | ||
|
|
4f5f0ec1a9 | ||
|
|
e3fd4c662c | ||
|
|
ff93de81bb | ||
|
|
28c3103132 | ||
|
|
958f686e12 | ||
|
|
edb8372db8 | ||
|
|
de57f45049 | ||
|
|
4ec9d7921b | ||
|
|
a5b8cd11d9 | ||
|
|
0746c063b4 | ||
|
|
9e197b8c20 | ||
|
|
2afbeef96f | ||
|
|
9c17c25343 | ||
|
|
357620b336 | ||
|
|
33494c4592 | ||
|
|
76d43cf23a | ||
|
|
97f9632be4 | ||
|
|
463da9948f | ||
|
|
04d86775da | ||
|
|
c6922db2a1 | ||
|
|
43dcf5c1e7 | ||
|
|
d19c746231 | ||
|
|
aca3ea4749 | ||
|
|
a45b84a5ad | ||
|
|
5bdd178d85 | ||
|
|
b93d9028a9 | ||
|
|
566c7e15f8 | ||
|
|
eb814782c6 | ||
|
|
029706d4fb | ||
|
|
f922bcb8c7 | ||
|
|
2490d9ae45 | ||
|
|
f9b9b86949 | ||
|
|
79f7554bc3 | ||
|
|
7e96ba1a6a | ||
|
|
861f0418f0 | ||
|
|
8a6b1f87ba | ||
|
|
c5a37ea618 | ||
|
|
c0f4bad011 | ||
|
|
7658e62636 | ||
|
|
b1953be73f | ||
|
|
5bc48e2080 | ||
|
|
2c6df4ed79 | ||
|
|
015cb6e64c | ||
|
|
617896737e | ||
|
|
50d5a118c9 | ||
|
|
e5e20a57a1 | ||
|
|
72ff4543c8 | ||
|
|
f863ebe52c | ||
|
|
4ce086a745 | ||
|
|
6a1fe3b48a | ||
|
|
990042e3c5 | ||
|
|
53fc37e64e | ||
|
|
de309f0544 | ||
|
|
c101b13b27 | ||
|
|
54ae746654 | ||
|
|
1ca3204e0a | ||
|
|
d191bf5558 | ||
|
|
61ea666d69 | ||
|
|
ebdb732fc8 | ||
|
|
ee3dac1635 | ||
|
|
85afe1bc9a | ||
|
|
1ae9f1b549 | ||
|
|
61ea89e836 | ||
|
|
0d40b69c19 | ||
|
|
36c9ecdfa8 | ||
|
|
974e506371 | ||
|
|
3bf7046184 | ||
|
|
a2e7bf2b36 | ||
|
|
fa09138422 | ||
|
|
2c5b4a48d0 | ||
|
|
82d9684caf | ||
|
|
a527318768 | ||
|
|
7e37b4162f | ||
|
|
9adc81ce7f | ||
|
|
092cf6fc03 | ||
|
|
7ad43829ef | ||
|
|
11425f2a6a | ||
|
|
db411004b5 | ||
|
|
a159361a2f |
6
.editorconfig
Normal file
6
.editorconfig
Normal file
@@ -0,0 +1,6 @@
|
||||
# Top-most EditorConfig file.
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
# Normalize EOL for all files that Git considers text files.
|
||||
* text=auto eol=lf
|
||||
2
.github/FUNDING.yml
vendored
Normal file
2
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
patreon: godotengine
|
||||
custom: https://godotengine.org/donate
|
||||
18
.github/ISSUE_TEMPLATE.md
vendored
Normal file
18
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
<!-- Please search existing issues for potential duplicates before filing yours:
|
||||
https://github.com/godotengine/godot-demo-projects/issues?q=is%3Aissue
|
||||
-->
|
||||
|
||||
**Which demo project is affected:**
|
||||
<!-- Specify the project name or path. -->
|
||||
|
||||
|
||||
**OS/device including version:**
|
||||
<!-- Specify GPU model and drivers if graphics-related. -->
|
||||
|
||||
|
||||
**Issue description:**
|
||||
<!-- What happened, and what was expected. -->
|
||||
|
||||
|
||||
**Screenshots of issue:**
|
||||
<!-- Drag in an image, or link in the form of "![]()". If not relevant, remove this section. -->
|
||||
19
.github/workflows/static_checks.yml
vendored
Normal file
19
.github/workflows/static_checks.yml
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
name: Static Checks
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
format:
|
||||
name: File formatting (file_format.sh)
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update -qq
|
||||
sudo apt-get install -qq dos2unix recode
|
||||
|
||||
- name: File formatting checks (file_format.sh)
|
||||
run: |
|
||||
bash ./file_format.sh
|
||||
11
.gitignore
vendored
11
.gitignore
vendored
@@ -1,11 +1,22 @@
|
||||
# Godot 4+ specific ignores
|
||||
.godot/
|
||||
|
||||
# Godot-specific ignores
|
||||
.import/
|
||||
export.cfg
|
||||
export_presets.cfg
|
||||
# Dummy HTML5 export presets file for continuous integration
|
||||
!.github/dist/export_presets.cfg
|
||||
|
||||
# Imported translations (automatically generated from CSV files)
|
||||
*.translation
|
||||
|
||||
# Mono-specific ignores
|
||||
.mono/
|
||||
data_*/
|
||||
mono_crash.*.json
|
||||
|
||||
# System/tool-specific ignores
|
||||
.directory
|
||||
.DS_Store
|
||||
*~
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
extends Button
|
||||
|
||||
func _on_Button_pressed() -> void:
|
||||
if Input.is_mouse_button_pressed(BUTTON_LEFT):
|
||||
print("Left mouse button")
|
||||
if Input.is_mouse_button_pressed(BUTTON_RIGHT):
|
||||
print("Right mouse button")
|
||||
@@ -7,6 +7,7 @@ func show_message(text):
|
||||
$MessageLabel.show()
|
||||
$MessageTimer.start()
|
||||
|
||||
|
||||
func show_game_over():
|
||||
show_message("Game Over")
|
||||
yield($MessageTimer, "timeout")
|
||||
@@ -15,12 +16,15 @@ func show_game_over():
|
||||
yield(get_tree().create_timer(1), 'timeout')
|
||||
$StartButton.show()
|
||||
|
||||
|
||||
func update_score(score):
|
||||
$ScoreLabel.text = str(score)
|
||||
|
||||
|
||||
func _on_StartButton_pressed():
|
||||
$StartButton.hide()
|
||||
emit_signal("start_game")
|
||||
|
||||
|
||||
func _on_MessageTimer_timeout():
|
||||
$MessageLabel.hide()
|
||||
$MessageLabel.hide()
|
||||
|
||||
@@ -4,21 +4,17 @@
|
||||
[ext_resource path="res://fonts/Xolonium-Regular.ttf" type="DynamicFontData" id=2]
|
||||
|
||||
[sub_resource type="DynamicFont" id=1]
|
||||
|
||||
size = 64
|
||||
font_data = ExtResource( 2 )
|
||||
|
||||
[sub_resource type="DynamicFont" id=2]
|
||||
|
||||
size = 64
|
||||
font_data = ExtResource( 2 )
|
||||
|
||||
[sub_resource type="InputEventAction" id=3]
|
||||
|
||||
action = "ui_select"
|
||||
|
||||
[sub_resource type="ShortCut" id=4]
|
||||
|
||||
shortcut = SubResource( 3 )
|
||||
|
||||
[node name="HUD" type="CanvasLayer"]
|
||||
@@ -57,6 +53,5 @@ text = "Start"
|
||||
|
||||
[node name="MessageTimer" type="Timer" parent="."]
|
||||
one_shot = true
|
||||
|
||||
[connection signal="pressed" from="StartButton" to="." method="_on_StartButton_pressed"]
|
||||
[connection signal="timeout" from="MessageTimer" to="." method="_on_MessageTimer_timeout"]
|
||||
|
||||
@@ -6,6 +6,7 @@ var score
|
||||
func _ready():
|
||||
randomize()
|
||||
|
||||
|
||||
func game_over():
|
||||
$ScoreTimer.stop()
|
||||
$MobTimer.stop()
|
||||
@@ -13,6 +14,7 @@ func game_over():
|
||||
$Music.stop()
|
||||
$DeathSound.play()
|
||||
|
||||
|
||||
func new_game():
|
||||
score = 0
|
||||
$Player.start($StartPosition.position)
|
||||
@@ -21,20 +23,23 @@ func new_game():
|
||||
$HUD.show_message("Get Ready")
|
||||
$Music.play()
|
||||
|
||||
|
||||
func _on_MobTimer_timeout():
|
||||
$MobPath/MobSpawnLocation.offset = randi()
|
||||
var mob = Mob.instance()
|
||||
add_child(mob)
|
||||
var direction = $MobPath/MobSpawnLocation.rotation + PI/2
|
||||
var direction = $MobPath/MobSpawnLocation.rotation + PI / 2
|
||||
mob.position = $MobPath/MobSpawnLocation.position
|
||||
direction += rand_range(-PI/4, PI/4)
|
||||
direction += rand_range(-PI / 4, PI / 4)
|
||||
mob.rotation = direction
|
||||
mob.linear_velocity = Vector2(rand_range(mob.min_speed, mob.max_speed), 0).rotated(direction)
|
||||
|
||||
|
||||
func _on_ScoreTimer_timeout():
|
||||
score += 1
|
||||
$HUD.update_score(score)
|
||||
|
||||
|
||||
func _on_StartTimer_timeout():
|
||||
$MobTimer.start()
|
||||
$ScoreTimer.start()
|
||||
$ScoreTimer.start()
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
[sub_resource type="Curve2D" id=1]
|
||||
_data = {
|
||||
"points": PoolVector2Array( 0, 0, 0, 0, -0.901337, 0.225891, 0, 0, 0, 0, 480.262, 1.29041, 0, 0, 0, 0, 481.327, 700.681, 0, 0, 0, 0, 0.163177, 698.552, 0, 0, 0, 0, -0.901337, 0.225891 )
|
||||
"points": PoolVector2Array( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 480, 720, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0 )
|
||||
}
|
||||
|
||||
[node name="Main" type="Node"]
|
||||
@@ -19,7 +19,7 @@ Mob = ExtResource( 2 )
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
color = Color( 0.223529, 0.317647, 0.368627, 1 )
|
||||
color = Color( 0.219608, 0.372549, 0.380392, 1 )
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource( 3 )]
|
||||
|
||||
@@ -39,8 +39,6 @@ position = Vector2( 240, 450 )
|
||||
curve = SubResource( 1 )
|
||||
|
||||
[node name="MobSpawnLocation" type="PathFollow2D" parent="MobPath"]
|
||||
position = Vector2( -0.901337, 0.225891 )
|
||||
rotation = 0.00221238
|
||||
|
||||
[node name="HUD" parent="." instance=ExtResource( 4 )]
|
||||
|
||||
@@ -49,7 +47,6 @@ stream = ExtResource( 5 )
|
||||
|
||||
[node name="DeathSound" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource( 6 )
|
||||
|
||||
[connection signal="hit" from="Player" to="." method="game_over"]
|
||||
[connection signal="timeout" from="MobTimer" to="." method="_on_MobTimer_timeout"]
|
||||
[connection signal="timeout" from="ScoreTimer" to="." method="_on_ScoreTimer_timeout"]
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
extends RigidBody2D
|
||||
|
||||
#warning-ignore-all:unused_class_variable
|
||||
export var min_speed = 150
|
||||
export var max_speed = 250
|
||||
var mob_types = ["walk", "swim", "fly"]
|
||||
@@ -7,5 +8,6 @@ var mob_types = ["walk", "swim", "fly"]
|
||||
func _ready():
|
||||
$AnimatedSprite.animation = mob_types[randi() % mob_types.size()]
|
||||
|
||||
|
||||
func _on_VisibilityNotifier2D_screen_exited():
|
||||
queue_free()
|
||||
queue_free()
|
||||
|
||||
@@ -1,20 +1,19 @@
|
||||
[gd_scene load_steps=10 format=2]
|
||||
|
||||
[ext_resource path="res://Mob.gd" type="Script" id=1]
|
||||
[ext_resource path="res://art/enemySwimming_1.png" type="Texture" id=2]
|
||||
[ext_resource path="res://art/enemySwimming_2.png" type="Texture" id=3]
|
||||
[ext_resource path="res://art/enemyFlyingAlt_1.png" type="Texture" id=2]
|
||||
[ext_resource path="res://art/enemyFlyingAlt_2.png" type="Texture" id=3]
|
||||
[ext_resource path="res://art/enemyWalking_1.png" type="Texture" id=4]
|
||||
[ext_resource path="res://art/enemyWalking_2.png" type="Texture" id=5]
|
||||
[ext_resource path="res://art/enemyFlyingAlt_1.png" type="Texture" id=6]
|
||||
[ext_resource path="res://art/enemyFlyingAlt_2.png" type="Texture" id=7]
|
||||
[ext_resource path="res://art/enemySwimming_1.png" type="Texture" id=6]
|
||||
[ext_resource path="res://art/enemySwimming_2.png" type="Texture" id=7]
|
||||
|
||||
[sub_resource type="SpriteFrames" id=1]
|
||||
|
||||
animations = [ {
|
||||
"frames": [ ExtResource( 2 ), ExtResource( 3 ) ],
|
||||
"loop": true,
|
||||
"name": "swim",
|
||||
"speed": 4.0
|
||||
"name": "fly",
|
||||
"speed": 3.0
|
||||
}, {
|
||||
"frames": [ ExtResource( 4 ), ExtResource( 5 ) ],
|
||||
"loop": true,
|
||||
@@ -23,12 +22,11 @@ animations = [ {
|
||||
}, {
|
||||
"frames": [ ExtResource( 6 ), ExtResource( 7 ) ],
|
||||
"loop": true,
|
||||
"name": "fly",
|
||||
"speed": 3.0
|
||||
"name": "swim",
|
||||
"speed": 4.0
|
||||
} ]
|
||||
|
||||
[sub_resource type="CapsuleShape2D" id=2]
|
||||
|
||||
radius = 35.2706
|
||||
height = 23.3281
|
||||
|
||||
@@ -44,6 +42,7 @@ __meta__ = {
|
||||
scale = Vector2( 0.75, 0.75 )
|
||||
frames = SubResource( 1 )
|
||||
animation = "walk"
|
||||
frame = 1
|
||||
playing = true
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
@@ -51,5 +50,4 @@ rotation = 1.5708
|
||||
shape = SubResource( 2 )
|
||||
|
||||
[node name="VisibilityNotifier2D" type="VisibilityNotifier2D" parent="."]
|
||||
|
||||
[connection signal="screen_exited" from="VisibilityNotifier2D" to="." method="_on_VisibilityNotifier2D_screen_exited"]
|
||||
|
||||
@@ -3,23 +3,18 @@ extends Area2D
|
||||
signal hit
|
||||
|
||||
export var speed = 400
|
||||
var extents
|
||||
var screen_size
|
||||
|
||||
func _ready():
|
||||
screen_size = get_viewport_rect().size
|
||||
hide()
|
||||
|
||||
|
||||
func _process(delta):
|
||||
var velocity = Vector2()
|
||||
if Input.is_action_pressed("ui_right"):
|
||||
velocity.x += 1
|
||||
if Input.is_action_pressed("ui_left"):
|
||||
velocity.x -= 1
|
||||
if Input.is_action_pressed("ui_up"):
|
||||
velocity.y -= 1
|
||||
if Input.is_action_pressed("ui_down"):
|
||||
velocity.y += 1
|
||||
velocity.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
|
||||
velocity.y = Input.get_action_strength("move_down") - Input.get_action_strength("move_up")
|
||||
|
||||
if velocity.length() > 0:
|
||||
velocity = velocity.normalized() * speed
|
||||
$AnimatedSprite.play()
|
||||
@@ -37,12 +32,14 @@ func _process(delta):
|
||||
$AnimatedSprite.animation = "up"
|
||||
$AnimatedSprite.flip_v = velocity.y > 0
|
||||
|
||||
func _on_Player_body_entered(body):
|
||||
hide()
|
||||
emit_signal("hit")
|
||||
$CollisionShape2D.set_deferred("disabled", true)
|
||||
|
||||
func start(pos):
|
||||
position = pos
|
||||
show()
|
||||
$CollisionShape2D.disabled = false
|
||||
|
||||
|
||||
func _on_Player_body_entered(_body):
|
||||
hide()
|
||||
emit_signal("hit")
|
||||
$CollisionShape2D.set_deferred("disabled", true)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=8 format=2]
|
||||
[gd_scene load_steps=13 format=2]
|
||||
|
||||
[ext_resource path="res://Player.gd" type="Script" id=1]
|
||||
[ext_resource path="res://art/playerGrey_walk1.png" type="Texture" id=2]
|
||||
@@ -23,7 +23,30 @@ animations = [ {
|
||||
radius = 26.1701
|
||||
height = 14.822
|
||||
|
||||
[sub_resource type="Gradient" id=3]
|
||||
colors = PoolColorArray( 1, 1, 1, 0.501961, 1, 1, 1, 0 )
|
||||
|
||||
[sub_resource type="GradientTexture" id=4]
|
||||
gradient = SubResource( 3 )
|
||||
|
||||
[sub_resource type="Curve" id=5]
|
||||
_data = [ Vector2( 0.00501098, 0.5 ), 0.0, 0.0, 0, 0, Vector2( 0.994989, 0.324 ), 0.0, 0.0, 0, 0 ]
|
||||
|
||||
[sub_resource type="CurveTexture" id=6]
|
||||
curve = SubResource( 5 )
|
||||
|
||||
[sub_resource type="ParticlesMaterial" id=7]
|
||||
flag_disable_z = true
|
||||
gravity = Vector3( 0, 0, 0 )
|
||||
initial_velocity = 1.0
|
||||
orbit_velocity = 0.0
|
||||
orbit_velocity_random = 0.0
|
||||
scale = 0.75
|
||||
scale_curve = SubResource( 6 )
|
||||
color_ramp = SubResource( 4 )
|
||||
|
||||
[node name="Player" type="Area2D"]
|
||||
z_index = 10
|
||||
script = ExtResource( 1 )
|
||||
__meta__ = {
|
||||
"_edit_group_": true
|
||||
@@ -37,4 +60,11 @@ animation = "right"
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource( 2 )
|
||||
|
||||
[node name="Trail" type="Particles2D" parent="."]
|
||||
z_index = -1
|
||||
amount = 10
|
||||
speed_scale = 2.0
|
||||
local_coords = false
|
||||
process_material = SubResource( 7 )
|
||||
texture = ExtResource( 2 )
|
||||
[connection signal="body_entered" from="." to="." method="_on_Player_body_entered"]
|
||||
|
||||
@@ -5,4 +5,3 @@
|
||||
[resource]
|
||||
background_mode = 2
|
||||
background_sky = SubResource( 1 )
|
||||
|
||||
|
||||
@@ -1,94 +1,94 @@
|
||||
Copyright 2011-2016 Severin Meyer <sev.ch@web.de>,
|
||||
with Reserved Font Name Xolonium.
|
||||
|
||||
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 <http://scripts.sil.org/OFL>
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
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.
|
||||
Copyright 2011-2016 Severin Meyer <sev.ch@web.de>,
|
||||
with Reserved Font Name Xolonium.
|
||||
|
||||
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 <http://scripts.sil.org/OFL>
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
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.
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.2 KiB |
@@ -10,7 +10,6 @@ config_version=4
|
||||
|
||||
_global_script_classes=[ ]
|
||||
_global_script_class_icons={
|
||||
|
||||
}
|
||||
|
||||
[application]
|
||||
@@ -24,6 +23,41 @@ config/icon="res://icon.png"
|
||||
window/size/width=480
|
||||
window/size/height=720
|
||||
|
||||
[input]
|
||||
|
||||
move_left={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"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":0,"axis":0,"axis_value":-1.0,"script":null)
|
||||
]
|
||||
}
|
||||
move_right={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
move_up={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"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":0,"axis":1,"axis_value":-1.0,"script":null)
|
||||
]
|
||||
}
|
||||
move_down={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"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":0,"axis":1,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[rendering]
|
||||
|
||||
environment/default_environment="res://default_env.tres"
|
||||
|
||||
@@ -1,20 +1,25 @@
|
||||
[gd_scene load_steps=5 format=2]
|
||||
|
||||
[ext_resource path="res://player/Player.tscn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://debug/StatesStackDiplayer.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://debug/ControlsPanel.tscn" type="PackedScene" id=3]
|
||||
[ext_resource path="res://debug/Explanations.tscn" type="PackedScene" id=4]
|
||||
[ext_resource path="res://debug/Explanations.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://debug/StatesStackDiplayer.tscn" type="PackedScene" id=3]
|
||||
[ext_resource path="res://debug/ControlsPanel.tscn" type="PackedScene" id=4]
|
||||
|
||||
[node name="Demo" type="Node"]
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource( 1 )]
|
||||
editor/display_folded = true
|
||||
|
||||
[node name="StatesStackDiplayer" parent="." instance=ExtResource( 2 )]
|
||||
[node name="Explanations" parent="." instance=ExtResource( 2 )]
|
||||
|
||||
[node name="ControlsPanel" parent="." instance=ExtResource( 3 )]
|
||||
[node name="Control" type="Control" parent="."]
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="Explanations" parent="." instance=ExtResource( 4 )]
|
||||
[node name="StatesStackDiplayer" parent="Control" instance=ExtResource( 3 )]
|
||||
|
||||
[node name="ControlsPanel" parent="Control" instance=ExtResource( 4 )]
|
||||
|
||||
[editable path="Player"]
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
[gd_scene load_steps=3 format=2]
|
||||
[gd_scene load_steps=2 format=2]
|
||||
|
||||
[ext_resource path="res://debug/top_level_ui.gd" type="Script" id=1]
|
||||
[ext_resource path="res://fonts/source_code_pro_explanations.tres" type="DynamicFont" id=2]
|
||||
[ext_resource path="res://fonts/source_code_pro_explanations.tres" type="DynamicFont" id=1]
|
||||
|
||||
[node name="ControlsPanel" type="Panel"]
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
margin_left = -220.0
|
||||
margin_bottom = 170.0
|
||||
script = ExtResource( 1 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="Keys" type="Label" parent="."]
|
||||
anchor_right = 1.0
|
||||
@@ -17,7 +18,7 @@ margin_left = 10.0
|
||||
margin_top = 10.0
|
||||
margin_right = -10.0
|
||||
margin_bottom = -10.0
|
||||
custom_fonts/font = ExtResource( 2 )
|
||||
custom_fonts/font = ExtResource( 1 )
|
||||
text = "Shoot:
|
||||
Attack:
|
||||
Stagger:
|
||||
@@ -31,11 +32,10 @@ margin_left = 10.0
|
||||
margin_top = 10.0
|
||||
margin_right = -10.0
|
||||
margin_bottom = -10.0
|
||||
custom_fonts/font = ExtResource( 2 )
|
||||
custom_fonts/font = ExtResource( 1 )
|
||||
text = "R
|
||||
F
|
||||
X
|
||||
Space
|
||||
Shift"
|
||||
align = 2
|
||||
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
[gd_scene load_steps=4 format=2]
|
||||
[gd_scene load_steps=3 format=2]
|
||||
|
||||
[ext_resource path="res://fonts/source_code_pro_explanations_bold.tres" type="DynamicFont" id=1]
|
||||
[ext_resource path="res://fonts/source_code_pro_explanations.tres" type="DynamicFont" id=2]
|
||||
[ext_resource path="res://debug/top_level_ui.gd" type="Script" id=3]
|
||||
|
||||
[node name="Explanations" type="RichTextLabel"]
|
||||
anchor_right = 1.0
|
||||
@@ -17,7 +16,7 @@ size_flags_vertical = 4
|
||||
custom_fonts/bold_font = ExtResource( 1 )
|
||||
custom_fonts/normal_font = ExtResource( 2 )
|
||||
bbcode_enabled = true
|
||||
bbcode_text = "This example shows how to apply the State programming pattern in GDscript, including Hierarchical States, and a pushdown automaton.
|
||||
bbcode_text = "This example shows how to apply the State programming pattern in GDscript, including Hierarchical States, and a pushdown automaton.
|
||||
|
||||
States are common in games. You can use the pattern to:
|
||||
|
||||
@@ -26,7 +25,7 @@ States are common in games. You can use the pattern to:
|
||||
3. Improve your code's structure. Look at the scene tree and FileSystem tab: without looking at the code, you'll know what the Player can or cannot do.
|
||||
|
||||
You can read more about States in the excellent [url=http://gameprogrammingpatterns.com/state.html]Game Programming Patterns ebook[/url]."
|
||||
text = "This example shows how to apply the State programming pattern in GDscript, including Hierarchical States, and a pushdown automaton.
|
||||
text = "This example shows how to apply the State programming pattern in GDscript, including Hierarchical States, and a pushdown automaton.
|
||||
|
||||
States are common in games. You can use the pattern to:
|
||||
|
||||
@@ -35,8 +34,6 @@ States are common in games. You can use the pattern to:
|
||||
3. Improve your code's structure. Look at the scene tree and FileSystem tab: without looking at the code, you'll know what the Player can or cannot do.
|
||||
|
||||
You can read more about States in the excellent Game Programming Patterns ebook."
|
||||
script = ExtResource( 3 )
|
||||
__meta__ = {
|
||||
"_edit_lock_": true
|
||||
}
|
||||
|
||||
|
||||
@@ -46,4 +46,3 @@ margin_bottom = 170.0
|
||||
custom_fonts/font = SubResource( 1 )
|
||||
text = "1.
|
||||
2."
|
||||
|
||||
|
||||
@@ -1,18 +1,14 @@
|
||||
extends Panel
|
||||
|
||||
onready var fsm_node = get_node("../Player/StateMachine")
|
||||
onready var fsm_node = get_node("../../Player/StateMachine")
|
||||
|
||||
func _ready():
|
||||
set_as_toplevel(true)
|
||||
|
||||
func _process(delta):
|
||||
var states_names = ''
|
||||
var numbers = ''
|
||||
func _process(_delta):
|
||||
var states_names = ""
|
||||
var numbers = ""
|
||||
var index = 0
|
||||
for state in fsm_node.states_stack:
|
||||
states_names += state.get_name() + '\n'
|
||||
numbers += str(index) + '\n'
|
||||
index += 1
|
||||
|
||||
$States.text = states_names
|
||||
$Numbers.text = numbers
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
tool
|
||||
extends Control
|
||||
|
||||
func _ready():
|
||||
set_as_toplevel(true)
|
||||
@@ -11,4 +11,3 @@ ground_curve = 0.01
|
||||
[resource]
|
||||
background_mode = 2
|
||||
background_sky = SubResource( 1 )
|
||||
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
@@ -14,6 +17,7 @@ dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ]
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
@@ -23,6 +27,7 @@ flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
|
||||
@@ -49,7 +49,6 @@ __meta__ = {
|
||||
|
||||
[node name="StateMachine" type="Node" parent="."]
|
||||
script = ExtResource( 2 )
|
||||
START_STATE = NodePath("Idle")
|
||||
|
||||
[node name="Idle" type="Node" parent="StateMachine"]
|
||||
script = ExtResource( 3 )
|
||||
@@ -86,7 +85,6 @@ position = Vector2( 0, -58.8242 )
|
||||
texture = ExtResource( 10 )
|
||||
|
||||
[node name="BulletSpawn" type="Node2D" parent="BodyPivot"]
|
||||
editor/display_folded = true
|
||||
position = Vector2( 1.17401, -61.266 )
|
||||
script = ExtResource( 11 )
|
||||
|
||||
@@ -107,7 +105,6 @@ position = Vector2( 110, 0 )
|
||||
polygon = PoolVector2Array( -20, 0, -20, -20, 20, -20, 20, 0 )
|
||||
|
||||
[node name="StateNameDisplayer" type="Label" parent="."]
|
||||
editor/display_folded = true
|
||||
margin_left = -109.0
|
||||
margin_top = -172.0
|
||||
margin_right = 110.0
|
||||
@@ -118,7 +115,6 @@ align = 1
|
||||
valign = 1
|
||||
uppercase = true
|
||||
script = ExtResource( 15 )
|
||||
|
||||
[connection signal="state_changed" from="StateMachine" to="BodyPivot/WeaponPivot/Offset/Sword" method="_on_StateMachine_state_changed"]
|
||||
[connection signal="state_changed" from="StateMachine" to="StateNameDisplayer" method="_on_StateMachine_state_changed"]
|
||||
[connection signal="animation_finished" from="AnimationPlayer" to="StateMachine" method="_on_animation_finished"]
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/body.png-313f6363670a5852a7b7126ab476d8b1.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
@@ -14,6 +17,7 @@ dest_files=[ "res://.import/body.png-313f6363670a5852a7b7126ab476d8b1.stex" ]
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
@@ -23,6 +27,7 @@ flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
|
||||
@@ -12,4 +12,3 @@ script = ExtResource( 1 )
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource( 1 )
|
||||
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
extends KinematicBody2D
|
||||
|
||||
|
||||
var direction = Vector2()
|
||||
export(float) var SPEED = 1000.0
|
||||
|
||||
export(float) var speed = 1000.0
|
||||
|
||||
func _ready():
|
||||
set_as_toplevel(true)
|
||||
@@ -13,7 +11,7 @@ func _physics_process(delta):
|
||||
if is_outside_view_bounds():
|
||||
queue_free()
|
||||
|
||||
var motion = direction * SPEED * delta
|
||||
var motion = direction * speed * delta
|
||||
var collision_info = move_and_collide(motion)
|
||||
if collision_info:
|
||||
queue_free()
|
||||
@@ -21,8 +19,8 @@ func _physics_process(delta):
|
||||
|
||||
func is_outside_view_bounds():
|
||||
return position.x > OS.get_screen_size().x or position.x < 0.0 \
|
||||
or position.y > OS.get_screen_size().y or position.y < 0.0
|
||||
or position.y > OS.get_screen_size().y or position.y < 0.0
|
||||
|
||||
|
||||
func _draw():
|
||||
draw_circle(Vector2(), $CollisionShape2D.shape.radius, Color('#ffffff'))
|
||||
draw_circle(Vector2(), $CollisionShape2D.shape.radius, Color.white)
|
||||
|
||||
@@ -6,6 +6,7 @@ func _input(event):
|
||||
if event.is_action_pressed("fire"):
|
||||
fire(owner.look_direction)
|
||||
|
||||
|
||||
func fire(direction):
|
||||
if not $CooldownTimer.is_stopped():
|
||||
return
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
"""
|
||||
The Player is a KinematicBody2D, in other words a physics-driven object.
|
||||
It can move, collide with the world...
|
||||
It HAS a state machine, but the body and the state machine are separate.
|
||||
"""
|
||||
extends KinematicBody2D
|
||||
# The Player is a KinematicBody2D, in other words a physics-driven object.
|
||||
# It can move, collide with the world, etc...
|
||||
# The player has a state machine, but the body and the state machine are separate.
|
||||
|
||||
signal direction_changed(new_direction)
|
||||
|
||||
var look_direction = Vector2(1, 0) setget set_look_direction
|
||||
var look_direction = Vector2.RIGHT setget set_look_direction
|
||||
|
||||
func take_damage(attacker, amount, effect=null):
|
||||
if self.is_a_parent_of(attacker):
|
||||
func take_damage(attacker, amount, effect = null):
|
||||
if is_a_parent_of(attacker):
|
||||
return
|
||||
$States/Stagger.knockback_direction = (attacker.global_position - global_position).normalized()
|
||||
$Health.take_damage(amount, effect)
|
||||
|
||||
|
||||
func set_dead(value):
|
||||
set_process_input(not value)
|
||||
set_physics_process(not value)
|
||||
$CollisionPolygon2D.disabled = value
|
||||
|
||||
|
||||
func set_look_direction(value):
|
||||
look_direction = value
|
||||
emit_signal("direction_changed", value)
|
||||
|
||||
@@ -9,10 +9,9 @@ func _ready():
|
||||
"attack": $Attack,
|
||||
}
|
||||
|
||||
|
||||
func _change_state(state_name):
|
||||
"""
|
||||
The base state_machine interface this node extends does most of the work
|
||||
"""
|
||||
# The base state_machine interface this node extends does most of the work.
|
||||
if not _active:
|
||||
return
|
||||
if state_name in ["stagger", "jump", "attack"]:
|
||||
@@ -21,11 +20,10 @@ func _change_state(state_name):
|
||||
$Jump.initialize($Move.speed, $Move.velocity)
|
||||
._change_state(state_name)
|
||||
|
||||
|
||||
func _input(event):
|
||||
"""
|
||||
Here we only handle input that can interrupt states, attacking in this case
|
||||
otherwise we let the state node handle it
|
||||
"""
|
||||
# Here we only handle input that can interrupt states, attacking in this case,
|
||||
# otherwise we let the state node handle it.
|
||||
if event.is_action_pressed("attack"):
|
||||
if current_state in [$Attack, $Stagger]:
|
||||
return
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/shadow.png-493c4635eca1ce8bdece629560617dc7.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
@@ -14,6 +17,7 @@ dest_files=[ "res://.import/shadow.png-493c4635eca1ce8bdece629560617dc7.stex" ]
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
@@ -23,6 +27,7 @@ flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
|
||||
@@ -3,5 +3,6 @@ extends "res://state_machine/state.gd"
|
||||
func enter():
|
||||
owner.get_node("AnimationPlayer").play("idle")
|
||||
|
||||
|
||||
func _on_Sword_attack_finished():
|
||||
emit_signal("finished", "previous")
|
||||
|
||||
@@ -1,15 +1,12 @@
|
||||
"""
|
||||
The stagger state end with the stagger animation from the AnimationPlayer
|
||||
The animation only affects the Body Sprite"s modulate property so
|
||||
it could stack with other animations if we had two AnimationPlayer nodes
|
||||
"""
|
||||
extends "res://state_machine/state.gd"
|
||||
|
||||
var knockback_direction = Vector2()
|
||||
# The stagger state end with the stagger animation from the AnimationPlayer.
|
||||
# The animation only affects the Body Sprite's modulate property so it
|
||||
# could stack with other animations if we had two AnimationPlayer nodes.
|
||||
|
||||
func enter():
|
||||
owner.get_node("AnimationPlayer").play("stagger")
|
||||
|
||||
|
||||
func _on_animation_finished(anim_name):
|
||||
assert anim_name == "stagger"
|
||||
assert(anim_name == "stagger")
|
||||
emit_signal("finished", "previous")
|
||||
|
||||
@@ -5,8 +5,10 @@ var start_position = Vector2()
|
||||
func _ready():
|
||||
start_position = rect_position
|
||||
|
||||
func _physics_process(delta):
|
||||
|
||||
func _physics_process(_delta):
|
||||
rect_position = $"../BodyPivot".position + start_position
|
||||
|
||||
|
||||
func _on_StateMachine_state_changed(current_state):
|
||||
text = current_state.get_name()
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
extends "res://state_machine/state.gd"
|
||||
|
||||
|
||||
# Initialize the state. E.g. change the animation
|
||||
# Initialize the state. E.g. change the animation.
|
||||
func enter():
|
||||
owner.set_dead(true)
|
||||
owner.get_node("AnimationPlayer").play("die")
|
||||
|
||||
func _on_animation_finished(anim_name):
|
||||
|
||||
func _on_animation_finished(_anim_name):
|
||||
emit_signal("finished", "dead")
|
||||
|
||||
@@ -1,15 +1,12 @@
|
||||
extends "../motion.gd"
|
||||
|
||||
export(float) var BASE_MAX_HORIZONTAL_SPEED = 400.0
|
||||
export(float) var base_max_horizontal_speed = 400.0
|
||||
|
||||
export(float) var AIR_ACCELERATION = 1000.0
|
||||
export(float) var AIR_DECCELERATION = 2000.0
|
||||
export(float) var AIR_STEERING_POWER = 50.0
|
||||
export(float) var air_acceleration = 1000.0
|
||||
export(float) var air_deceleration = 2000.0
|
||||
export(float) var air_steering_power = 50.0
|
||||
|
||||
export(float) var JUMP_HEIGHT = 120.0
|
||||
export(float) var JUMP_DURATION = 0.8
|
||||
|
||||
export(float) var GRAVITY = 1600.0
|
||||
export(float) var gravity = 1600.0
|
||||
|
||||
var enter_velocity = Vector2()
|
||||
|
||||
@@ -22,7 +19,7 @@ var height = 0.0
|
||||
|
||||
func initialize(speed, velocity):
|
||||
horizontal_speed = speed
|
||||
max_horizontal_speed = speed if speed > 0.0 else BASE_MAX_HORIZONTAL_SPEED
|
||||
max_horizontal_speed = speed if speed > 0.0 else base_max_horizontal_speed
|
||||
enter_velocity = velocity
|
||||
|
||||
func enter():
|
||||
@@ -45,19 +42,19 @@ func update(delta):
|
||||
|
||||
func move_horizontally(delta, direction):
|
||||
if direction:
|
||||
horizontal_speed += AIR_ACCELERATION * delta
|
||||
horizontal_speed += air_acceleration * delta
|
||||
else:
|
||||
horizontal_speed -= AIR_DECCELERATION * delta
|
||||
horizontal_speed -= air_deceleration * delta
|
||||
horizontal_speed = clamp(horizontal_speed, 0, max_horizontal_speed)
|
||||
|
||||
var target_velocity = horizontal_speed * direction.normalized()
|
||||
var steering_velocity = (target_velocity - horizontal_velocity).normalized() * AIR_STEERING_POWER
|
||||
var steering_velocity = (target_velocity - horizontal_velocity).normalized() * air_steering_power
|
||||
horizontal_velocity += steering_velocity
|
||||
|
||||
owner.move_and_slide(horizontal_velocity)
|
||||
|
||||
func animate_jump_height(delta):
|
||||
vertical_speed -= GRAVITY * delta
|
||||
vertical_speed -= gravity * delta
|
||||
height += vertical_speed * delta
|
||||
height = max(0.0, height)
|
||||
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
# Collection of important methods to handle direction and animation
|
||||
extends "res://state_machine/state.gd"
|
||||
# Collection of important methods to handle direction and animation.
|
||||
|
||||
func handle_input(event):
|
||||
if event.is_action_pressed("simulate_damage"):
|
||||
emit_signal("finished", "stagger")
|
||||
|
||||
|
||||
func get_input_direction():
|
||||
var input_direction = Vector2()
|
||||
input_direction.x = int(Input.is_action_pressed("move_right")) - int(Input.is_action_pressed("move_left"))
|
||||
input_direction.y = int(Input.is_action_pressed("move_down")) - int(Input.is_action_pressed("move_up"))
|
||||
input_direction.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
|
||||
input_direction.y = Input.get_action_strength("move_down") - Input.get_action_strength("move_up")
|
||||
return input_direction
|
||||
|
||||
|
||||
func update_look_direction(direction):
|
||||
if direction and owner.look_direction != direction:
|
||||
owner.look_direction = direction
|
||||
|
||||
@@ -3,10 +3,12 @@ extends "on_ground.gd"
|
||||
func enter():
|
||||
owner.get_node("AnimationPlayer").play("idle")
|
||||
|
||||
|
||||
func handle_input(event):
|
||||
return .handle_input(event)
|
||||
|
||||
func update(delta):
|
||||
|
||||
func update(_delta):
|
||||
var input_direction = get_input_direction()
|
||||
if input_direction:
|
||||
emit_signal("finished", "move")
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
extends "on_ground.gd"
|
||||
|
||||
export(float) var MAX_WALK_SPEED = 450
|
||||
export(float) var MAX_RUN_SPEED = 700
|
||||
export(float) var max_walk_speed = 450
|
||||
export(float) var max_run_speed = 700
|
||||
|
||||
func enter():
|
||||
speed = 0.0
|
||||
@@ -11,22 +11,25 @@ func enter():
|
||||
update_look_direction(input_direction)
|
||||
owner.get_node("AnimationPlayer").play("walk")
|
||||
|
||||
|
||||
func handle_input(event):
|
||||
return .handle_input(event)
|
||||
|
||||
func update(delta):
|
||||
|
||||
func update(_delta):
|
||||
var input_direction = get_input_direction()
|
||||
if not input_direction:
|
||||
emit_signal("finished", "idle")
|
||||
update_look_direction(input_direction)
|
||||
|
||||
speed = MAX_RUN_SPEED if Input.is_action_pressed("run") else MAX_WALK_SPEED
|
||||
speed = max_run_speed if Input.is_action_pressed("run") else max_walk_speed
|
||||
var collision_info = move(speed, input_direction)
|
||||
if not collision_info:
|
||||
return
|
||||
if speed == MAX_RUN_SPEED and collision_info.collider.is_in_group("environment"):
|
||||
if speed == max_run_speed and collision_info.collider.is_in_group("environment"):
|
||||
return null
|
||||
|
||||
|
||||
func move(speed, direction):
|
||||
velocity = direction.normalized() * speed
|
||||
owner.move_and_slide(velocity, Vector2(), 5, 2)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
extends "../motion.gd"
|
||||
|
||||
# warning-ignore-all:unused_class_variable
|
||||
var speed = 0.0
|
||||
var velocity = Vector2()
|
||||
|
||||
|
||||
@@ -234,11 +234,10 @@ anims/attack_fast = SubResource( 3 )
|
||||
anims/attack_medium = SubResource( 4 )
|
||||
anims/idle = SubResource( 5 )
|
||||
|
||||
[node name="sword" type="Sprite" parent="."]
|
||||
[node name="Sword" type="Sprite" parent="."]
|
||||
position = Vector2( 4, 0 )
|
||||
texture = ExtResource( 2 )
|
||||
offset = Vector2( 67, 0 )
|
||||
|
||||
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
|
||||
polygon = PoolVector2Array( 28.0001, -15.9999, 136, -15.9995, 160, 0, 136, 16.0005, 27.9999, 16.0001 )
|
||||
|
||||
|
||||
@@ -2,101 +2,112 @@ extends Area2D
|
||||
|
||||
signal attack_finished
|
||||
|
||||
enum STATES { IDLE, ATTACK }
|
||||
enum States { IDLE, ATTACK }
|
||||
var state = null
|
||||
|
||||
enum ATTACK_INPUT_STATES { IDLE, LISTENING, REGISTERED }
|
||||
var attack_input_state = ATTACK_INPUT_STATES.IDLE
|
||||
enum AttackInputStates { IDLE, LISTENING, REGISTERED }
|
||||
var attack_input_state = AttackInputStates.IDLE
|
||||
var ready_for_next_attack = false
|
||||
const MAX_COMBO_COUNT = 3
|
||||
var combo_count = 0
|
||||
|
||||
var attack_current = {}
|
||||
var combo = [{
|
||||
'damage': 1,
|
||||
'animation': 'attack_fast',
|
||||
'effect': null
|
||||
"damage": 1,
|
||||
"animation": "attack_fast",
|
||||
"effect": null
|
||||
},
|
||||
{
|
||||
'damage': 1,
|
||||
'animation': 'attack_fast',
|
||||
'effect': null
|
||||
"damage": 1,
|
||||
"animation": "attack_fast",
|
||||
"effect": null
|
||||
},
|
||||
{
|
||||
'damage': 3,
|
||||
'animation': 'attack_medium',
|
||||
'effect': null
|
||||
"damage": 3,
|
||||
"animation": "attack_medium",
|
||||
"effect": null
|
||||
}]
|
||||
|
||||
var hit_objects = []
|
||||
|
||||
func _ready():
|
||||
$AnimationPlayer.connect('animation_finished', self, "_on_animation_finished")
|
||||
# warning-ignore:return_value_discarded
|
||||
$AnimationPlayer.connect("animation_finished", self, "_on_animation_finished")
|
||||
# warning-ignore:return_value_discarded
|
||||
self.connect("body_entered", self, "_on_body_entered")
|
||||
_change_state(STATES.IDLE)
|
||||
_change_state(States.IDLE)
|
||||
|
||||
|
||||
func _change_state(new_state):
|
||||
match state:
|
||||
STATES.ATTACK:
|
||||
States.ATTACK:
|
||||
hit_objects = []
|
||||
attack_input_state = ATTACK_INPUT_STATES.LISTENING
|
||||
attack_input_state = AttackInputStates.LISTENING
|
||||
ready_for_next_attack = false
|
||||
|
||||
match new_state:
|
||||
STATES.IDLE:
|
||||
States.IDLE:
|
||||
combo_count = 0
|
||||
$AnimationPlayer.stop()
|
||||
visible = false
|
||||
monitoring = false
|
||||
STATES.ATTACK:
|
||||
States.ATTACK:
|
||||
attack_current = combo[combo_count -1]
|
||||
$AnimationPlayer.play(attack_current['animation'])
|
||||
$AnimationPlayer.play(attack_current["animation"])
|
||||
visible = true
|
||||
monitoring = true
|
||||
state = new_state
|
||||
|
||||
func _input(event):
|
||||
if not state == STATES.ATTACK:
|
||||
return
|
||||
if attack_input_state != ATTACK_INPUT_STATES.LISTENING:
|
||||
return
|
||||
if event.is_action_pressed('attack'):
|
||||
attack_input_state = ATTACK_INPUT_STATES.REGISTERED
|
||||
|
||||
func _physics_process(delta):
|
||||
if attack_input_state == ATTACK_INPUT_STATES.REGISTERED and ready_for_next_attack:
|
||||
func _input(event):
|
||||
if not state == States.ATTACK:
|
||||
return
|
||||
if attack_input_state != AttackInputStates.LISTENING:
|
||||
return
|
||||
if event.is_action_pressed("attack"):
|
||||
attack_input_state = AttackInputStates.REGISTERED
|
||||
|
||||
|
||||
func _physics_process(_delta):
|
||||
if attack_input_state == AttackInputStates.REGISTERED and ready_for_next_attack:
|
||||
attack()
|
||||
|
||||
|
||||
func attack():
|
||||
combo_count += 1
|
||||
_change_state(STATES.ATTACK)
|
||||
_change_state(States.ATTACK)
|
||||
|
||||
# use with AnimationPlayer func track
|
||||
|
||||
# Use with AnimationPlayer func track.
|
||||
func set_attack_input_listening():
|
||||
attack_input_state = ATTACK_INPUT_STATES.LISTENING
|
||||
attack_input_state = AttackInputStates.LISTENING
|
||||
|
||||
# use with AnimationPlayer func track
|
||||
|
||||
# Use with AnimationPlayer func track.
|
||||
func set_ready_for_next_attack():
|
||||
ready_for_next_attack = true
|
||||
|
||||
|
||||
func _on_body_entered(body):
|
||||
if not body.has_node('Health'):
|
||||
if not body.has_node("Health"):
|
||||
return
|
||||
if body.get_rid().get_id() in hit_objects:
|
||||
return
|
||||
hit_objects.append(body.get_rid().get_id())
|
||||
body.take_damage(self, attack_current['damage'], attack_current['effect'])
|
||||
body.take_damage(self, attack_current["damage"], attack_current["effect"])
|
||||
|
||||
func _on_animation_finished(name):
|
||||
|
||||
func _on_animation_finished(_name):
|
||||
if not attack_current:
|
||||
return
|
||||
|
||||
if attack_input_state == ATTACK_INPUT_STATES.REGISTERED and combo_count < MAX_COMBO_COUNT:
|
||||
if attack_input_state == AttackInputStates.REGISTERED and combo_count < MAX_COMBO_COUNT:
|
||||
attack()
|
||||
else:
|
||||
_change_state(STATES.IDLE)
|
||||
_change_state(States.IDLE)
|
||||
emit_signal("attack_finished")
|
||||
|
||||
|
||||
func _on_StateMachine_state_changed(current_state):
|
||||
if current_state.name == "Attack":
|
||||
attack()
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/sword.png-fc7f0084cdf333c826eda2b33f2ec3cc.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
@@ -14,6 +17,7 @@ dest_files=[ "res://.import/sword.png-fc7f0084cdf333c826eda2b33f2ec3cc.stex" ]
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
@@ -23,6 +27,7 @@ flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
|
||||
@@ -3,13 +3,15 @@ extends Position2D
|
||||
var z_index_start = 0
|
||||
|
||||
func _ready():
|
||||
owner.connect("direction_changed", self, '_on_Parent_direction_changed')
|
||||
#warning-ignore:return_value_discarded
|
||||
owner.connect("direction_changed", self, "_on_Parent_direction_changed")
|
||||
z_index_start = z_index
|
||||
|
||||
|
||||
func _on_Parent_direction_changed(direction):
|
||||
rotation = direction.angle()
|
||||
match direction:
|
||||
Vector2(0, -1):
|
||||
Vector2.UP:
|
||||
z_index = z_index_start - 1
|
||||
_:
|
||||
z_index = z_index_start
|
||||
|
||||
@@ -10,7 +10,6 @@ config_version=4
|
||||
|
||||
_global_script_classes=[ ]
|
||||
_global_script_class_icons={
|
||||
|
||||
}
|
||||
|
||||
[application]
|
||||
@@ -23,10 +22,8 @@ config/icon="res://icon.png"
|
||||
|
||||
window/size/width=1280
|
||||
window/size/height=720
|
||||
window/size/test_width=1280
|
||||
window/size/test_height=720
|
||||
window/stretch/mode="2d"
|
||||
window/stretch/aspect="keep"
|
||||
window/stretch/aspect="expand"
|
||||
|
||||
[gdnative]
|
||||
|
||||
@@ -39,6 +36,7 @@ move_left={
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_up={
|
||||
@@ -46,6 +44,7 @@ move_up={
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_right={
|
||||
@@ -53,6 +52,7 @@ move_right={
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_down={
|
||||
@@ -60,18 +60,19 @@ move_down={
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
fire={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":82,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":2,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":7,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
run={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":7,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":1,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
jump={
|
||||
@@ -83,11 +84,13 @@ jump={
|
||||
simulate_damage={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":88,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":3,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
attack={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":70,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":6,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@@ -1,25 +1,28 @@
|
||||
"""
|
||||
Base interface for all states: it doesn't do anything in itself
|
||||
but forces us to pass the right arguments to the methods below
|
||||
and makes sure every State object had all of these methods.
|
||||
"""
|
||||
extends Node
|
||||
# Base interface for all states: it doesn't do anything by itself,
|
||||
# but forces us to pass the right arguments to the methods below
|
||||
# and makes sure every State object had all of these methods.
|
||||
|
||||
# warning-ignore:unused_signal
|
||||
signal finished(next_state_name)
|
||||
|
||||
# Initialize the state. E.g. change the animation
|
||||
# Initialize the state. E.g. change the animation.
|
||||
func enter():
|
||||
return
|
||||
pass
|
||||
|
||||
# Clean up the state. Reinitialize values like a timer
|
||||
|
||||
# Clean up the state. Reinitialize values like a timer.
|
||||
func exit():
|
||||
return
|
||||
pass
|
||||
|
||||
func handle_input(event):
|
||||
return
|
||||
|
||||
func update(delta):
|
||||
return
|
||||
func handle_input(_event):
|
||||
pass
|
||||
|
||||
func _on_animation_finished(anim_name):
|
||||
return
|
||||
|
||||
func update(_delta):
|
||||
pass
|
||||
|
||||
|
||||
func _on_animation_finished(_anim_name):
|
||||
pass
|
||||
|
||||
@@ -1,21 +1,17 @@
|
||||
"""
|
||||
Base interface for a generic state machine
|
||||
It handles initializing, setting the machine active or not
|
||||
delegating _physics_process, _input calls to the State nodes,
|
||||
and changing the current/active state.
|
||||
See the PlayerV2 scene for an example on how to use it
|
||||
"""
|
||||
extends Node
|
||||
# Base interface for a generic state machine.
|
||||
# It handles initializing, setting the machine active or not
|
||||
# delegating _physics_process, _input calls to the State nodes,
|
||||
# and changing the current/active state.
|
||||
# See the PlayerV2 scene for an example on how to use it.
|
||||
|
||||
signal state_changed(current_state)
|
||||
|
||||
"""
|
||||
You must set a starting node from the inspector or on
|
||||
the node that inherits from this state machine interface
|
||||
If you don't the game will crash (on purpose, so you won't
|
||||
forget to initialize the state machine)
|
||||
"""
|
||||
export(NodePath) var START_STATE
|
||||
# You must set a starting node from the inspector or on
|
||||
# the node that inherits from this state machine interface.
|
||||
# If you don't the game will crash (on purpose, so you won't
|
||||
# forget to initialize the state machine).
|
||||
export(NodePath) var start_state
|
||||
var states_map = {}
|
||||
|
||||
var states_stack = []
|
||||
@@ -23,18 +19,20 @@ var current_state = null
|
||||
var _active = false setget set_active
|
||||
|
||||
func _ready():
|
||||
if not START_STATE:
|
||||
START_STATE = get_child(0).get_path()
|
||||
if not start_state:
|
||||
start_state = get_child(0).get_path()
|
||||
for child in get_children():
|
||||
child.connect("finished", self, "_change_state")
|
||||
initialize(START_STATE)
|
||||
initialize(start_state)
|
||||
|
||||
func initialize(start_state):
|
||||
|
||||
func initialize(initial_state):
|
||||
set_active(true)
|
||||
states_stack.push_front(get_node(start_state))
|
||||
states_stack.push_front(get_node(initial_state))
|
||||
current_state = states_stack[0]
|
||||
current_state.enter()
|
||||
|
||||
|
||||
func set_active(value):
|
||||
_active = value
|
||||
set_physics_process(value)
|
||||
@@ -43,29 +41,33 @@ func set_active(value):
|
||||
states_stack = []
|
||||
current_state = null
|
||||
|
||||
|
||||
func _input(event):
|
||||
current_state.handle_input(event)
|
||||
|
||||
|
||||
func _physics_process(delta):
|
||||
current_state.update(delta)
|
||||
|
||||
|
||||
func _on_animation_finished(anim_name):
|
||||
if not _active:
|
||||
return
|
||||
current_state._on_animation_finished(anim_name)
|
||||
|
||||
|
||||
func _change_state(state_name):
|
||||
if not _active:
|
||||
return
|
||||
current_state.exit()
|
||||
|
||||
|
||||
if state_name == "previous":
|
||||
states_stack.pop_front()
|
||||
else:
|
||||
states_stack[0] = states_map[state_name]
|
||||
|
||||
|
||||
current_state = states_stack[0]
|
||||
emit_signal("state_changed", current_state)
|
||||
|
||||
|
||||
if state_name != "previous":
|
||||
current_state.enter()
|
||||
|
||||
249
2d/gd_paint/PaintControl.gd
Normal file
249
2d/gd_paint/PaintControl.gd
Normal file
@@ -0,0 +1,249 @@
|
||||
extends Control
|
||||
|
||||
# A constant for whether or not we're needing to undo a shape.
|
||||
const UNDO_MODE_SHAPE = -2
|
||||
# A constant for whether or not we can undo.
|
||||
const UNDO_NONE = -1
|
||||
# How large is the image (it's actually the size of DrawingAreaBG, because that's our background canvas).
|
||||
const IMAGE_SIZE = Vector2(930, 720)
|
||||
|
||||
# Enums for the various modes and brush shapes that can be applied.
|
||||
enum BrushModes {
|
||||
PENCIL, ERASER, CIRCLE_SHAPE, RECTANGLE_SHAPE
|
||||
}
|
||||
enum BrushShapes {
|
||||
RECTANGLE, CIRCLE
|
||||
}
|
||||
|
||||
# The top-left position of the canvas.
|
||||
var TL_node
|
||||
|
||||
# A list to hold all of the dictionaries that make up each brush.
|
||||
var brush_data_list = []
|
||||
|
||||
# A boolean to hold whether or not the mouse is inside the drawing area, the mouse position last _process call
|
||||
# and the position of the mouse when the left mouse button was pressed.
|
||||
var is_mouse_in_drawing_area = false
|
||||
var last_mouse_pos = Vector2()
|
||||
var mouse_click_start_pos = null
|
||||
|
||||
# A boolean to tell whether we've set undo_elements_list_num, which holds the size of draw_elements_list
|
||||
# before a new stroke is added (unless the current brush mode is 'rectangle shape' or 'circle shape', in
|
||||
# which case we do things a litte differently. See the undo_stroke function for more details).
|
||||
var undo_set = false
|
||||
var undo_element_list_num = -1
|
||||
|
||||
# The current brush settings: The mode, size, color, and shape we have currently selected.
|
||||
var brush_mode = BrushModes.PENCIL
|
||||
var brush_size = 32
|
||||
var brush_color = Color.black
|
||||
var brush_shape = BrushShapes.CIRCLE;
|
||||
|
||||
# The color of the background. We need this for the eraser (see the how we handle the eraser
|
||||
# in the _draw function for more details).
|
||||
var bg_color = Color.white
|
||||
|
||||
func _ready():
|
||||
# Get the top left position node. We need this to find out whether or not the mouse is inside the canvas.
|
||||
TL_node = get_node("TLPos")
|
||||
set_process(true)
|
||||
|
||||
|
||||
func _process(_delta):
|
||||
var mouse_pos = get_viewport().get_mouse_position()
|
||||
|
||||
# Check if the mouse is currently inside the canvas/drawing-area.
|
||||
is_mouse_in_drawing_area = false
|
||||
if mouse_pos.x > TL_node.global_position.x:
|
||||
if mouse_pos.y > TL_node.global_position.y:
|
||||
is_mouse_in_drawing_area = true
|
||||
|
||||
if Input.is_mouse_button_pressed(BUTTON_LEFT):
|
||||
# If we do not have a position for when the mouse was first clicked, then this must
|
||||
# be the first time is_mouse_button_pressed has been called since the mouse button was
|
||||
# released, so we need to store the position.
|
||||
if mouse_click_start_pos == null:
|
||||
mouse_click_start_pos = mouse_pos
|
||||
|
||||
# If the mouse is inside the canvas and the mouse is 1px away from the position of the mouse last _process call.
|
||||
if check_if_mouse_is_inside_canvas():
|
||||
if mouse_pos.distance_to(last_mouse_pos) >= 1:
|
||||
# If we are in pencil or eraser mode, then we need to draw.
|
||||
if brush_mode == BrushModes.PENCIL or brush_mode == BrushModes.ERASER:
|
||||
# If undo has not been set, meaning we've started a new stroke, then store the size of the
|
||||
# draw_elements_list so we can undo from this point in time.
|
||||
if undo_set == false:
|
||||
undo_set = true
|
||||
undo_element_list_num = brush_data_list.size()
|
||||
# Add the brush object to draw_elements_array.
|
||||
add_brush(mouse_pos, brush_mode)
|
||||
|
||||
else:
|
||||
# We've finished our stroke, so we can set a new undo (if a new storke is made).
|
||||
undo_set = false
|
||||
|
||||
# If the mouse is inside the canvas.
|
||||
if check_if_mouse_is_inside_canvas():
|
||||
# If we're using either the circle shape mode, or the rectangle shape mode, then
|
||||
# add the brush object to draw_elements_array.
|
||||
if brush_mode == BrushModes.CIRCLE_SHAPE or brush_mode == BrushModes.RECTANGLE_SHAPE:
|
||||
add_brush(mouse_pos, brush_mode)
|
||||
# We handle undo's differently than either pencil or eraser mode, so we need to set undo
|
||||
# element_list_num to -2 so we can tell if we need to undo a shape. See undo_stroke for details.
|
||||
undo_element_list_num = UNDO_MODE_SHAPE
|
||||
# Since we've released the left mouse, we need to get a new mouse_click_start_pos next time
|
||||
#is_mouse_button_pressed is true.
|
||||
mouse_click_start_pos = null
|
||||
|
||||
# Store mouse_pos as last_mouse_pos now that we're done with _process.
|
||||
last_mouse_pos = mouse_pos
|
||||
|
||||
|
||||
func check_if_mouse_is_inside_canvas():
|
||||
# Make sure we have a mouse click starting position.
|
||||
if mouse_click_start_pos != null:
|
||||
# Make sure the mouse click starting position is inside the canvas.
|
||||
# This is so if we start out click outside the canvas (say chosing a color from the color picker)
|
||||
# and then move our mouse back into the canvas, it won't start painting.
|
||||
if mouse_click_start_pos.x > TL_node.global_position.x:
|
||||
if mouse_click_start_pos.y > TL_node.global_position.y:
|
||||
# Make sure the current mouse position is inside the canvas.
|
||||
if is_mouse_in_drawing_area:
|
||||
return true
|
||||
return false
|
||||
|
||||
|
||||
func undo_stroke():
|
||||
# Only undo a stroke if we have one.
|
||||
if undo_element_list_num == UNDO_NONE:
|
||||
return
|
||||
|
||||
# If we are undoing a shape, then we can just remove the latest brush.
|
||||
if undo_element_list_num == UNDO_MODE_SHAPE:
|
||||
if brush_data_list.size() > 0:
|
||||
brush_data_list.remove(brush_data_list.size() - 1)
|
||||
|
||||
# Now that we've undone a shape, we cannot undo again until another stoke is added.
|
||||
undo_element_list_num = UNDO_NONE
|
||||
# NOTE: if we only had shape brushes, then we could remove the above line and could let the user
|
||||
# undo until we have a empty element list.
|
||||
|
||||
# Otherwise we're removing a either a pencil stroke or a eraser stroke.
|
||||
else:
|
||||
# Figure out how many elements/brushes we've added in the last stroke.
|
||||
var elements_to_remove = brush_data_list.size() - undo_element_list_num
|
||||
# Remove all of the elements we've added this in the last stroke.
|
||||
#warning-ignore:unused_variable
|
||||
for elment_num in range(0, elements_to_remove):
|
||||
brush_data_list.pop_back()
|
||||
|
||||
# Now that we've undone a stoke, we cannot undo again until another stoke is added.
|
||||
undo_element_list_num = UNDO_NONE
|
||||
|
||||
# Redraw the brushes
|
||||
update()
|
||||
|
||||
|
||||
func add_brush(mouse_pos, type):
|
||||
# Make new brush dictionary that will hold all of the data we need for the brush.
|
||||
var new_brush = {}
|
||||
|
||||
# Populate the dictionary with values based on the global brush variables.
|
||||
# We will override these as needed if the brush is a rectange or circle.
|
||||
new_brush.brush_type = type
|
||||
new_brush.brush_pos = mouse_pos
|
||||
new_brush.brush_shape = brush_shape
|
||||
new_brush.brush_size = brush_size
|
||||
new_brush.brush_color = brush_color
|
||||
|
||||
# If the new bursh is a rectangle shape, we need to calculate the top left corner of the rectangle and the
|
||||
# bottom right corner of the rectangle.
|
||||
if type == BrushModes.RECTANGLE_SHAPE:
|
||||
var TL_pos = Vector2()
|
||||
var BR_pos = Vector2()
|
||||
|
||||
# Figure out the left and right positions of the corners and assign them to the proper variable.
|
||||
if mouse_pos.x < mouse_click_start_pos.x:
|
||||
TL_pos.x = mouse_pos.x
|
||||
BR_pos.x = mouse_click_start_pos.x
|
||||
else:
|
||||
TL_pos.x = mouse_click_start_pos.x
|
||||
BR_pos.x = mouse_pos.x
|
||||
|
||||
# Figure out the top and bottom positions of the corners and assign them to the proper variable.
|
||||
if mouse_pos.y < mouse_click_start_pos.y:
|
||||
TL_pos.y = mouse_pos.y
|
||||
BR_pos.y = mouse_click_start_pos.y
|
||||
else:
|
||||
TL_pos.y = mouse_click_start_pos.y
|
||||
BR_pos.y = mouse_pos.y
|
||||
|
||||
# Assign the positions to the brush.
|
||||
new_brush.brush_pos = TL_pos
|
||||
new_brush.brush_shape_rect_pos_BR = BR_pos
|
||||
|
||||
# If the brush isa circle shape, then we need to calculate the radius of the circle.
|
||||
if type == BrushModes.CIRCLE_SHAPE:
|
||||
# Get the center point inbetween the mouse position and the position of the mouse when we clicked.
|
||||
var center_pos = Vector2((mouse_pos.x + mouse_click_start_pos.x) / 2, (mouse_pos.y + mouse_click_start_pos.y) / 2)
|
||||
# Assign the brush position to the center point, and calculate the radius of the circle using the distance from
|
||||
# the center to the top/bottom positon of the mouse.
|
||||
new_brush.brush_pos = center_pos
|
||||
new_brush.brush_shape_circle_radius = center_pos.distance_to(Vector2(center_pos.x, mouse_pos.y))
|
||||
|
||||
# Add the brush and update/draw all of the brushes.
|
||||
brush_data_list.append(new_brush)
|
||||
update()
|
||||
|
||||
|
||||
func _draw():
|
||||
# Go through all of the brushes in brush_data_list.
|
||||
for brush in brush_data_list:
|
||||
match brush.brush_type:
|
||||
BrushModes.PENCIL:
|
||||
# If the brush shape is a rectangle, then we need to make a Rect2 so we can use draw_rect.
|
||||
# Draw_rect draws a rectagle at the top left corner, using the scale for the size.
|
||||
# So we offset the position by half of the brush size so the rectangle's center is at mouse position.
|
||||
if brush.brush_shape == BrushShapes.RECTANGLE:
|
||||
var rect = Rect2(brush.brush_pos - Vector2(brush.brush_size / 2, brush.brush_size / 2), Vector2(brush.brush_size, brush.brush_size))
|
||||
draw_rect(rect, brush.brush_color)
|
||||
# If the brush shape is a circle, then we draw a circle at the mouse position,
|
||||
# making the radius half of brush size (so the circle is brush size pixels in diameter).
|
||||
elif brush.brush_shape == BrushShapes.CIRCLE:
|
||||
draw_circle(brush.brush_pos, brush.brush_size / 2, brush.brush_color)
|
||||
BrushModes.ERASER:
|
||||
# NOTE: this is a really cheap way of erasing that isn't really erasing!
|
||||
# However, this gives similar results in a fairy simple way!
|
||||
|
||||
# Erasing works exactly the same was as pencil does for both the rectangle shape and the circle shape,
|
||||
# but instead of using brush.brush_color, we instead use bg_color instead.
|
||||
if brush.brush_shape == BrushShapes.RECTANGLE:
|
||||
var rect = Rect2(brush.brush_pos - Vector2(brush.brush_size / 2, brush.brush_size / 2), Vector2(brush.brush_size, brush.brush_size))
|
||||
draw_rect(rect, bg_color)
|
||||
elif brush.brush_shape == BrushShapes.CIRCLE:
|
||||
draw_circle(brush.brush_pos, brush.brush_size / 2, bg_color)
|
||||
BrushModes.RECTANGLE_SHAPE:
|
||||
# We make a Rect2 with the postion at the top left. To get the size we take the bottom right position
|
||||
# and subtract the top left corner's position.
|
||||
var rect = Rect2(brush.brush_pos, brush.brush_shape_rect_pos_BR - brush.brush_pos)
|
||||
draw_rect(rect, brush.brush_color)
|
||||
BrushModes.CIRCLE_SHAPE:
|
||||
# We simply draw a circle using stored in brush.
|
||||
draw_circle(brush.brush_pos, brush.brush_shape_circle_radius, brush.brush_color)
|
||||
|
||||
|
||||
|
||||
func save_picture(path):
|
||||
# Wait a couple frames so the save dialog isn't in the way.
|
||||
yield (get_tree(), "idle_frame")
|
||||
yield (get_tree(), "idle_frame")
|
||||
|
||||
# Get the viewport image.
|
||||
var img = get_viewport().get_texture().get_data()
|
||||
# Crop the image so we only have canvas area.
|
||||
var cropped_image = img.get_rect(Rect2(TL_node.global_position, IMAGE_SIZE))
|
||||
# Flip the image on the Y-axis (it's flipped upside down by default).
|
||||
cropped_image.flip_y()
|
||||
|
||||
# Save the image with the passed in path we got from the save dialog.
|
||||
cropped_image.save_png(path)
|
||||
BIN
2d/gd_paint/PaintTools.png
Normal file
BIN
2d/gd_paint/PaintTools.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 440 B |
@@ -2,15 +2,15 @@
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/experiment.hdr-9c87b674db59b87ae6c71d507945718a.stex"
|
||||
path="res://.import/PaintTools.png-636e86a6d210b52282c946752bbcc6f1.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://experiment.hdr"
|
||||
dest_files=[ "res://.import/experiment.hdr-9c87b674db59b87ae6c71d507945718a.stex" ]
|
||||
source_file="res://PaintTools.png"
|
||||
dest_files=[ "res://.import/PaintTools.png-636e86a6d210b52282c946752bbcc6f1.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
220
2d/gd_paint/Paint_root.tscn
Normal file
220
2d/gd_paint/Paint_root.tscn
Normal file
@@ -0,0 +1,220 @@
|
||||
[gd_scene load_steps=5 format=2]
|
||||
|
||||
[ext_resource path="res://PaintControl.gd" type="Script" id=1]
|
||||
[ext_resource path="res://ToolsPanel.gd" type="Script" id=2]
|
||||
[ext_resource path="res://PaintTools.png" type="Texture" id=3]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id=1]
|
||||
bg_color = Color( 1, 1, 1, 1 )
|
||||
|
||||
[node name="PaintRoot" type="Control"]
|
||||
margin_right = 40.0
|
||||
margin_bottom = 40.0
|
||||
|
||||
[node name="DrawingAreaBG" type="Panel" parent="."]
|
||||
margin_left = 350.0
|
||||
margin_right = 1280.0
|
||||
margin_bottom = 720.0
|
||||
custom_styles/panelf = SubResource( 1 )
|
||||
custom_styles/panel = SubResource( 1 )
|
||||
custom_styles/panelnc = SubResource( 1 )
|
||||
|
||||
[node name="PaintControl" type="Control" parent="."]
|
||||
margin_right = 40.0
|
||||
margin_bottom = 40.0
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="TLPos" type="Position2D" parent="PaintControl"]
|
||||
position = Vector2( 350, 0 )
|
||||
|
||||
[node name="ToolsPanel" type="Panel" parent="."]
|
||||
margin_right = 350.0
|
||||
margin_bottom = 720.0
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="LabelTools" type="Label" parent="ToolsPanel"]
|
||||
margin_left = 20.0
|
||||
margin_top = 10.0
|
||||
margin_right = 330.0
|
||||
margin_bottom = 24.0
|
||||
text = "Selected tool: Pencil"
|
||||
align = 1
|
||||
|
||||
[node name="ButtonToolPencil" type="Button" parent="ToolsPanel"]
|
||||
margin_left = 40.0
|
||||
margin_top = 40.0
|
||||
margin_right = 100.0
|
||||
margin_bottom = 100.0
|
||||
|
||||
[node name="Sprite" type="Sprite" parent="ToolsPanel/ButtonToolPencil"]
|
||||
position = Vector2( 30, 30 )
|
||||
scale = Vector2( 2.5, 2.5 )
|
||||
texture = ExtResource( 3 )
|
||||
region_enabled = true
|
||||
region_rect = Rect2( 0, 0, 16, 16 )
|
||||
|
||||
[node name="ButtonToolEraser" type="Button" parent="ToolsPanel"]
|
||||
margin_left = 110.0
|
||||
margin_top = 40.0
|
||||
margin_right = 170.0
|
||||
margin_bottom = 100.0
|
||||
|
||||
[node name="Sprite" type="Sprite" parent="ToolsPanel/ButtonToolEraser"]
|
||||
position = Vector2( 30, 30 )
|
||||
scale = Vector2( 2.5, 2.5 )
|
||||
texture = ExtResource( 3 )
|
||||
region_enabled = true
|
||||
region_rect = Rect2( 16, 0, 16, 16 )
|
||||
|
||||
[node name="ButtonToolRectangle" type="Button" parent="ToolsPanel"]
|
||||
margin_left = 180.0
|
||||
margin_top = 40.0
|
||||
margin_right = 240.0
|
||||
margin_bottom = 100.0
|
||||
|
||||
[node name="Sprite" type="Sprite" parent="ToolsPanel/ButtonToolRectangle"]
|
||||
position = Vector2( 30, 30 )
|
||||
scale = Vector2( 2.5, 2.5 )
|
||||
texture = ExtResource( 3 )
|
||||
region_enabled = true
|
||||
region_rect = Rect2( 0, 16, 16, 16 )
|
||||
|
||||
[node name="ButtonToolCircle" type="Button" parent="ToolsPanel"]
|
||||
margin_left = 250.0
|
||||
margin_top = 40.0
|
||||
margin_right = 310.0
|
||||
margin_bottom = 100.0
|
||||
|
||||
[node name="Sprite" type="Sprite" parent="ToolsPanel/ButtonToolCircle"]
|
||||
position = Vector2( 30, 30 )
|
||||
scale = Vector2( 2.5, 2.5 )
|
||||
texture = ExtResource( 3 )
|
||||
region_enabled = true
|
||||
region_rect = Rect2( 16, 16, 16, 16 )
|
||||
|
||||
[node name="LabelBrushColor" type="Label" parent="ToolsPanel"]
|
||||
margin_left = 20.0
|
||||
margin_top = 120.0
|
||||
margin_right = 330.0
|
||||
margin_bottom = 134.0
|
||||
text = "Current color"
|
||||
align = 1
|
||||
|
||||
[node name="ColorPickerBrush" type="ColorPickerButton" parent="ToolsPanel"]
|
||||
margin_left = 20.0
|
||||
margin_top = 140.0
|
||||
margin_right = 330.0
|
||||
margin_bottom = 190.0
|
||||
|
||||
[node name="BrushSettings" type="Control" parent="ToolsPanel"]
|
||||
margin_top = 200.0
|
||||
margin_right = 350.0
|
||||
margin_bottom = 375.0
|
||||
|
||||
[node name="LabelBrushSize" type="Label" parent="ToolsPanel/BrushSettings"]
|
||||
margin_left = 20.0
|
||||
margin_top = 10.0
|
||||
margin_right = 330.0
|
||||
margin_bottom = 24.0
|
||||
text = "Brush size: 32px"
|
||||
align = 1
|
||||
|
||||
[node name="HScrollBarBrushSize" type="HScrollBar" parent="ToolsPanel/BrushSettings"]
|
||||
margin_left = 20.0
|
||||
margin_top = 30.0
|
||||
margin_right = 330.0
|
||||
margin_bottom = 60.0
|
||||
min_value = 2.0
|
||||
step = 1.0
|
||||
value = 32.0
|
||||
|
||||
[node name="LabelBrushShape" type="Label" parent="ToolsPanel/BrushSettings"]
|
||||
margin_left = 20.0
|
||||
margin_top = 80.0
|
||||
margin_right = 330.0
|
||||
margin_bottom = 94.0
|
||||
text = "Brush shape: Circle"
|
||||
align = 1
|
||||
|
||||
[node name="ButtonShapeBox" type="Button" parent="ToolsPanel/BrushSettings"]
|
||||
editor/display_folded = true
|
||||
margin_left = 100.0
|
||||
margin_top = 100.0
|
||||
margin_right = 160.0
|
||||
margin_bottom = 160.0
|
||||
|
||||
[node name="Sprite" type="Sprite" parent="ToolsPanel/BrushSettings/ButtonShapeBox"]
|
||||
position = Vector2( 30, 30 )
|
||||
scale = Vector2( 2.5, 2.5 )
|
||||
texture = ExtResource( 3 )
|
||||
region_enabled = true
|
||||
region_rect = Rect2( 0, 16, 16, 16 )
|
||||
|
||||
[node name="ButtonShapeCircle" type="Button" parent="ToolsPanel/BrushSettings"]
|
||||
editor/display_folded = true
|
||||
margin_left = 190.0
|
||||
margin_top = 100.0
|
||||
margin_right = 250.0
|
||||
margin_bottom = 160.0
|
||||
|
||||
[node name="Sprite" type="Sprite" parent="ToolsPanel/BrushSettings/ButtonShapeCircle"]
|
||||
position = Vector2( 30, 30 )
|
||||
scale = Vector2( 2.5, 2.5 )
|
||||
texture = ExtResource( 3 )
|
||||
region_enabled = true
|
||||
region_rect = Rect2( 16, 16, 16, 16 )
|
||||
|
||||
[node name="LabelBackgroundColor" type="Label" parent="ToolsPanel"]
|
||||
margin_left = 20.0
|
||||
margin_top = 400.0
|
||||
margin_right = 330.0
|
||||
margin_bottom = 414.0
|
||||
text = "Background color"
|
||||
align = 1
|
||||
|
||||
[node name="ColorPickerBackground" type="ColorPickerButton" parent="ToolsPanel"]
|
||||
margin_left = 20.0
|
||||
margin_top = 420.0
|
||||
margin_right = 330.0
|
||||
margin_bottom = 470.0
|
||||
color = Color( 1, 1, 1, 1 )
|
||||
edit_alpha = false
|
||||
|
||||
[node name="LabelStats" type="Label" parent="ToolsPanel"]
|
||||
modulate = Color( 0.414062, 0.414062, 0.414062, 1 )
|
||||
margin_left = 20.0
|
||||
margin_top = 590.0
|
||||
margin_right = 330.0
|
||||
margin_bottom = 604.0
|
||||
text = "Brush objects: 00000"
|
||||
align = 1
|
||||
|
||||
[node name="ButtonUndo" type="Button" parent="ToolsPanel"]
|
||||
margin_left = 10.0
|
||||
margin_top = 520.0
|
||||
margin_right = 340.0
|
||||
margin_bottom = 560.0
|
||||
text = "Undo last stroke"
|
||||
|
||||
[node name="ButtonSave" type="Button" parent="ToolsPanel"]
|
||||
margin_left = 10.0
|
||||
margin_top = 620.0
|
||||
margin_right = 340.0
|
||||
margin_bottom = 660.0
|
||||
text = "Save picture"
|
||||
|
||||
[node name="ButtonClear" type="Button" parent="ToolsPanel"]
|
||||
margin_left = 10.0
|
||||
margin_top = 670.0
|
||||
margin_right = 340.0
|
||||
margin_bottom = 710.0
|
||||
text = "Clear picture"
|
||||
|
||||
[node name="SaveFileDialog" type="FileDialog" parent="."]
|
||||
margin_right = 600.0
|
||||
margin_bottom = 400.0
|
||||
resizable = true
|
||||
access = 2
|
||||
filters = PoolStringArray( "*.png" )
|
||||
current_dir = "/home/aaronfranke/workspace/godot-demo-projects/2d/gd_paint"
|
||||
current_path = "/home/aaronfranke/workspace/godot-demo-projects/2d/gd_paint/"
|
||||
116
2d/gd_paint/ToolsPanel.gd
Normal file
116
2d/gd_paint/ToolsPanel.gd
Normal file
@@ -0,0 +1,116 @@
|
||||
extends Panel
|
||||
|
||||
var paint_control
|
||||
|
||||
onready var brush_settings = $BrushSettings
|
||||
onready var label_tools = $LabelTools
|
||||
onready var label_brush_size = $BrushSettings/LabelBrushSize
|
||||
onready var label_brush_shape = $BrushSettings/LabelBrushShape
|
||||
onready var label_stats = $LabelStats
|
||||
|
||||
var save_dialog
|
||||
|
||||
func _ready():
|
||||
# Get PaintControl and SaveFileDialog.
|
||||
paint_control = get_parent().get_node("PaintControl")
|
||||
save_dialog = get_parent().get_node("SaveFileDialog")
|
||||
|
||||
# warning-ignore-all:return_value_discarded
|
||||
# Assign all of the needed signals for the oppersation buttons.
|
||||
$ButtonUndo.connect("pressed", self, "button_pressed", ["undo_stroke"])
|
||||
$ButtonSave.connect("pressed", self, "button_pressed", ["save_picture"])
|
||||
$ButtonClear.connect("pressed", self, "button_pressed", ["clear_picture"])
|
||||
|
||||
# Assign all of the needed signals for the brush buttons.
|
||||
$ButtonToolPencil.connect("pressed", self, "button_pressed", ["mode_pencil"])
|
||||
$ButtonToolEraser.connect("pressed", self, "button_pressed", ["mode_eraser"])
|
||||
$ButtonToolRectangle.connect("pressed", self, "button_pressed", ["mode_rectangle"])
|
||||
$ButtonToolCircle.connect("pressed", self, "button_pressed", ["mode_circle"])
|
||||
$BrushSettings/ButtonShapeBox.connect("pressed", self, "button_pressed", ["shape_rectangle"])
|
||||
$BrushSettings/ButtonShapeCircle.connect("pressed", self, "button_pressed", ["shape_circle"])
|
||||
|
||||
# Assign all of the needed signals for the other brush settings (and ColorPickerBackground).
|
||||
$ColorPickerBrush.connect("color_changed", self, "brush_color_changed")
|
||||
$ColorPickerBackground.connect("color_changed", self, "background_color_changed")
|
||||
$BrushSettings/HScrollBarBrushSize.connect("value_changed", self, "brush_size_changed")
|
||||
|
||||
# Assign the 'file_selected' signal in SaveFileDialog.
|
||||
save_dialog.connect("file_selected", self, "save_file_selected")
|
||||
|
||||
# Set physics process so we can update the status label.
|
||||
set_physics_process(true)
|
||||
|
||||
|
||||
func _physics_process(_delta):
|
||||
# Update the status label with the newest brush element count.
|
||||
label_stats.text = "Brush objects: " + String(paint_control.brush_data_list.size())
|
||||
|
||||
|
||||
func button_pressed(button_name):
|
||||
# If a brush mode button is pressed.
|
||||
var tool_name = null
|
||||
var shape_name = null
|
||||
|
||||
if button_name == "mode_pencil":
|
||||
paint_control.brush_mode = paint_control.BrushModes.PENCIL
|
||||
brush_settings.modulate = Color(1, 1, 1, 1)
|
||||
tool_name = "Pencil"
|
||||
elif button_name == "mode_eraser":
|
||||
paint_control.brush_mode = paint_control.BrushModes.ERASER
|
||||
brush_settings.modulate = Color(1, 1, 1, 1)
|
||||
tool_name = "Eraser"
|
||||
elif button_name == "mode_rectangle":
|
||||
paint_control.brush_mode = paint_control.BrushModes.RECTANGLE_SHAPE
|
||||
brush_settings.modulate = Color(1, 1, 1, 0.5)
|
||||
tool_name = "Rectangle shape"
|
||||
elif button_name == "mode_circle":
|
||||
paint_control.brush_mode = paint_control.BrushModes.CIRCLE_SHAPE
|
||||
brush_settings.modulate = Color(1, 1, 1, 0.5)
|
||||
tool_name = "Circle shape"
|
||||
|
||||
# If a brush shape button is pressed
|
||||
elif button_name == "shape_rectangle":
|
||||
paint_control.brush_shape = paint_control.BrushShapes.RECTANGLE
|
||||
shape_name = "Rectangle"
|
||||
elif button_name == "shape_circle":
|
||||
paint_control.brush_shape = paint_control.BrushShapes.CIRCLE
|
||||
shape_name = "Circle";
|
||||
|
||||
# If a opperation button is pressed
|
||||
elif button_name == "clear_picture":
|
||||
paint_control.brush_data_list = []
|
||||
paint_control.update()
|
||||
elif button_name == "save_picture":
|
||||
save_dialog.popup_centered()
|
||||
elif button_name == "undo_stroke":
|
||||
paint_control.undo_stroke()
|
||||
|
||||
# Update the labels (in case the brush mode or brush shape has changed).
|
||||
if tool_name != null:
|
||||
label_tools.text = "Selected tool: " + tool_name
|
||||
if shape_name != null:
|
||||
label_brush_shape.text = "Brush shape: " + shape_name
|
||||
|
||||
|
||||
func brush_color_changed(color):
|
||||
# Change the brush color to whatever color the color picker is.
|
||||
paint_control.brush_color = color
|
||||
|
||||
|
||||
func background_color_changed(color):
|
||||
# Change the background color to whatever colorthe background color picker is.
|
||||
get_parent().get_node("DrawingAreaBG").modulate = color
|
||||
paint_control.bg_color = color
|
||||
# Because of how the eraser works we also need to redraw the paint control.
|
||||
paint_control.update()
|
||||
|
||||
|
||||
func brush_size_changed(value):
|
||||
# Change the size of the brush, and update the label to reflect the new value.
|
||||
paint_control.brush_size = ceil(value)
|
||||
label_brush_size.text = "Brush size: " + String(ceil(value)) + "px"
|
||||
|
||||
|
||||
func save_file_selected(path):
|
||||
# Call save_picture in paint_control, passing in the path we recieved from SaveFileDialog.
|
||||
paint_control.save_picture(path)
|
||||
14
2d/gd_paint/default_env.tres
Normal file
14
2d/gd_paint/default_env.tres
Normal file
@@ -0,0 +1,14 @@
|
||||
[gd_resource type="Environment" load_steps=2 format=2]
|
||||
|
||||
[sub_resource type="ProceduralSky" id=1]
|
||||
sky_top_color = Color( 0.0470588, 0.454902, 0.976471, 1 )
|
||||
sky_horizon_color = Color( 0.556863, 0.823529, 0.909804, 1 )
|
||||
sky_curve = 0.25
|
||||
ground_bottom_color = Color( 0.101961, 0.145098, 0.188235, 1 )
|
||||
ground_horizon_color = Color( 0.482353, 0.788235, 0.952941, 1 )
|
||||
ground_curve = 0.01
|
||||
sun_energy = 16.0
|
||||
|
||||
[resource]
|
||||
background_mode = 2
|
||||
background_sky = SubResource( 1 )
|
||||
BIN
2d/gd_paint/icon.png
Normal file
BIN
2d/gd_paint/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 884 B |
@@ -10,19 +10,24 @@ config_version=4
|
||||
|
||||
_global_script_classes=[ ]
|
||||
_global_script_class_icons={
|
||||
|
||||
}
|
||||
|
||||
[application]
|
||||
|
||||
config/name="DodgeTheCreepsCS"
|
||||
run/main_scene="res://Main.tscn"
|
||||
config/name="GD Paint"
|
||||
run/main_scene="res://Paint_root.tscn"
|
||||
config/icon="res://icon.png"
|
||||
|
||||
[display]
|
||||
|
||||
window/size/width=480
|
||||
window/size/width=1280
|
||||
window/size/height=720
|
||||
window/stretch/mode="2d"
|
||||
window/stretch/aspect="keep"
|
||||
|
||||
[gdnative]
|
||||
|
||||
singletons=[ ]
|
||||
|
||||
[rendering]
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -11,4 +11,3 @@ ground_curve = 0.01
|
||||
[resource]
|
||||
background_mode = 2
|
||||
background_sky = SubResource( 1 )
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
extends TileMap
|
||||
|
||||
enum CellType { EMPTY = -1, ACTOR, OBSTACLE, OBJECT}
|
||||
enum CellType { EMPTY = -1, ACTOR, OBSTACLE, OBJECT }
|
||||
|
||||
func _ready():
|
||||
for child in get_children():
|
||||
@@ -16,7 +16,7 @@ func get_cell_pawn(coordinates):
|
||||
func request_move(pawn, direction):
|
||||
var cell_start = world_to_map(pawn.position)
|
||||
var cell_target = cell_start + direction
|
||||
|
||||
|
||||
var cell_target_type = get_cellv(cell_target)
|
||||
match cell_target_type:
|
||||
CellType.EMPTY:
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
|
||||
@@ -82,4 +82,3 @@ position = Vector2( 1.43051e-06, -1.90735e-06 )
|
||||
texture = ExtResource( 2 )
|
||||
centered = false
|
||||
offset = Vector2( -32, -32 )
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
extends "pawn.gd"
|
||||
|
||||
onready var Grid = get_parent()
|
||||
onready var grid = get_parent()
|
||||
|
||||
func _ready():
|
||||
update_look_direction(Vector2(1, 0))
|
||||
update_look_direction(Vector2.RIGHT)
|
||||
|
||||
|
||||
func _process(_delta):
|
||||
@@ -12,7 +12,7 @@ func _process(_delta):
|
||||
return
|
||||
update_look_direction(input_direction)
|
||||
|
||||
var target_position = Grid.request_move(self, input_direction)
|
||||
var target_position = grid.request_move(self, input_direction)
|
||||
if target_position:
|
||||
move_to(target_position)
|
||||
else:
|
||||
@@ -21,8 +21,8 @@ func _process(_delta):
|
||||
|
||||
func get_input_direction():
|
||||
return Vector2(
|
||||
int(Input.is_action_pressed("ui_right")) - int(Input.is_action_pressed("ui_left")),
|
||||
int(Input.is_action_pressed("ui_down")) - int(Input.is_action_pressed("ui_up"))
|
||||
Input.get_action_strength("move_right") - Input.get_action_strength("move_left"),
|
||||
Input.get_action_strength("move_down") - Input.get_action_strength("move_up")
|
||||
)
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ func move_to(target_position):
|
||||
|
||||
# Stop the function execution until the animation finished
|
||||
yield($AnimationPlayer, "animation_finished")
|
||||
|
||||
|
||||
set_process(true)
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
extends Node2D
|
||||
|
||||
enum CellType { ACTOR, OBSTACLE, OBJECT }
|
||||
#warning-ignore:unused_class_variable
|
||||
export(CellType) var type = CellType.ACTOR
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/character.png-98ed16816c5b464731c4fa68fe5b8613.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/character_grey.png-a95d64c2e947e85f04dd1c6474e46965.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/star.png-4f164f82cf41ace82182660f1be8e68d.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ config_version=4
|
||||
|
||||
_global_script_classes=[ ]
|
||||
_global_script_class_icons={
|
||||
|
||||
}
|
||||
|
||||
[application]
|
||||
@@ -23,6 +22,43 @@ config/icon="res://icon.png"
|
||||
|
||||
window/size/width=1280
|
||||
window/size/height=720
|
||||
window/stretch/mode="2d"
|
||||
window/stretch/aspect="expand"
|
||||
|
||||
[input]
|
||||
|
||||
move_right={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
move_left={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"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":0,"axis":0,"axis_value":-1.0,"script":null)
|
||||
]
|
||||
}
|
||||
move_down={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"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":0,"axis":1,"axis_value":1.0,"script":null)
|
||||
]
|
||||
}
|
||||
move_up={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"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":0,"axis":1,"axis_value":-1.0,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[rendering]
|
||||
|
||||
|
||||
@@ -17,4 +17,3 @@ texture = ExtResource( 2 )
|
||||
[node name="Object" type="Sprite" parent="."]
|
||||
position = Vector2( 160, 32 )
|
||||
texture = ExtResource( 3 )
|
||||
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/actor.png-6a88af8a7bcb079732153877dfb0db8b.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/object.png-3e89ebfb3424e8759914732b2b0130c1.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/obstacle.png-9f01dd1d06d7b99515918b65b46bd6c1.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
|
||||
@@ -7,4 +7,3 @@
|
||||
[node name="Grass" type="Sprite" parent="."]
|
||||
position = Vector2( 32, 32 )
|
||||
texture = ExtResource( 1 )
|
||||
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/grid_lines.png-beef853b47aa830c8383e5f6cc4d03ce.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
|
||||
extends Node2D
|
||||
|
||||
# Member variables
|
||||
const CAVE_LIMIT = 1000
|
||||
|
||||
onready var cave = $Cave
|
||||
|
||||
func _input(event):
|
||||
if event is InputEventMouseMotion and event.button_mask&1:
|
||||
if event is InputEventMouseMotion and event.button_mask > 0:
|
||||
var rel_x = event.relative.x
|
||||
var cavepos = $cave.position
|
||||
var cavepos = cave.position
|
||||
cavepos.x += rel_x
|
||||
if cavepos.x < -CAVE_LIMIT:
|
||||
cavepos.x = -CAVE_LIMIT
|
||||
elif cavepos.x > 0:
|
||||
cavepos.x = 0
|
||||
$cave.position = cavepos
|
||||
cave.position = cavepos
|
||||
|
||||
@@ -19,29 +19,38 @@ glow_strength = 0.88
|
||||
glow_blend_mode = 0
|
||||
glow_bicubic_upscale = true
|
||||
|
||||
[node name="hdr" type="Node2D"]
|
||||
[node name="BeachCave" type="Node2D"]
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="beach" type="Sprite" parent="."]
|
||||
[node name="Beach" type="Sprite" parent="."]
|
||||
modulate = Color( 2, 2, 2, 1 )
|
||||
self_modulate = Color( 2, 2, 2, 1 )
|
||||
texture = ExtResource( 2 )
|
||||
centered = false
|
||||
region_enabled = true
|
||||
region_rect = Rect2( 0, 0, 3840, 720 )
|
||||
|
||||
[node name="cave" type="Sprite" parent="."]
|
||||
[node name="Cave" type="Sprite" parent="."]
|
||||
self_modulate = Color( 0.233166, 0.221219, 0.23582, 1 )
|
||||
scale = Vector2( 1.2, 1 )
|
||||
texture = ExtResource( 3 )
|
||||
centered = false
|
||||
|
||||
[node name="environment" type="WorldEnvironment" parent="."]
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource( 1 )
|
||||
|
||||
[node name="Camera2D" type="Camera2D" parent="."]
|
||||
offset = Vector2( 540, 360 )
|
||||
current = true
|
||||
|
||||
[node name="Label" type="Label" parent="."]
|
||||
margin_right = 40.0
|
||||
margin_bottom = 13.0
|
||||
margin_left = 10.0
|
||||
margin_top = 10.0
|
||||
margin_right = 135.0
|
||||
margin_bottom = 24.0
|
||||
size_flags_horizontal = 2
|
||||
size_flags_vertical = 0
|
||||
custom_colors/font_color = Color( 0.213955, 0.205626, 0.20313, 1 )
|
||||
text = "Drag Left and Right"
|
||||
|
||||
text = "Drag Left and Right"
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/ocean_beach.png-b571ab5468cc775a520aaa47efbed607.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
@@ -16,7 +19,7 @@ compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/repeat=2
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/ocean_cave.png-2a86f381e3092b4cb698b627d778e19b.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ config_version=4
|
||||
|
||||
_global_script_classes=[ ]
|
||||
_global_script_class_icons={
|
||||
|
||||
}
|
||||
|
||||
[application]
|
||||
@@ -24,6 +23,8 @@ run/name=""
|
||||
|
||||
window/size/width=1080
|
||||
window/size/height=720
|
||||
window/stretch/mode="2d"
|
||||
window/stretch/aspect="expand"
|
||||
|
||||
[gdnative]
|
||||
|
||||
@@ -32,3 +33,7 @@ singletons=[ ]
|
||||
[rasterizer]
|
||||
|
||||
blur_buffer_size=128
|
||||
|
||||
[rendering]
|
||||
|
||||
environment/default_clear_color=Color( 0.05, 0.0453, 0.0265, 1 )
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-01.png-d71b23a59ce633973e2216144d4c3cc7.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-01.png"
|
||||
source_md5="0b890247b30e45539a651d35963dfeaa"
|
||||
|
||||
dest_files=[ "res://.import/WWT-01.png-d71b23a59ce633973e2216144d4c3cc7.stex" ]
|
||||
dest_md5="86ea33916c9166b19d7ec3ce0cbd9ffb"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-02.png-8c7a76bab1a896763ab37f5a7bf77904.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-02.png"
|
||||
source_md5="37986e5d93e3232705d23f4f08a5ac88"
|
||||
|
||||
dest_files=[ "res://.import/WWT-02.png-8c7a76bab1a896763ab37f5a7bf77904.stex" ]
|
||||
dest_md5="66b775a71e2f15ab81afc9dd299bb186"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-03.png-f804f0fa409c5c9ad521581b65c67f26.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-03.png"
|
||||
source_md5="efa48169ca94f0790be7f97ff91a4c33"
|
||||
|
||||
dest_files=[ "res://.import/WWT-03.png-f804f0fa409c5c9ad521581b65c67f26.stex" ]
|
||||
dest_md5="16a16663d435a8fc31167f029335712b"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-04.png-a50f93109e34b533b1855a7ef46475b2.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-04.png"
|
||||
source_md5="e1d2e0446506c40a8c197974b432d71f"
|
||||
|
||||
dest_files=[ "res://.import/WWT-04.png-a50f93109e34b533b1855a7ef46475b2.stex" ]
|
||||
dest_md5="cfd03f3cbb6eb0397ab14301ad9a0bf6"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-05.png-deee12124c9c3ab8368902f7733ff079.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-05.png"
|
||||
source_md5="66163c8b5cbcdd81c58c745c7d381b09"
|
||||
|
||||
dest_files=[ "res://.import/WWT-05.png-deee12124c9c3ab8368902f7733ff079.stex" ]
|
||||
dest_md5="d638f976c9bf00280c024c4eff364436"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-06.png-a16b61cdadeeed4ab2c9f5eec8b79c7c.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-06.png"
|
||||
source_md5="a67336cfc318936f10627e52a9c40faa"
|
||||
|
||||
dest_files=[ "res://.import/WWT-06.png-a16b61cdadeeed4ab2c9f5eec8b79c7c.stex" ]
|
||||
dest_md5="dcb8070807de1eb2da602cb41681036b"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-07.png-7cc4023daef4567752735bf79f2ccd12.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-07.png"
|
||||
source_md5="6484917359dde7cebfeb07c1e6cc9c31"
|
||||
|
||||
dest_files=[ "res://.import/WWT-07.png-7cc4023daef4567752735bf79f2ccd12.stex" ]
|
||||
dest_md5="fa94f39666e467e41aa662d2415809e2"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-08.png-7eaf3eb568b0293e3b28374e0bcfdf76.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-08.png"
|
||||
source_md5="78d6616e154e0ae38665a9b7773a983a"
|
||||
|
||||
dest_files=[ "res://.import/WWT-08.png-7eaf3eb568b0293e3b28374e0bcfdf76.stex" ]
|
||||
dest_md5="f72c01caa10db469d93dba5b2545d6d0"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-09.png-05c1bd2bd71982b595886c84d0655094.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-09.png"
|
||||
source_md5="b69b814834db2bd25e7965754113c2e7"
|
||||
|
||||
dest_files=[ "res://.import/WWT-09.png-05c1bd2bd71982b595886c84d0655094.stex" ]
|
||||
dest_md5="df7d41109fe474beb8ade30534463e6e"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-10.png-21f5bebc271347b73cd120c7671bcc04.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-10.png"
|
||||
source_md5="7142231c548c56c101ea10a71e1916f2"
|
||||
|
||||
dest_files=[ "res://.import/WWT-10.png-21f5bebc271347b73cd120c7671bcc04.stex" ]
|
||||
dest_md5="635e83eb9dae86298d0a9b796d9a3e12"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-11.png-c278f158b8ebe9b98a71fa01d357ea55.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-11.png"
|
||||
source_md5="053fbf42bc9cebc1f3080de013242479"
|
||||
|
||||
dest_files=[ "res://.import/WWT-11.png-c278f158b8ebe9b98a71fa01d357ea55.stex" ]
|
||||
dest_md5="6953053ff83a3f7bf380158958c270f2"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-12.png-f99f6470cbf7469390137cc1b1eac0b1.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-12.png"
|
||||
source_md5="92fea3bd12983ee94d2ae6b76323fae6"
|
||||
|
||||
dest_files=[ "res://.import/WWT-12.png-f99f6470cbf7469390137cc1b1eac0b1.stex" ]
|
||||
dest_md5="df7d0edfc4e6bdb9a770741421ad2463"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-13.png-b831a7b68dbcdd483e454623cca7af6a.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-13.png"
|
||||
source_md5="1bdfe15639bf81bdb17702a65f221602"
|
||||
|
||||
dest_files=[ "res://.import/WWT-13.png-b831a7b68dbcdd483e454623cca7af6a.stex" ]
|
||||
dest_md5="1073c6b45ae80c07e84c7dabac233bbd"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-14.png-473aa39bbfdbf2d9ac37478ba67ab5a8.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-14.png"
|
||||
source_md5="0908e9c76ad828f0be20b97ba14f0120"
|
||||
|
||||
dest_files=[ "res://.import/WWT-14.png-473aa39bbfdbf2d9ac37478ba67ab5a8.stex" ]
|
||||
dest_md5="9fbfb2ce92fa1f447b94a4cc000f6d22"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-15.png-f958cd09bdaf7066eb31dea2b35a59fe.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-15.png"
|
||||
source_md5="42f95b729214f019cd546eb5003b4791"
|
||||
|
||||
dest_files=[ "res://.import/WWT-15.png-f958cd09bdaf7066eb31dea2b35a59fe.stex" ]
|
||||
dest_md5="1db7da48083097925eb77bfbb089ca16"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-16.png-1027e2a388bf820efb40bb630699acf6.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-16.png"
|
||||
source_md5="572d9319266e28fbbbcce87eff3c8484"
|
||||
|
||||
dest_files=[ "res://.import/WWT-16.png-1027e2a388bf820efb40bb630699acf6.stex" ]
|
||||
dest_md5="82b3aed42579c489f6e13095edd6f504"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
@@ -1,32 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/WWT-17.png-06a724fd2ea7c875038b30870c815f35.stex"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://WWT-17.png"
|
||||
source_md5="1d732fced181b9d10debe504d905dc56"
|
||||
|
||||
dest_files=[ "res://.import/WWT-17.png-06a724fd2ea7c875038b30870c815f35.stex" ]
|
||||
dest_md5="6ad6b9d8fda151bbcfcab7bc82e1e582"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user