Platformer demo now uses Kinematic Controller

This commit is contained in:
Juan Linietsky
2016-09-04 23:14:23 -03:00
parent 5ee9e3cf6a
commit 1a7e9e0dc4
63 changed files with 2843 additions and 561 deletions

View File

@@ -1,16 +1,9 @@
extends RigidBody2D
# Member variables
var disabled = false
func disable():
if (disabled):
return
func _on_bullet_body_enter( body ):
if (body.has_method("hit_by_bullet")):
body.call("hit_by_bullet")
func _on_Timer_timeout():
get_node("anim").play("shutdown")
disabled = true
func _ready():
get_node("Timer").start()

View File

@@ -21,14 +21,17 @@ step = 0.0
tracks/0/type = "value"
tracks/0/path = NodePath("particles:config/emitting")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ false ] }
tracks/0/imported = false
tracks/0/keys = { "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "update":1, "values":[ false ] }
tracks/1/type = "value"
tracks/1/path = NodePath("sprite:visibility/self_opacity")
tracks/1/interp = 1
tracks/1/keys = { "cont":true, "times":FloatArray( 0, 1.00394 ), "transitions":FloatArray( 1, 1 ), "values":[ 1.0, 0.0 ] }
tracks/1/imported = false
tracks/1/keys = { "times":FloatArray( 0, 1.00394 ), "transitions":FloatArray( 1, 1 ), "update":0, "values":[ 1.0, 0.0 ] }
tracks/2/type = "method"
tracks/2/path = NodePath(".")
tracks/2/interp = 1
tracks/2/imported = false
tracks/2/keys = { "times":FloatArray( 1.31 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
[node name="bullet" type="RigidBody2D"]
@@ -46,8 +49,8 @@ bounce = 0.0
gravity_scale = 1.0
custom_integrator = false
continuous_cd = 2
contacts_reported = 0
contact_monitor = false
contacts_reported = 3
contact_monitor = true
sleeping = false
can_sleep = true
velocity/linear = Vector2( 0, 0 )
@@ -97,7 +100,7 @@ _update_shape_index = -1
process_mode = 1
wait_time = 1.0
one_shot = true
autostart = false
autostart = true
[node name="anim" type="AnimationPlayer" parent="."]
@@ -110,6 +113,8 @@ playback/speed = 1.0
blend_times = [ ]
autoplay = ""
[connection signal="timeout" from="Timer" to="." method="disable"]
[connection signal="body_enter" from="." to="." method="_on_bullet_body_enter"]
[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"]

View File

@@ -1,19 +1,11 @@
extends Area2D
var taken=false
# Member variables
var taken = false
func _on_body_enter( body ):
func _on_coin_body_enter( body ):
if (not taken and body extends preload("res://player.gd")):
get_node("anim").play("taken")
taken = true
func _on_coin_area_enter(area):
pass # replace with function body
func _on_coin_area_enter_shape(area_id, area, area_shape, area_shape):
pass # replace with function body
taken=true

View File

@@ -19,7 +19,8 @@ step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25, 1.5 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1 ), "values":[ 0, 1, 2, 3, 2, 1, 0 ] }
tracks/0/imported = false
tracks/0/keys = { "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25, 1.5 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1 ), "update":1, "values":[ 0, 1, 2, 3, 2, 1, 0 ] }
[sub_resource type="Animation" id=3]
@@ -29,26 +30,32 @@ step = 0.0
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":true, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 0 ] }
tracks/0/imported = false
tracks/0/keys = { "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "update":0, "values":[ 0 ] }
tracks/1/type = "value"
tracks/1/path = NodePath("sound:play/play")
tracks/1/interp = 1
tracks/1/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ "coin" ] }
tracks/1/imported = false
tracks/1/keys = { "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "update":1, "values":[ "coin" ] }
tracks/2/type = "value"
tracks/2/path = NodePath("particles:visibility/self_opacity")
tracks/2/interp = 1
tracks/2/keys = { "cont":true, "times":FloatArray( 0, 1.66 ), "transitions":FloatArray( 1, 1 ), "values":[ 1.0, 0.0 ] }
tracks/2/imported = false
tracks/2/keys = { "times":FloatArray( 0, 1.66 ), "transitions":FloatArray( 1, 1 ), "update":0, "values":[ 1.0, 0.0 ] }
tracks/3/type = "value"
tracks/3/path = NodePath("sprite:visibility/self_opacity")
tracks/3/interp = 1
tracks/3/keys = { "cont":true, "times":FloatArray( 0, 0.4 ), "transitions":FloatArray( 1, 1 ), "values":[ 1.0, 0.0 ] }
tracks/3/imported = false
tracks/3/keys = { "times":FloatArray( 0, 0.4 ), "transitions":FloatArray( 1, 1 ), "update":0, "values":[ 1.0, 0.0 ] }
tracks/4/type = "value"
tracks/4/path = NodePath("particles:config/emitting")
tracks/4/interp = 1
tracks/4/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ true ] }
tracks/4/imported = false
tracks/4/keys = { "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "update":1, "values":[ true ] }
tracks/5/type = "method"
tracks/5/path = NodePath(".")
tracks/5/interp = 1
tracks/5/imported = false
tracks/5/keys = { "times":FloatArray( 2.7 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
[sub_resource type="SampleLibrary" id=4]
@@ -138,9 +145,10 @@ rect = Rect2( -10, -10, 20, 20 )
enabler/pause_animations = true
enabler/freeze_bodies = true
enabler/pause_particles = true
enabler/pause_animated_sprites = true
enabler/process_parent = false
enabler/fixed_process_parent = false
[connection signal="body_enter" from="." to="." method="_on_body_enter"]
[connection signal="body_enter" from="." to="." method="_on_coin_body_enter"]

View File

@@ -1,83 +1,58 @@
extends RigidBody2D
extends KinematicBody2D
# Member variables
const GRAVITY_VEC = Vector2(0,900)
const FLOOR_NORMAL = Vector2(0,-1)
const WALK_SPEED = 70
const STATE_WALKING = 0
const STATE_DYING = 1
const STATE_KILLED = 1
var linear_velocity = Vector2()
var direction = -1
var anim=""
var state = STATE_WALKING
var direction = -1
var anim = ""
onready var detect_floor_left = get_node("detect_floor_left")
onready var detect_wall_left = get_node("detect_wall_left")
onready var detect_floor_right = get_node("detect_floor_right")
onready var detect_wall_right = get_node("detect_wall_right")
onready var sprite = get_node("sprite")
var rc_left = null
var rc_right = null
var WALK_SPEED = 50
var bullet_class = preload("res://bullet.gd")
func _die():
queue_free()
func _pre_explode():
# Stay there
clear_shapes()
set_mode(MODE_STATIC)
get_node("sound").play("explode")
func _integrate_forces(s):
var lv = s.get_linear_velocity()
var new_anim = anim
if (state == STATE_DYING):
new_anim = "explode"
elif (state == STATE_WALKING):
new_anim = "walk"
var wall_side = 0.0
for i in range(s.get_contact_count()):
var cc = s.get_contact_collider_object(i)
var dp = s.get_contact_local_normal(i)
if (cc):
if (cc extends bullet_class and not cc.disabled):
set_mode(MODE_RIGID)
state = STATE_DYING
#lv = s.get_contact_local_normal(i)*400
s.set_angular_velocity(sign(dp.x)*33.0)
set_friction(1)
cc.disable()
get_node("sound").play("hit")
break
if (dp.x > 0.9):
wall_side = 1.0
elif (dp.x < -0.9):
wall_side = -1.0
if (wall_side != 0 and wall_side != direction):
direction = -direction
get_node("sprite").set_scale(Vector2(-direction, 1))
if (direction < 0 and not rc_left.is_colliding() and rc_right.is_colliding()):
direction = -direction
get_node("sprite").set_scale(Vector2(-direction, 1))
elif (direction > 0 and not rc_right.is_colliding() and rc_left.is_colliding()):
direction = -direction
get_node("sprite").set_scale(Vector2(-direction, 1))
lv.x = direction*WALK_SPEED
func _fixed_process(delta):
if(anim != new_anim):
anim = new_anim
var new_anim="idle"
if (state==STATE_WALKING):
linear_velocity+= GRAVITY_VEC*delta
linear_velocity.x = direction * WALK_SPEED
linear_velocity = move_and_slide( linear_velocity, FLOOR_NORMAL )
if (not detect_floor_left.is_colliding() or detect_wall_left.is_colliding()):
direction=1.0
if (not detect_floor_right.is_colliding() or detect_wall_right.is_colliding()):
direction=-1.0
sprite.set_scale( Vector2(direction,1.0) )
new_anim="walk"
else:
new_anim="explode"
if (anim!=new_anim):
anim=new_anim
get_node("anim").play(anim)
s.set_linear_velocity(lv)
func hit_by_bullet():
state=STATE_KILLED
func _ready():
rc_left = get_node("raycast_left")
rc_right = get_node("raycast_right")
set_fixed_process(true)

View File

@@ -6,33 +6,48 @@
[ext_resource path="res://sound_explode.wav" type="Sample" id=4]
[ext_resource path="res://sound_hit.wav" type="Sample" id=5]
[sub_resource type="CircleShape2D" id=1]
[sub_resource type="CapsuleShape2D" id=1]
custom_solver_bias = 0.0
radius = 14.0
radius = 13.4556
height = 14.2002
[sub_resource type="Animation" id=2]
resource/name = "explode"
length = 6.0
length = 2.0
loop = false
step = 0.0
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:visibility/self_opacity")
tracks/0/interp = 1
tracks/0/keys = { "cont":true, "times":FloatArray( 3.58422, 4.33851 ), "transitions":FloatArray( 1, 1 ), "values":[ 1.0, 0.0 ] }
tracks/0/imported = false
tracks/0/keys = { "times":FloatArray( 0.99422, 1.12851 ), "transitions":FloatArray( 1, 1 ), "update":0, "values":[ 1.0, 0.0 ] }
tracks/1/type = "value"
tracks/1/path = NodePath("sprite:frame")
tracks/1/interp = 1
tracks/1/keys = { "cont":true, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 4 ] }
tracks/1/imported = false
tracks/1/keys = { "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "update":0, "values":[ 4 ] }
tracks/2/type = "value"
tracks/2/path = NodePath("Particles2D:config/emitting")
tracks/2/interp = 1
tracks/2/keys = { "cont":false, "times":FloatArray( 3.47394 ), "transitions":FloatArray( 1 ), "values":[ true ] }
tracks/2/imported = false
tracks/2/keys = { "times":FloatArray( 1.19394 ), "transitions":FloatArray( 1 ), "update":1, "values":[ true ] }
tracks/3/type = "method"
tracks/3/path = NodePath(".")
tracks/3/interp = 1
tracks/3/keys = { "times":FloatArray( 3.20357, 5.07305 ), "transitions":FloatArray( 1, 1 ), "values":[ { "args":[ ], "method":"_pre_explode" }, { "args":[ ], "method":"_die" } ] }
tracks/3/imported = false
tracks/3/keys = { "times":FloatArray( 2.01305 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
tracks/4/type = "value"
tracks/4/path = NodePath("sprite:transform/rot")
tracks/4/interp = 1
tracks/4/imported = false
tracks/4/keys = { "times":FloatArray( 0, 0.99 ), "transitions":FloatArray( 1, 1 ), "update":0, "values":[ 0.0, 360.0 ] }
tracks/5/type = "value"
tracks/5/path = NodePath("sound:play/play")
tracks/5/interp = 1
tracks/5/imported = false
tracks/5/keys = { "times":FloatArray( 1.2 ), "transitions":FloatArray( 1 ), "update":2, "values":[ "explode" ] }
[sub_resource type="Animation" id=3]
@@ -42,7 +57,8 @@ step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.75, 1.5, 2.25, 3, 3.75, 4.5, 5.25, 6, 6.75 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), "values":[ 5, 6, 5, 6, 5, 6, 7, 6, 7, 5 ] }
tracks/0/imported = false
tracks/0/keys = { "times":FloatArray( 0, 0.75, 1.5, 2.25, 3, 3.75, 4.5, 5.25, 6, 6.75 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), "update":1, "values":[ 5, 6, 5, 6, 5, 6, 7, 6, 7, 5 ] }
[sub_resource type="Animation" id=4]
@@ -53,7 +69,8 @@ step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "values":[ 0, 1, 2, 3, 4, 0 ] }
tracks/0/imported = false
tracks/0/keys = { "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "update":1, "values":[ 0, 1, 2, 3, 4, 0 ] }
[sub_resource type="ColorRamp" id=5]
@@ -65,35 +82,15 @@ colors = ColorArray( 1, 0.884956, 0.823009, 1, 0.768627, 0.389381, 0, 0 )
samples/explode = { "db":0.0, "pitch":1.0, "sample":ExtResource( 4 ) }
samples/hit = { "db":0.0, "pitch":1.0, "sample":ExtResource( 5 ) }
[node name="enemy" type="RigidBody2D"]
[node name="enemy" type="KinematicBody2D"]
input/pickable = false
shapes/0/shape = SubResource( 1 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, -1.08072, -2.16144 )
shapes/0/transform = Matrix32( -4.37114e-08, -1, 1, -4.37114e-08, -0.00525069, -0.727495 )
shapes/0/trigger = false
shapes/1/shape = SubResource( 1 )
shapes/1/transform = Matrix32( 1, 0, 0, 1, 6.48431, 3.24216 )
shapes/1/trigger = false
shapes/2/shape = SubResource( 1 )
shapes/2/transform = Matrix32( 1, 0, 0, 1, -12.495, 3.53415 )
shapes/2/trigger = false
collision/layers = 1
collision/mask = 1
mode = 2
mass = 1.0
friction = 0.0
bounce = 0.0
gravity_scale = 1.0
custom_integrator = false
continuous_cd = 0
contacts_reported = 4
contact_monitor = false
sleeping = false
can_sleep = true
velocity/linear = Vector2( 0, 0 )
velocity/angular = 0.0
damp_override/linear = -1.0
damp_override/angular = -1.0
collision/margin = 0.08
script/script = ExtResource( 1 )
[node name="enabler" type="VisibilityEnabler2D" parent="."]
@@ -104,6 +101,7 @@ rect = Rect2( -10, -10, 20, 20 )
enabler/pause_animations = true
enabler/freeze_bodies = true
enabler/pause_particles = true
enabler/pause_animated_sprites = true
enabler/process_parent = false
enabler/fixed_process_parent = false
@@ -123,42 +121,52 @@ autoplay = ""
[node name="sprite" type="Sprite" parent="."]
texture = ExtResource( 2 )
flip_h = true
hframes = 8
frame = 4
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
transform/pos = Vector2( -1.08072, -2.16144 )
transform/pos = Vector2( -0.00525069, -0.727495 )
transform/rot = 90.0
shape = SubResource( 1 )
trigger = false
_update_shape_index = -1
_update_shape_index = 0
[node name="CollisionShape2D 2" type="CollisionShape2D" parent="."]
transform/pos = Vector2( 6.48431, 3.24216 )
shape = SubResource( 1 )
trigger = false
_update_shape_index = -1
[node name="CollisionShape2D 3" type="CollisionShape2D" parent="."]
transform/pos = Vector2( -12.495, 3.53415 )
shape = SubResource( 1 )
trigger = false
_update_shape_index = -1
[node name="raycast_left" type="RayCast2D" parent="."]
[node name="detect_floor_left" type="RayCast2D" parent="."]
transform/pos = Vector2( -33.2868, -9.34363 )
enabled = true
exclude_parent = true
cast_to = Vector2( 0, 45 )
layer_mask = 1
type_mask = 15
[node name="raycast_right" type="RayCast2D" parent="."]
[node name="detect_wall_left" type="RayCast2D" parent="."]
transform/pos = Vector2( -12.1361, -0.739977 )
transform/rot = -90.0
enabled = true
exclude_parent = true
cast_to = Vector2( 0, 20 )
layer_mask = 1
type_mask = 15
[node name="detect_wall_right" type="RayCast2D" parent="."]
transform/pos = Vector2( 3.2788, -0.381488 )
transform/rot = 90.0
enabled = true
exclude_parent = true
cast_to = Vector2( 0, 20 )
layer_mask = 1
type_mask = 15
[node name="detect_floor_right" type="RayCast2D" parent="."]
transform/pos = Vector2( 29.1987, -9.34363 )
enabled = true
exclude_parent = true
cast_to = Vector2( 0, 45 )
layer_mask = 1
type_mask = 15

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -1,232 +1,104 @@
extends RigidBody2D
extends KinematicBody2D
# Character Demo, written by Juan Linietsky.
#
# Implementation of a 2D Character controller.
# This implementation uses the physics engine for
# controlling a character, in a very similar way
# than a 3D character controller would be implemented.
#
# Using the physics engine for this has the main
# advantages:
# -Easy to write.
# -Interaction with other physics-based objects is free
# -Only have to deal with the object linear velocity, not position
# -All collision/area framework available
#
# But also has the following disadvantages:
#
# -Objects may bounce a little bit sometimes
# -Going up ramps sends the chracter flying up, small hack is needed.
# -A ray collider is needed to avoid sliding down on ramps and
# undesiderd bumps, small steps and rare numerical precision errors.
# (another alternative may be to turn on friction when the character is not moving).
# -Friction cant be used, so floor velocity must be considered
# for moving platforms.
const GRAVITY_VEC = Vector2(0,900)
const FLOOR_NORMAL = Vector2(0,-1)
const SLOPE_SLIDE_STOP = 25.0
const MIN_ONAIR_TIME = 0.1
const WALK_SPEED = 250 # pixels/sec
const JUMP_SPEED = 480
const SIDING_CHANGE_SPEED = 10
const BULLET_VELOCITY = 1000
const SHOOT_TIME_SHOW_WEAPON = 0.2
# Member variables
var anim = ""
var siding_left = false
var jumping = false
var stopping_jump = false
var shooting = false
var linear_vel = Vector2()
var onair_time = 0 #
var on_floor = false
var shoot_time=99999 #time since last shot
var WALK_ACCEL = 800.0
var WALK_DEACCEL = 800.0
var WALK_MAX_VELOCITY = 200.0
var AIR_ACCEL = 200.0
var AIR_DEACCEL = 200.0
var JUMP_VELOCITY = 460
var STOP_JUMP_FORCE = 900.0
var anim=""
var MAX_FLOOR_AIRBORNE_TIME = 0.15
#cache the sprite here for fast access (we will set scale to flip it often)
onready var sprite = get_node("sprite")
var airborne_time = 1e20
var shoot_time = 1e20
var MAX_SHOOT_POSE_TIME = 0.3
var bullet = preload("res://bullet.tscn")
var floor_h_velocity = 0.0
var enemy
func _integrate_forces(s):
var lv = s.get_linear_velocity()
var step = s.get_step()
func _fixed_process(delta):
var new_anim = anim
var new_siding_left = siding_left
#increment counters
# Get the controls
var move_left = Input.is_action_pressed("move_left")
var move_right = Input.is_action_pressed("move_right")
var jump = Input.is_action_pressed("jump")
var shoot = Input.is_action_pressed("shoot")
var spawn = Input.is_action_pressed("spawn")
onair_time+=delta
shoot_time+=delta
if spawn:
var e = enemy.instance()
var p = get_pos()
p.y = p.y - 100
e.set_pos(p)
get_parent().add_child(e)
# Deapply prev floor velocity
lv.x -= floor_h_velocity
floor_h_velocity = 0.0
### MOVEMENT ###
# Find the floor (a contact with upwards facing collision normal)
var found_floor = false
var floor_index = -1
for x in range(s.get_contact_count()):
var ci = s.get_contact_local_normal(x)
if (ci.dot(Vector2(0, -1)) > 0.6):
found_floor = true
floor_index = x
# A good idea when impementing characters of all kinds,
# compensates for physics imprecission, as well as human reaction delay.
if (shoot and not shooting):
shoot_time = 0
var bi = bullet.instance()
var ss
if (siding_left):
ss = -1.0
else:
ss = 1.0
var pos = get_pos() + get_node("bullet_shoot").get_pos()*Vector2(ss, 1.0)
# Apply Gravity
linear_vel += delta * GRAVITY_VEC
# Move and Slide
linear_vel = move_and_slide( linear_vel, FLOOR_NORMAL, SLOPE_SLIDE_STOP )
# Detect Floor
if (is_move_and_slide_on_floor()):
onair_time=0
bi.set_pos(pos)
get_parent().add_child(bi)
on_floor = onair_time < MIN_ONAIR_TIME
### CONTROL ###
# Horizontal Movement
var target_speed = 0
if (Input.is_action_pressed("move_left")):
target_speed += -1
if (Input.is_action_pressed("move_right")):
target_speed += 1
bi.set_linear_velocity(Vector2(800.0*ss, -80))
get_node("sprite/smoke").set_emitting(true)
target_speed *= WALK_SPEED
linear_vel.x = lerp( linear_vel.x, target_speed, 0.1 )
# Jumping
if (Input.is_action_just_pressed("jump")):
linear_vel.y=-JUMP_SPEED
get_node("sound").play("jump")
# Shooting
if (Input.is_action_just_pressed("shoot")):
var bullet = preload("res://bullet.tscn").instance()
bullet.set_pos( get_node("sprite/bullet_shoot").get_global_pos() ) #use node for shoot position
bullet.set_linear_velocity( Vector2( sprite.get_scale().x * BULLET_VELOCITY,0 ) )
bullet.add_collision_exception_with(self) # don't want player to collide with bullet
get_parent().add_child( bullet ) #don't want bullet to move with me, so add it as child of parent
get_node("sound").play("shoot")
PS2D.body_add_collision_exception(bi.get_rid(), get_rid()) # Make bullet and this not collide
else:
shoot_time += step
if (found_floor):
airborne_time = 0.0
else:
airborne_time += step # Time it spent in the air
var on_floor = airborne_time < MAX_FLOOR_AIRBORNE_TIME
# Process jump
if (jumping):
if (lv.y > 0):
# Set off the jumping flag if going down
jumping = false
elif (not jump):
stopping_jump = true
shoot_time=0
if (stopping_jump):
lv.y += STOP_JUMP_FORCE*step
### ANIMATION ###
var new_anim="idle"
if (on_floor):
# Process logic when character is on floor
if (move_left and not move_right):
if (lv.x > -WALK_MAX_VELOCITY):
lv.x -= WALK_ACCEL*step
elif (move_right and not move_left):
if (lv.x < WALK_MAX_VELOCITY):
lv.x += WALK_ACCEL*step
else:
var xv = abs(lv.x)
xv -= WALK_DEACCEL*step
if (xv < 0):
xv = 0
lv.x = sign(lv.x)*xv
# Check jump
if (not jumping and jump):
lv.y = -JUMP_VELOCITY
jumping = true
stopping_jump = false
get_node("sound").play("jump")
# Check siding
if (lv.x < 0 and move_left):
new_siding_left = true
elif (lv.x > 0 and move_right):
new_siding_left = false
if (jumping):
new_anim = "jumping"
elif (abs(lv.x) < 0.1):
if (shoot_time < MAX_SHOOT_POSE_TIME):
new_anim = "idle_weapon"
else:
new_anim = "idle"
else:
if (shoot_time < MAX_SHOOT_POSE_TIME):
new_anim = "run_weapon"
else:
new_anim = "run"
if (linear_vel.x < -SIDING_CHANGE_SPEED):
sprite.set_scale( Vector2( -1, 1 ) )
new_anim="run"
if (linear_vel.x > SIDING_CHANGE_SPEED):
sprite.set_scale( Vector2( 1, 1 ) )
new_anim="run"
else:
# Process logic when the character is in the air
if (move_left and not move_right):
if (lv.x > -WALK_MAX_VELOCITY):
lv.x -= AIR_ACCEL*step
elif (move_right and not move_left):
if (lv.x < WALK_MAX_VELOCITY):
lv.x += AIR_ACCEL*step
else:
var xv = abs(lv.x)
xv -= AIR_DEACCEL*step
if (xv < 0):
xv = 0
lv.x = sign(lv.x)*xv
if (lv.y < 0):
if (shoot_time < MAX_SHOOT_POSE_TIME):
new_anim = "jumping_weapon"
else:
new_anim = "jumping"
if (linear_vel.y < 0 ):
new_anim="jumping"
else:
if (shoot_time < MAX_SHOOT_POSE_TIME):
new_anim = "falling_weapon"
else:
new_anim = "falling"
# Update siding
if (new_siding_left != siding_left):
if (new_siding_left):
get_node("sprite").set_scale(Vector2(-1, 1))
else:
get_node("sprite").set_scale(Vector2(1, 1))
new_anim="falling"
siding_left = new_siding_left
if (shoot_time < SHOOT_TIME_SHOW_WEAPON):
new_anim+="_weapon"
# Change animation
if (new_anim != anim):
anim = new_anim
if (new_anim!=anim):
anim=new_anim
get_node("anim").play(anim)
shooting = shoot
# Apply floor velocity
if (found_floor):
floor_h_velocity = s.get_contact_collider_velocity_at_pos(floor_index).x
lv.x += floor_h_velocity
# Finally, apply gravity and set back the linear velocity
lv += s.get_total_gravity()*step
s.set_linear_velocity(lv)
func _ready():
enemy = ResourceLoader.load("res://enemy.tscn")
# if !Globals.has_singleton("Facebook"):
# return
# var Facebook = Globals.get_singleton("Facebook")
# var link = Globals.get("facebook/link")
# var icon = Globals.get("facebook/icon")
# var msg = "I just sneezed on your wall! Beat my score and Stop the Running nose!"
# var title = "I just sneezed on your wall!"
# Facebook.post("feed", msg, title, link, icon)
set_fixed_process(true)

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=25 format=1]
[gd_scene load_steps=24 format=1]
[ext_resource path="res://player.gd" type="Script" id=1]
[ext_resource path="res://robot_demo.png" type="Texture" id=2]
@@ -11,22 +11,18 @@
[ext_resource path="res://osb_jump.png" type="Texture" id=9]
[ext_resource path="res://osb_fire.png" type="Texture" id=10]
[sub_resource type="RayShape2D" id=1]
custom_solver_bias = 0.5
length = 20.0
[sub_resource type="ConvexPolygonShape2D" id=2]
[sub_resource type="CapsuleShape2D" id=1]
custom_solver_bias = 0.0
points = Vector2Array( -19.902, -24.8691, 19.3625, -24.6056, -0.138023, 16.5036 )
radius = 10.0
height = 44.4787
[sub_resource type="ColorRamp" id=3]
[sub_resource type="ColorRamp" id=2]
offsets = FloatArray( 0, 1 )
colors = ColorArray( 1, 1, 1, 1, 0, 0, 0, 0.0442478 )
[sub_resource type="Animation" id=4]
[sub_resource type="Animation" id=3]
resource/name = "crouch"
length = 0.01
@@ -35,9 +31,10 @@ step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 22 ] }
tracks/0/imported = false
tracks/0/keys = { "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "update":1, "values":[ 22 ] }
[sub_resource type="Animation" id=5]
[sub_resource type="Animation" id=4]
resource/name = "falling"
length = 0.01
@@ -46,9 +43,10 @@ step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 21 ] }
tracks/0/imported = false
tracks/0/keys = { "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "update":1, "values":[ 21 ] }
[sub_resource type="Animation" id=6]
[sub_resource type="Animation" id=5]
resource/name = "falling_weapon"
length = 0.5
@@ -57,9 +55,10 @@ step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 26 ] }
tracks/0/imported = false
tracks/0/keys = { "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "update":1, "values":[ 26 ] }
[sub_resource type="Animation" id=7]
[sub_resource type="Animation" id=6]
length = 7.0
loop = true
@@ -67,7 +66,19 @@ step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0, 1.25, 1.5, 2, 4.5, 4.75, 5, 5.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1 ), "values":[ 16, 17, 18, 16, 19, 20, 19, 16 ] }
tracks/0/imported = false
tracks/0/keys = { "times":FloatArray( 0, 1.25, 1.5, 2, 4.5, 4.75, 5, 5.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1 ), "update":1, "values":[ 16, 17, 18, 16, 19, 20, 19, 16 ] }
[sub_resource type="Animation" id=7]
length = 0.5
loop = true
step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/imported = false
tracks/0/keys = { "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "update":1, "values":[ 25 ] }
[sub_resource type="Animation" id=8]
@@ -77,7 +88,8 @@ step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 25 ] }
tracks/0/imported = false
tracks/0/keys = { "times":FloatArray( 0, 0.25, 0.5 ), "transitions":FloatArray( 1, 1, 1 ), "update":1, "values":[ 23, 24, 23 ] }
[sub_resource type="Animation" id=9]
@@ -87,17 +99,19 @@ step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5 ), "transitions":FloatArray( 1, 1, 1 ), "values":[ 23, 24, 23 ] }
tracks/0/imported = false
tracks/0/keys = { "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "update":1, "values":[ 26 ] }
[sub_resource type="Animation" id=10]
length = 0.5
length = 1.25
loop = true
step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 26 ] }
tracks/0/imported = false
tracks/0/keys = { "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "update":1, "values":[ 0, 1, 2, 3, 4, 0 ] }
[sub_resource type="Animation" id=11]
@@ -107,7 +121,8 @@ step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "values":[ 0, 1, 2, 3, 4, 0 ] }
tracks/0/imported = false
tracks/0/keys = { "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "update":1, "values":[ 5, 6, 7, 8, 9, 5 ] }
[sub_resource type="Animation" id=12]
@@ -117,50 +132,24 @@ step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "values":[ 5, 6, 7, 8, 9, 5 ] }
tracks/0/imported = false
tracks/0/keys = { "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "update":1, "values":[ 10, 11, 12, 13, 14, 5 ] }
[sub_resource type="Animation" id=13]
length = 1.25
loop = true
step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "values":[ 10, 11, 12, 13, 14, 5 ] }
[sub_resource type="SampleLibrary" id=14]
[sub_resource type="SampleLibrary" id=13]
samples/coin = { "db":0.0, "pitch":1.0, "sample":ExtResource( 4 ) }
samples/jump = { "db":0.0, "pitch":1.0, "sample":ExtResource( 5 ) }
samples/shoot = { "db":0.0, "pitch":1.0, "sample":ExtResource( 6 ) }
samples/coin = { "db":0.0, "pitch":1.0, "sample":ExtResource( 4 ) }
[node name="player" type="RigidBody2D"]
[node name="player" type="KinematicBody2D"]
input/pickable = false
shapes/0/shape = SubResource( 1 )
shapes/0/transform = Matrix32( 1, 0, 0, 1.76469, 0.291992, -12.1587 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0.291992, -0.835023 )
shapes/0/trigger = false
shapes/1/shape = SubResource( 2 )
shapes/1/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/1/trigger = false
collision/layers = 1
collision/mask = 1
mode = 2
mass = 3.0
friction = 0.0
bounce = 0.0
gravity_scale = 1.0
custom_integrator = true
continuous_cd = 0
contacts_reported = 3
contact_monitor = false
sleeping = false
can_sleep = true
velocity/linear = Vector2( 0, 0 )
velocity/angular = 0.0
damp_override/linear = -1.0
damp_override/angular = -1.0
collision/margin = 0.08
script/script = ExtResource( 1 )
[node name="sprite" type="Sprite" parent="."]
@@ -168,6 +157,7 @@ script/script = ExtResource( 1 )
texture = ExtResource( 2 )
vframes = 2
hframes = 16
frame = 22
[node name="smoke" type="Particles2D" parent="sprite"]
@@ -199,23 +189,27 @@ params/hue_variation = 0.0
params/anim_speed_scale = 1.0
params/anim_initial_pos = 0.0
randomness/spin_velocity = 2.0
color/color_ramp = SubResource( 3 )
color/color_ramp = SubResource( 2 )
[node name="bullet_shoot" type="Position2D" parent="sprite"]
transform/pos = Vector2( 30.6589, 6.13176 )
[node name="anim" type="AnimationPlayer" parent="."]
playback/process_mode = 1
playback/default_blend_time = 0.0
root/root = NodePath("..")
anims/crouch = SubResource( 4 )
anims/falling = SubResource( 5 )
anims/falling_weapon = SubResource( 6 )
anims/idle = SubResource( 7 )
anims/idle_weapon = SubResource( 8 )
anims/jumping = SubResource( 9 )
anims/jumping_weapon = SubResource( 10 )
anims/run = SubResource( 11 )
anims/run_weapon = SubResource( 12 )
anims/standing_weapon_ready = SubResource( 13 )
anims/crouch = SubResource( 3 )
anims/falling = SubResource( 4 )
anims/falling_weapon = SubResource( 5 )
anims/idle = SubResource( 6 )
anims/idle_weapon = SubResource( 7 )
anims/jumping = SubResource( 8 )
anims/jumping_weapon = SubResource( 9 )
anims/run = SubResource( 10 )
anims/run_weapon = SubResource( 11 )
anims/standing_weapon_ready = SubResource( 12 )
playback/active = true
playback/speed = 2.0
blend_times = [ ]
@@ -231,6 +225,7 @@ limit/left = 0
limit/top = 0
limit/right = 10000000
limit/bottom = 10000000
limit/smoothed = false
drag_margin/h_enabled = true
drag_margin/v_enabled = true
smoothing/enable = false
@@ -240,22 +235,17 @@ drag_margin/top = 0.2
drag_margin/right = 0.2
drag_margin/bottom = 0.2
[node name="bullet_shoot" type="Position2D" parent="."]
transform/pos = Vector2( 31.2428, 4.08784 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
transform/pos = Vector2( 0.291992, -12.1587 )
transform/scale = Vector2( 1, 1.76469 )
transform/pos = Vector2( 0.291992, -0.835023 )
shape = SubResource( 1 )
trigger = false
_update_shape_index = -1
_update_shape_index = 0
[node name="sound" type="SamplePlayer" parent="."]
config/polyphony = 1
config/samples = SubResource( 14 )
config/samples = SubResource( 13 )
default/volume_db = 0.0
default/pitch_scale = 1.0
default/pan = 0.0
@@ -269,13 +259,6 @@ default/reverb_room = 2
default/reverb_send = 0.0
default/chorus_send = 0.0
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
build_mode = 0
polygon = Vector2Array( -0.138023, 16.5036, -19.902, -24.8691, 19.3625, -24.6056 )
shape_range = Vector2( -1, -1 )
trigger = false
[node name="ui" type="CanvasLayer" parent="."]
layer = 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@@ -0,0 +1,16 @@
extends RigidBody2D
# Member variables
var disabled = false
func disable():
if (disabled):
return
get_node("anim").play("shutdown")
disabled = true
func _ready():
get_node("Timer").start()

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 B

View File

@@ -0,0 +1,115 @@
[gd_scene load_steps=6 format=1]
[ext_resource path="res://bullet.gd" type="Script" id=1]
[ext_resource path="res://bullet.png" type="Texture" id=2]
[sub_resource type="CircleShape2D" id=1]
custom_solver_bias = 0.0
radius = 10.0
[sub_resource type="ColorRamp" id=2]
offsets = FloatArray( 0, 1 )
colors = ColorArray( 1, 1, 1, 1, 1, 0, 0, 0 )
[sub_resource type="Animation" id=3]
length = 1.5
loop = false
step = 0.0
tracks/0/type = "value"
tracks/0/path = NodePath("particles:config/emitting")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ false ] }
tracks/1/type = "value"
tracks/1/path = NodePath("sprite:visibility/self_opacity")
tracks/1/interp = 1
tracks/1/keys = { "cont":true, "times":FloatArray( 0, 1.00394 ), "transitions":FloatArray( 1, 1 ), "values":[ 1.0, 0.0 ] }
tracks/2/type = "method"
tracks/2/path = NodePath(".")
tracks/2/interp = 1
tracks/2/keys = { "times":FloatArray( 1.31 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
[node name="bullet" type="RigidBody2D"]
input/pickable = false
shapes/0/shape = SubResource( 1 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
collision/layers = 1
collision/mask = 1
mode = 0
mass = 1.0
friction = 1.0
bounce = 0.0
gravity_scale = 1.0
custom_integrator = false
continuous_cd = 2
contacts_reported = 0
contact_monitor = false
sleeping = false
can_sleep = true
velocity/linear = Vector2( 0, 0 )
velocity/angular = 0.0
damp_override/linear = -1.0
damp_override/angular = -1.0
script/script = ExtResource( 1 )
[node name="particles" type="Particles2D" parent="."]
visibility/opacity = 0.559322
visibility/blend_mode = 1
config/amount = 24
config/lifetime = 0.1
config/local_space = false
config/texture = ExtResource( 2 )
params/direction = 0.0
params/spread = 10.0
params/linear_velocity = 0.0
params/spin_velocity = 0.0
params/orbit_velocity = 0.0
params/gravity_direction = 0.0
params/gravity_strength = 0.0
params/radial_accel = 0.0
params/tangential_accel = 0.0
params/damping = 0.0
params/initial_angle = 0.0
params/initial_size = 1.0
params/final_size = 0.0
params/hue_variation = 0.0
params/anim_speed_scale = 1.0
params/anim_initial_pos = 0.0
color/color_ramp = SubResource( 2 )
[node name="sprite" type="Sprite" parent="."]
texture = ExtResource( 2 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource( 1 )
trigger = false
_update_shape_index = -1
[node name="Timer" type="Timer" parent="."]
process_mode = 1
wait_time = 1.0
one_shot = true
autostart = false
[node name="anim" type="AnimationPlayer" parent="."]
playback/process_mode = 1
playback/default_blend_time = 0.0
root/root = NodePath("..")
anims/shutdown = SubResource( 3 )
playback/active = true
playback/speed = 1.0
blend_times = [ ]
autoplay = ""
[connection signal="timeout" from="Timer" to="." method="disable"]

19
2d/platformer_dcc/coin.gd Normal file
View File

@@ -0,0 +1,19 @@
extends Area2D
# Member variables
var taken = false
func _on_body_enter( body ):
if (not taken and body extends preload("res://player.gd")):
get_node("anim").play("taken")
taken = true
func _on_coin_area_enter(area):
pass # replace with function body
func _on_coin_area_enter_shape(area_id, area, area_shape, area_shape):
pass # replace with function body

BIN
2d/platformer_dcc/coin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

146
2d/platformer_dcc/coin.tscn Normal file
View File

@@ -0,0 +1,146 @@
[gd_scene load_steps=10 format=1]
[ext_resource path="res://coin.gd" type="Script" id=1]
[ext_resource path="res://coin.png" type="Texture" id=2]
[ext_resource path="res://sound_coin.wav" type="Sample" id=3]
[ext_resource path="res://bullet.png" type="Texture" id=4]
[sub_resource type="CircleShape2D" id=1]
custom_solver_bias = 0.0
radius = 10.0
[sub_resource type="Animation" id=2]
resource/name = "spin"
length = 1.5
loop = true
step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25, 1.5 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1 ), "values":[ 0, 1, 2, 3, 2, 1, 0 ] }
[sub_resource type="Animation" id=3]
length = 8.0
loop = false
step = 0.0
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":true, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 0 ] }
tracks/1/type = "value"
tracks/1/path = NodePath("sound:play/play")
tracks/1/interp = 1
tracks/1/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ "coin" ] }
tracks/2/type = "value"
tracks/2/path = NodePath("particles:visibility/self_opacity")
tracks/2/interp = 1
tracks/2/keys = { "cont":true, "times":FloatArray( 0, 1.66 ), "transitions":FloatArray( 1, 1 ), "values":[ 1.0, 0.0 ] }
tracks/3/type = "value"
tracks/3/path = NodePath("sprite:visibility/self_opacity")
tracks/3/interp = 1
tracks/3/keys = { "cont":true, "times":FloatArray( 0, 0.4 ), "transitions":FloatArray( 1, 1 ), "values":[ 1.0, 0.0 ] }
tracks/4/type = "value"
tracks/4/path = NodePath("particles:config/emitting")
tracks/4/interp = 1
tracks/4/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ true ] }
tracks/5/type = "method"
tracks/5/path = NodePath(".")
tracks/5/interp = 1
tracks/5/keys = { "times":FloatArray( 2.7 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
[sub_resource type="SampleLibrary" id=4]
samples/coin = { "db":0.0, "pitch":1.0, "sample":ExtResource( 3 ) }
[sub_resource type="ColorRamp" id=5]
offsets = FloatArray( 0, 1 )
colors = ColorArray( 1, 1, 1, 1, 0, 0, 0, 1 )
[node name="coin" type="Area2D"]
input/pickable = true
shapes/0/shape = SubResource( 1 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
gravity_vec = Vector2( 0, 1 )
gravity = 98.0
linear_damp = 0.1
angular_damp = 1.0
script/script = ExtResource( 1 )
[node name="sprite" type="Sprite" parent="."]
texture = ExtResource( 2 )
hframes = 4
[node name="anim" type="AnimationPlayer" parent="."]
playback/process_mode = 1
playback/default_blend_time = 0.0
root/root = NodePath("..")
anims/spin = SubResource( 2 )
anims/taken = SubResource( 3 )
playback/active = true
playback/speed = 3.0
blend_times = [ ]
autoplay = "spin"
[node name="collision" type="CollisionShape2D" parent="."]
shape = SubResource( 1 )
trigger = false
_update_shape_index = -1
[node name="sound" type="SamplePlayer2D" parent="."]
params/volume_db = 0.0
params/pitch_scale = 1.0
params/attenuation/min_distance = 1.0
params/attenuation/max_distance = 2048.0
params/attenuation/distance_exp = 1.0
config/polyphony = 1
config/samples = SubResource( 4 )
config/pitch_random = 0.0
[node name="particles" type="Particles2D" parent="."]
visibility/blend_mode = 1
config/amount = 8
config/lifetime = 0.4
config/emitting = false
config/half_extents = Vector2( 5, 5 )
config/texture = ExtResource( 4 )
params/direction = 0.0
params/spread = 10.0
params/linear_velocity = 0.0
params/spin_velocity = 0.0
params/orbit_velocity = 0.0
params/gravity_direction = 0.0
params/gravity_strength = 0.0
params/radial_accel = 0.0
params/tangential_accel = 0.0
params/damping = 0.0
params/initial_angle = 0.0
params/initial_size = 0.2
params/final_size = 0.2
params/hue_variation = 0.0
params/anim_speed_scale = 1.0
params/anim_initial_pos = 0.0
color/color_ramp = SubResource( 5 )
[node name="enabler" type="VisibilityEnabler2D" parent="."]
rect = Rect2( -10, -10, 20, 20 )
enabler/pause_animations = true
enabler/freeze_bodies = true
enabler/pause_particles = true
enabler/process_parent = false
enabler/fixed_process_parent = false
[connection signal="body_enter" from="." to="." method="_on_body_enter"]

View File

@@ -0,0 +1,83 @@
extends RigidBody2D
# Member variables
const STATE_WALKING = 0
const STATE_DYING = 1
var state = STATE_WALKING
var direction = -1
var anim = ""
var rc_left = null
var rc_right = null
var WALK_SPEED = 50
var bullet_class = preload("res://bullet.gd")
func _die():
queue_free()
func _pre_explode():
# Stay there
clear_shapes()
set_mode(MODE_STATIC)
get_node("sound").play("explode")
func _integrate_forces(s):
var lv = s.get_linear_velocity()
var new_anim = anim
if (state == STATE_DYING):
new_anim = "explode"
elif (state == STATE_WALKING):
new_anim = "walk"
var wall_side = 0.0
for i in range(s.get_contact_count()):
var cc = s.get_contact_collider_object(i)
var dp = s.get_contact_local_normal(i)
if (cc):
if (cc extends bullet_class and not cc.disabled):
set_mode(MODE_RIGID)
state = STATE_DYING
#lv = s.get_contact_local_normal(i)*400
s.set_angular_velocity(sign(dp.x)*33.0)
set_friction(1)
cc.disable()
get_node("sound").play("hit")
break
if (dp.x > 0.9):
wall_side = 1.0
elif (dp.x < -0.9):
wall_side = -1.0
if (wall_side != 0 and wall_side != direction):
direction = -direction
get_node("sprite").set_scale(Vector2(-direction, 1))
if (direction < 0 and not rc_left.is_colliding() and rc_right.is_colliding()):
direction = -direction
get_node("sprite").set_scale(Vector2(-direction, 1))
elif (direction > 0 and not rc_right.is_colliding() and rc_left.is_colliding()):
direction = -direction
get_node("sprite").set_scale(Vector2(-direction, 1))
lv.x = direction*WALK_SPEED
if(anim != new_anim):
anim = new_anim
get_node("anim").play(anim)
s.set_linear_velocity(lv)
func _ready():
rc_left = get_node("raycast_left")
rc_right = get_node("raycast_right")

BIN
2d/platformer_dcc/enemy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -0,0 +1,206 @@
[gd_scene load_steps=12 format=1]
[ext_resource path="res://enemy.gd" type="Script" id=1]
[ext_resource path="res://enemy.png" type="Texture" id=2]
[ext_resource path="res://bullet.png" type="Texture" id=3]
[ext_resource path="res://sound_explode.wav" type="Sample" id=4]
[ext_resource path="res://sound_hit.wav" type="Sample" id=5]
[sub_resource type="CircleShape2D" id=1]
custom_solver_bias = 0.0
radius = 14.0
[sub_resource type="Animation" id=2]
resource/name = "explode"
length = 6.0
loop = false
step = 0.0
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:visibility/self_opacity")
tracks/0/interp = 1
tracks/0/keys = { "cont":true, "times":FloatArray( 3.58422, 4.33851 ), "transitions":FloatArray( 1, 1 ), "values":[ 1.0, 0.0 ] }
tracks/1/type = "value"
tracks/1/path = NodePath("sprite:frame")
tracks/1/interp = 1
tracks/1/keys = { "cont":true, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 4 ] }
tracks/2/type = "value"
tracks/2/path = NodePath("Particles2D:config/emitting")
tracks/2/interp = 1
tracks/2/keys = { "cont":false, "times":FloatArray( 3.47394 ), "transitions":FloatArray( 1 ), "values":[ true ] }
tracks/3/type = "method"
tracks/3/path = NodePath(".")
tracks/3/interp = 1
tracks/3/keys = { "times":FloatArray( 3.20357, 5.07305 ), "transitions":FloatArray( 1, 1 ), "values":[ { "args":[ ], "method":"_pre_explode" }, { "args":[ ], "method":"_die" } ] }
[sub_resource type="Animation" id=3]
length = 6.75
loop = true
step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.75, 1.5, 2.25, 3, 3.75, 4.5, 5.25, 6, 6.75 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), "values":[ 5, 6, 5, 6, 5, 6, 7, 6, 7, 5 ] }
[sub_resource type="Animation" id=4]
resource/name = "walk"
length = 1.25
loop = true
step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "values":[ 0, 1, 2, 3, 4, 0 ] }
[sub_resource type="ColorRamp" id=5]
offsets = FloatArray( 0, 1 )
colors = ColorArray( 1, 0.884956, 0.823009, 1, 0.768627, 0.389381, 0, 0 )
[sub_resource type="SampleLibrary" id=6]
samples/explode = { "db":0.0, "pitch":1.0, "sample":ExtResource( 4 ) }
samples/hit = { "db":0.0, "pitch":1.0, "sample":ExtResource( 5 ) }
[node name="enemy" type="RigidBody2D"]
input/pickable = false
shapes/0/shape = SubResource( 1 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, -1.08072, -2.16144 )
shapes/0/trigger = false
shapes/1/shape = SubResource( 1 )
shapes/1/transform = Matrix32( 1, 0, 0, 1, 6.48431, 3.24216 )
shapes/1/trigger = false
shapes/2/shape = SubResource( 1 )
shapes/2/transform = Matrix32( 1, 0, 0, 1, -12.495, 3.53415 )
shapes/2/trigger = false
collision/layers = 1
collision/mask = 1
mode = 2
mass = 1.0
friction = 0.0
bounce = 0.0
gravity_scale = 1.0
custom_integrator = false
continuous_cd = 0
contacts_reported = 4
contact_monitor = false
sleeping = false
can_sleep = true
velocity/linear = Vector2( 0, 0 )
velocity/angular = 0.0
damp_override/linear = -1.0
damp_override/angular = -1.0
script/script = ExtResource( 1 )
[node name="enabler" type="VisibilityEnabler2D" parent="."]
transform/pos = Vector2( 16.2569, 11.0034 )
transform/scale = Vector2( 23.5056, 10.8629 )
rect = Rect2( -10, -10, 20, 20 )
enabler/pause_animations = true
enabler/freeze_bodies = true
enabler/pause_particles = true
enabler/process_parent = false
enabler/fixed_process_parent = false
[node name="anim" type="AnimationPlayer" parent="."]
playback/process_mode = 1
playback/default_blend_time = 0.0
root/root = NodePath("..")
anims/explode = SubResource( 2 )
anims/idle = SubResource( 3 )
anims/walk = SubResource( 4 )
playback/active = true
playback/speed = 3.0
blend_times = [ ]
autoplay = ""
[node name="sprite" type="Sprite" parent="."]
texture = ExtResource( 2 )
hframes = 8
frame = 4
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
transform/pos = Vector2( -1.08072, -2.16144 )
shape = SubResource( 1 )
trigger = false
_update_shape_index = -1
[node name="CollisionShape2D 2" type="CollisionShape2D" parent="."]
transform/pos = Vector2( 6.48431, 3.24216 )
shape = SubResource( 1 )
trigger = false
_update_shape_index = -1
[node name="CollisionShape2D 3" type="CollisionShape2D" parent="."]
transform/pos = Vector2( -12.495, 3.53415 )
shape = SubResource( 1 )
trigger = false
_update_shape_index = -1
[node name="raycast_left" type="RayCast2D" parent="."]
transform/pos = Vector2( -33.2868, -9.34363 )
enabled = true
cast_to = Vector2( 0, 45 )
layer_mask = 1
type_mask = 15
[node name="raycast_right" type="RayCast2D" parent="."]
transform/pos = Vector2( 29.1987, -9.34363 )
enabled = true
cast_to = Vector2( 0, 45 )
layer_mask = 1
type_mask = 15
[node name="Particles2D" type="Particles2D" parent="."]
visibility/self_opacity = 0.121212
visibility/blend_mode = 1
config/amount = 32
config/lifetime = 0.5
config/emit_timeout = 0.5
config/emitting = false
config/explosiveness = 0.1
config/texture = ExtResource( 3 )
params/direction = 0.0
params/spread = 180.0
params/linear_velocity = 90.0
params/spin_velocity = 2.0
params/orbit_velocity = 0.0
params/gravity_direction = 0.0
params/gravity_strength = 9.8
params/radial_accel = 0.0
params/tangential_accel = 0.0
params/damping = 0.0
params/initial_angle = 0.0
params/initial_size = 2.0
params/final_size = 3.0
params/hue_variation = 0.0
params/anim_speed_scale = 1.0
params/anim_initial_pos = 0.0
randomness/spin_velocity = 1.0
color/color_ramp = SubResource( 5 )
[node name="sound" type="SamplePlayer2D" parent="."]
params/volume_db = 0.0
params/pitch_scale = 1.0
params/attenuation/min_distance = 1.0
params/attenuation/max_distance = 2048.0
params/attenuation/distance_exp = 1.0
config/polyphony = 3
config/samples = SubResource( 6 )
config/pitch_random = 0.0

View File

@@ -0,0 +1,42 @@
[application]
name="Dynamic Character Control-Based Platformer"
main_scene="res://stage.tscn"
icon="res://icon.png"
name_es="Plataformero"
target_fps="60"
[display]
width=800
height=480
stretch_mode="2d"
stretch_aspect="keep_height"
[image_loader]
repeat=false
[input]
move_left=[key(Left), jbutton(0, 14)]
move_right=[key(Right), jbutton(0, 15)]
jump=[key(Up), jbutton(0, 0)]
shoot=[key(Space), jbutton(0, 2)]
spawn=[key(F1), jbutton(0, 11)]
[physics_2d]
default_gravity=700
[rasterizer]
use_pixel_snap=true
[render]
mipmap_policy=1
[texture_import]
filter=false

View File

@@ -0,0 +1,42 @@
[application]
name="Platformer"
main_scene="res://stage.tscn"
icon="res://icon.png"
name_es="Plataformero"
target_fps="60"
[display]
width=800
height=480
stretch_mode="2d"
stretch_aspect="keep_height"
[image_loader]
repeat=false
[input]
move_left=[key(Left), jbutton(0, 14)]
move_right=[key(Right), jbutton(0, 15)]
jump=[key(Up), jbutton(0, 0)]
shoot=[key(Space), jbutton(0, 2)]
spawn=[key(F1), jbutton(0, 11)]
[physics_2d]
default_gravity=700
[rasterizer]
use_pixel_snap=true
[render]
mipmap_policy=1
[texture_import]
filter=false

BIN
2d/platformer_dcc/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1002 B

View File

@@ -0,0 +1,20 @@
extends Node2D
# Member variables
export var motion = Vector2()
export var cycle = 1.0
var accum = 0.0
func _fixed_process(delta):
accum += delta*(1.0/cycle)*PI*2.0
accum = fmod(accum, PI*2.0)
var d = sin(accum)
var xf = Matrix32()
xf[2]= motion*d
get_node("platform").set_transform(xf)
func _ready():
set_fixed_process(true)

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,52 @@
[gd_scene load_steps=4 format=1]
[ext_resource path="res://moving_platform.gd" type="Script" id=1]
[ext_resource path="res://moving_platform.png" type="Texture" id=2]
[sub_resource type="ConvexPolygonShape2D" id=1]
custom_solver_bias = 0.0
points = Vector2Array( -88, 24, -88, -24, 88, -24, 88, 24 )
[node name="moving_platform" type="Node2D"]
script/script = ExtResource( 1 )
motion = Vector2( 0, 0 )
cycle = 1.0
[node name="platform" type="RigidBody2D" parent="."]
input/pickable = false
shapes/0/shape = SubResource( 1 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
collision/layers = 1
collision/mask = 1
mode = 3
mass = 1.0
friction = 1.0
bounce = 0.0
gravity_scale = 1.0
custom_integrator = false
continuous_cd = 0
contacts_reported = 0
contact_monitor = false
sleeping = false
can_sleep = true
velocity/linear = Vector2( 0, 0 )
velocity/angular = 0.0
damp_override/linear = -1.0
damp_override/angular = -1.0
[node name="Sprite" type="Sprite" parent="platform"]
texture = ExtResource( 2 )
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="platform"]
build_mode = 0
polygon = Vector2Array( -88, -24, 88, -24, 88, 24, -88, 24 )
shape_range = Vector2( -1, -1 )
trigger = false

BIN
2d/platformer_dcc/music.ogg Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,36 @@
[gd_scene load_steps=3 format=1]
[ext_resource path="res://one_way_platform.png" type="Texture" id=1]
[sub_resource type="RectangleShape2D" id=1]
custom_solver_bias = 0.0
extents = Vector2( 100, 10 )
[node name="one_way_platform" type="StaticBody2D"]
input/pickable = false
shapes/0/shape = SubResource( 1 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 1.46304, -13.1672 )
shapes/0/trigger = false
collision/layers = 1
collision/mask = 1
one_way_collision/direction = Vector2( 0, 1 )
one_way_collision/max_depth = 20.0
constant_linear_velocity = Vector2( 0, 0 )
constant_angular_velocity = 0.0
friction = 1.0
bounce = 0.0
[node name="sprite" type="Sprite" parent="."]
texture = ExtResource( 1 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
transform/pos = Vector2( 1.46304, -13.1672 )
shape = SubResource( 1 )
trigger = false
_update_shape_index = -1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,101 @@
[gd_scene load_steps=7 format=1]
[ext_resource path="res://scroll_bg_sky.png" type="Texture" id=1]
[ext_resource path="res://scroll_bg_cloud_1.png" type="Texture" id=2]
[ext_resource path="res://scroll_bg_cloud_2.png" type="Texture" id=3]
[ext_resource path="res://scroll_bg_cloud_3.png" type="Texture" id=4]
[ext_resource path="res://scroll_bg_fg_2.png" type="Texture" id=5]
[ext_resource path="res://scroll_bg_fg_1.png" type="Texture" id=6]
[node name="parallax_bg" type="ParallaxBackground"]
layer = -1
offset = Vector2( 0, 0 )
rotation = 0.0
scale = Vector2( 1, 1 )
scroll/offset = Vector2( 0, 0 )
scroll/base_offset = Vector2( 0, 0 )
scroll/base_scale = Vector2( 0.7, 0 )
scroll/limit_begin = Vector2( 0, 0 )
scroll/limit_end = Vector2( 0, 0 )
scroll/ignore_camera_zoom = false
[node name="sky" type="ParallaxLayer" parent="."]
motion/scale = Vector2( 1, 1 )
motion/mirroring = Vector2( 800, 0 )
[node name="Sprite" type="Sprite" parent="sky"]
transform/scale = Vector2( 32, 0.94 )
texture = ExtResource( 1 )
centered = false
[node name="clouds" type="ParallaxLayer" parent="."]
motion/scale = Vector2( 0.1, 1 )
motion/mirroring = Vector2( 800, 0 )
[node name="Sprite" type="Sprite" parent="clouds"]
transform/pos = Vector2( 28, 127 )
texture = ExtResource( 2 )
centered = false
[node name="Sprite 2" type="Sprite" parent="clouds"]
transform/pos = Vector2( 404, 24 )
texture = ExtResource( 2 )
centered = false
[node name="Sprite 3" type="Sprite" parent="clouds"]
transform/pos = Vector2( 154, 46 )
texture = ExtResource( 3 )
centered = false
[node name="Sprite 4" type="Sprite" parent="clouds"]
transform/pos = Vector2( 525, 130 )
texture = ExtResource( 3 )
centered = false
[node name="Sprite 5" type="Sprite" parent="clouds"]
transform/pos = Vector2( 255, 158 )
texture = ExtResource( 4 )
centered = false
[node name="Sprite 6" type="Sprite" parent="clouds"]
transform/pos = Vector2( 674, 70 )
texture = ExtResource( 4 )
centered = false
[node name="mount_ 2" type="ParallaxLayer" parent="."]
motion/scale = Vector2( 0.2, 1 )
motion/mirroring = Vector2( 800, 0 )
[node name="Sprite" type="Sprite" parent="mount_ 2"]
transform/pos = Vector2( 0, 225 )
texture = ExtResource( 5 )
centered = false
region = true
region_rect = Rect2( 0, 0, 800, 256 )
[node name="mount_1" type="ParallaxLayer" parent="."]
motion/scale = Vector2( 0.4, 1 )
motion/mirroring = Vector2( 800, 0 )
[node name="Sprite" type="Sprite" parent="mount_1"]
transform/pos = Vector2( 0, 225 )
texture = ExtResource( 6 )
centered = false
region = true
region_rect = Rect2( 0, 0, 800, 256 )

View File

Before

Width:  |  Height:  |  Size: 270 B

After

Width:  |  Height:  |  Size: 270 B

View File

Before

Width:  |  Height:  |  Size: 253 B

After

Width:  |  Height:  |  Size: 253 B

232
2d/platformer_dcc/player.gd Normal file
View File

@@ -0,0 +1,232 @@
extends RigidBody2D
# Character Demo, written by Juan Linietsky.
#
# Implementation of a 2D Character controller.
# This implementation uses the physics engine for
# controlling a character, in a very similar way
# than a 3D character controller would be implemented.
#
# Using the physics engine for this has the main
# advantages:
# -Easy to write.
# -Interaction with other physics-based objects is free
# -Only have to deal with the object linear velocity, not position
# -All collision/area framework available
#
# But also has the following disadvantages:
#
# -Objects may bounce a little bit sometimes
# -Going up ramps sends the chracter flying up, small hack is needed.
# -A ray collider is needed to avoid sliding down on ramps and
# undesiderd bumps, small steps and rare numerical precision errors.
# (another alternative may be to turn on friction when the character is not moving).
# -Friction cant be used, so floor velocity must be considered
# for moving platforms.
# Member variables
var anim = ""
var siding_left = false
var jumping = false
var stopping_jump = false
var shooting = false
var WALK_ACCEL = 800.0
var WALK_DEACCEL = 800.0
var WALK_MAX_VELOCITY = 200.0
var AIR_ACCEL = 200.0
var AIR_DEACCEL = 200.0
var JUMP_VELOCITY = 460
var STOP_JUMP_FORCE = 900.0
var MAX_FLOOR_AIRBORNE_TIME = 0.15
var airborne_time = 1e20
var shoot_time = 1e20
var MAX_SHOOT_POSE_TIME = 0.3
var bullet = preload("res://bullet.tscn")
var floor_h_velocity = 0.0
var enemy
func _integrate_forces(s):
var lv = s.get_linear_velocity()
var step = s.get_step()
var new_anim = anim
var new_siding_left = siding_left
# Get the controls
var move_left = Input.is_action_pressed("move_left")
var move_right = Input.is_action_pressed("move_right")
var jump = Input.is_action_pressed("jump")
var shoot = Input.is_action_pressed("shoot")
var spawn = Input.is_action_pressed("spawn")
if spawn:
var e = enemy.instance()
var p = get_pos()
p.y = p.y - 100
e.set_pos(p)
get_parent().add_child(e)
# Deapply prev floor velocity
lv.x -= floor_h_velocity
floor_h_velocity = 0.0
# Find the floor (a contact with upwards facing collision normal)
var found_floor = false
var floor_index = -1
for x in range(s.get_contact_count()):
var ci = s.get_contact_local_normal(x)
if (ci.dot(Vector2(0, -1)) > 0.6):
found_floor = true
floor_index = x
# A good idea when impementing characters of all kinds,
# compensates for physics imprecission, as well as human reaction delay.
if (shoot and not shooting):
shoot_time = 0
var bi = bullet.instance()
var ss
if (siding_left):
ss = -1.0
else:
ss = 1.0
var pos = get_pos() + get_node("bullet_shoot").get_pos()*Vector2(ss, 1.0)
bi.set_pos(pos)
get_parent().add_child(bi)
bi.set_linear_velocity(Vector2(800.0*ss, -80))
get_node("sprite/smoke").set_emitting(true)
get_node("sound").play("shoot")
PS2D.body_add_collision_exception(bi.get_rid(), get_rid()) # Make bullet and this not collide
else:
shoot_time += step
if (found_floor):
airborne_time = 0.0
else:
airborne_time += step # Time it spent in the air
var on_floor = airborne_time < MAX_FLOOR_AIRBORNE_TIME
# Process jump
if (jumping):
if (lv.y > 0):
# Set off the jumping flag if going down
jumping = false
elif (not jump):
stopping_jump = true
if (stopping_jump):
lv.y += STOP_JUMP_FORCE*step
if (on_floor):
# Process logic when character is on floor
if (move_left and not move_right):
if (lv.x > -WALK_MAX_VELOCITY):
lv.x -= WALK_ACCEL*step
elif (move_right and not move_left):
if (lv.x < WALK_MAX_VELOCITY):
lv.x += WALK_ACCEL*step
else:
var xv = abs(lv.x)
xv -= WALK_DEACCEL*step
if (xv < 0):
xv = 0
lv.x = sign(lv.x)*xv
# Check jump
if (not jumping and jump):
lv.y = -JUMP_VELOCITY
jumping = true
stopping_jump = false
get_node("sound").play("jump")
# Check siding
if (lv.x < 0 and move_left):
new_siding_left = true
elif (lv.x > 0 and move_right):
new_siding_left = false
if (jumping):
new_anim = "jumping"
elif (abs(lv.x) < 0.1):
if (shoot_time < MAX_SHOOT_POSE_TIME):
new_anim = "idle_weapon"
else:
new_anim = "idle"
else:
if (shoot_time < MAX_SHOOT_POSE_TIME):
new_anim = "run_weapon"
else:
new_anim = "run"
else:
# Process logic when the character is in the air
if (move_left and not move_right):
if (lv.x > -WALK_MAX_VELOCITY):
lv.x -= AIR_ACCEL*step
elif (move_right and not move_left):
if (lv.x < WALK_MAX_VELOCITY):
lv.x += AIR_ACCEL*step
else:
var xv = abs(lv.x)
xv -= AIR_DEACCEL*step
if (xv < 0):
xv = 0
lv.x = sign(lv.x)*xv
if (lv.y < 0):
if (shoot_time < MAX_SHOOT_POSE_TIME):
new_anim = "jumping_weapon"
else:
new_anim = "jumping"
else:
if (shoot_time < MAX_SHOOT_POSE_TIME):
new_anim = "falling_weapon"
else:
new_anim = "falling"
# Update siding
if (new_siding_left != siding_left):
if (new_siding_left):
get_node("sprite").set_scale(Vector2(-1, 1))
else:
get_node("sprite").set_scale(Vector2(1, 1))
siding_left = new_siding_left
# Change animation
if (new_anim != anim):
anim = new_anim
get_node("anim").play(anim)
shooting = shoot
# Apply floor velocity
if (found_floor):
floor_h_velocity = s.get_contact_collider_velocity_at_pos(floor_index).x
lv.x += floor_h_velocity
# Finally, apply gravity and set back the linear velocity
lv += s.get_total_gravity()*step
s.set_linear_velocity(lv)
func _ready():
enemy = ResourceLoader.load("res://enemy.tscn")
# if !Globals.has_singleton("Facebook"):
# return
# var Facebook = Globals.get_singleton("Facebook")
# var link = Globals.get("facebook/link")
# var icon = Globals.get("facebook/icon")
# var msg = "I just sneezed on your wall! Beat my score and Stop the Running nose!"
# var title = "I just sneezed on your wall!"
# Facebook.post("feed", msg, title, link, icon)

View File

@@ -0,0 +1,330 @@
[gd_scene load_steps=25 format=1]
[ext_resource path="res://player.gd" type="Script" id=1]
[ext_resource path="res://robot_demo.png" type="Texture" id=2]
[ext_resource path="res://bullet.png" type="Texture" id=3]
[ext_resource path="res://sound_coin.wav" type="Sample" id=4]
[ext_resource path="res://sound_jump.wav" type="Sample" id=5]
[ext_resource path="res://sound_shoot.wav" type="Sample" id=6]
[ext_resource path="res://osb_left.png" type="Texture" id=7]
[ext_resource path="res://osb_right.png" type="Texture" id=8]
[ext_resource path="res://osb_jump.png" type="Texture" id=9]
[ext_resource path="res://osb_fire.png" type="Texture" id=10]
[sub_resource type="RayShape2D" id=1]
custom_solver_bias = 0.5
length = 20.0
[sub_resource type="ConvexPolygonShape2D" id=2]
custom_solver_bias = 0.0
points = Vector2Array( -19.902, -24.8691, 19.3625, -24.6056, -0.138023, 16.5036 )
[sub_resource type="ColorRamp" id=3]
offsets = FloatArray( 0, 1 )
colors = ColorArray( 1, 1, 1, 1, 0, 0, 0, 0.0442478 )
[sub_resource type="Animation" id=4]
resource/name = "crouch"
length = 0.01
loop = true
step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 22 ] }
[sub_resource type="Animation" id=5]
resource/name = "falling"
length = 0.01
loop = true
step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 21 ] }
[sub_resource type="Animation" id=6]
resource/name = "falling_weapon"
length = 0.5
loop = true
step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 26 ] }
[sub_resource type="Animation" id=7]
length = 7.0
loop = true
step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0, 1.25, 1.5, 2, 4.5, 4.75, 5, 5.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1 ), "values":[ 16, 17, 18, 16, 19, 20, 19, 16 ] }
[sub_resource type="Animation" id=8]
length = 0.5
loop = true
step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 25 ] }
[sub_resource type="Animation" id=9]
length = 0.5
loop = true
step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5 ), "transitions":FloatArray( 1, 1, 1 ), "values":[ 23, 24, 23 ] }
[sub_resource type="Animation" id=10]
length = 0.5
loop = true
step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 26 ] }
[sub_resource type="Animation" id=11]
length = 1.25
loop = true
step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "values":[ 0, 1, 2, 3, 4, 0 ] }
[sub_resource type="Animation" id=12]
length = 1.25
loop = true
step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "values":[ 5, 6, 7, 8, 9, 5 ] }
[sub_resource type="Animation" id=13]
length = 1.25
loop = true
step = 0.25
tracks/0/type = "value"
tracks/0/path = NodePath("sprite:frame")
tracks/0/interp = 1
tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "values":[ 10, 11, 12, 13, 14, 5 ] }
[sub_resource type="SampleLibrary" id=14]
samples/jump = { "db":0.0, "pitch":1.0, "sample":ExtResource( 5 ) }
samples/shoot = { "db":0.0, "pitch":1.0, "sample":ExtResource( 6 ) }
samples/coin = { "db":0.0, "pitch":1.0, "sample":ExtResource( 4 ) }
[node name="player" type="RigidBody2D"]
input/pickable = false
shapes/0/shape = SubResource( 1 )
shapes/0/transform = Matrix32( 1, 0, 0, 1.76469, 0.291992, -12.1587 )
shapes/0/trigger = false
shapes/1/shape = SubResource( 2 )
shapes/1/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/1/trigger = false
collision/layers = 1
collision/mask = 1
mode = 2
mass = 3.0
friction = 0.0
bounce = 0.0
gravity_scale = 1.0
custom_integrator = true
continuous_cd = 0
contacts_reported = 3
contact_monitor = false
sleeping = false
can_sleep = true
velocity/linear = Vector2( 0, 0 )
velocity/angular = 0.0
damp_override/linear = -1.0
damp_override/angular = -1.0
script/script = ExtResource( 1 )
[node name="sprite" type="Sprite" parent="."]
texture = ExtResource( 2 )
vframes = 2
hframes = 16
[node name="smoke" type="Particles2D" parent="sprite"]
visibility/self_opacity = 0.363636
visibility/blend_mode = 1
transform/pos = Vector2( 20.7312, 3.21187 )
transform/rot = 83.4504
config/amount = 4
config/lifetime = 0.3
config/emit_timeout = 0.3
config/emitting = false
config/local_space = false
config/explosiveness = 0.1
config/texture = ExtResource( 3 )
params/direction = 0.0
params/spread = 180.0
params/linear_velocity = 20.0
params/spin_velocity = 1.0
params/orbit_velocity = 0.0
params/gravity_direction = 0.0
params/gravity_strength = 9.8
params/radial_accel = 0.0
params/tangential_accel = 0.0
params/damping = 0.0
params/initial_angle = 0.0
params/initial_size = 2.0
params/final_size = 2.0
params/hue_variation = 0.0
params/anim_speed_scale = 1.0
params/anim_initial_pos = 0.0
randomness/spin_velocity = 2.0
color/color_ramp = SubResource( 3 )
[node name="anim" type="AnimationPlayer" parent="."]
playback/process_mode = 1
playback/default_blend_time = 0.0
root/root = NodePath("..")
anims/crouch = SubResource( 4 )
anims/falling = SubResource( 5 )
anims/falling_weapon = SubResource( 6 )
anims/idle = SubResource( 7 )
anims/idle_weapon = SubResource( 8 )
anims/jumping = SubResource( 9 )
anims/jumping_weapon = SubResource( 10 )
anims/run = SubResource( 11 )
anims/run_weapon = SubResource( 12 )
anims/standing_weapon_ready = SubResource( 13 )
playback/active = true
playback/speed = 2.0
blend_times = [ ]
autoplay = ""
[node name="camera" type="Camera2D" parent="."]
anchor_mode = 1
rotating = false
current = true
zoom = Vector2( 1, 1 )
limit/left = 0
limit/top = 0
limit/right = 10000000
limit/bottom = 10000000
drag_margin/h_enabled = true
drag_margin/v_enabled = true
smoothing/enable = false
smoothing/speed = 5.0
drag_margin/left = 0.2
drag_margin/top = 0.2
drag_margin/right = 0.2
drag_margin/bottom = 0.2
[node name="bullet_shoot" type="Position2D" parent="."]
transform/pos = Vector2( 31.2428, 4.08784 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
transform/pos = Vector2( 0.291992, -12.1587 )
transform/scale = Vector2( 1, 1.76469 )
shape = SubResource( 1 )
trigger = false
_update_shape_index = -1
[node name="sound" type="SamplePlayer" parent="."]
config/polyphony = 1
config/samples = SubResource( 14 )
default/volume_db = 0.0
default/pitch_scale = 1.0
default/pan = 0.0
default/depth = 0.0
default/height = 0.0
default/filter/type = 0
default/filter/cutoff = 0.0
default/filter/resonance = 0.0
default/filter/gain = 0.0
default/reverb_room = 2
default/reverb_send = 0.0
default/chorus_send = 0.0
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
build_mode = 0
polygon = Vector2Array( -0.138023, 16.5036, -19.902, -24.8691, 19.3625, -24.6056 )
shape_range = Vector2( -1, -1 )
trigger = false
[node name="ui" type="CanvasLayer" parent="."]
layer = 0
offset = Vector2( 0, 0 )
rotation = 0.0
scale = Vector2( 1, 1 )
[node name="left" type="TouchScreenButton" parent="ui"]
transform/pos = Vector2( 27.7593, 360.87 )
transform/scale = Vector2( 1.49157, 1.46265 )
normal = ExtResource( 7 )
pressed = null
bitmask = null
passby_press = true
action = "move_left"
visibility_mode = 1
[node name="right" type="TouchScreenButton" parent="ui"]
transform/pos = Vector2( 121.542, 361.415 )
transform/scale = Vector2( 1.49157, 1.46265 )
normal = ExtResource( 8 )
pressed = null
bitmask = null
passby_press = true
action = "move_right"
visibility_mode = 1
[node name="jump" type="TouchScreenButton" parent="ui"]
transform/pos = Vector2( 666.224, 359.02 )
transform/scale = Vector2( 1.49157, 1.46265 )
normal = ExtResource( 9 )
pressed = null
bitmask = null
passby_press = false
action = "jump"
visibility_mode = 1
[node name="fire" type="TouchScreenButton" parent="ui"]
transform/pos = Vector2( 668.073, 262.788 )
transform/scale = Vector2( 1.49157, 1.46265 )
normal = ExtResource( 10 )
pressed = null
bitmask = null
passby_press = false
action = "shoot"
visibility_mode = 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 531 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 719 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 394 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

View File

@@ -0,0 +1 @@
filter=false

View File

@@ -0,0 +1,195 @@
[gd_resource type="TileSet" load_steps=14 format=1]
[ext_resource path="res://tiles_demo.png" type="Texture" id=1]
[sub_resource type="ConvexPolygonShape2D" id=1]
custom_solver_bias = 0.0
points = Vector2Array( -32, -24, 32, -24, 32, 32, -32, 32 )
[sub_resource type="ConvexPolygonShape2D" id=2]
custom_solver_bias = 0.0
points = Vector2Array( -32, 32, -32, -24, 24, -24, 24, 32 )
[sub_resource type="ConvexPolygonShape2D" id=3]
custom_solver_bias = 0.0
points = Vector2Array( -32, -32, 32, -32, 32, 32, -32, 32 )
[sub_resource type="ConvexPolygonShape2D" id=4]
custom_solver_bias = 0.0
points = Vector2Array( -32, -56, 32, 8, 32, 64, -32, 64 )
[sub_resource type="ConvexPolygonShape2D" id=5]
custom_solver_bias = 0.0
points = Vector2Array( -32, 32, -32, -32, 24, -32, 24, 32 )
[sub_resource type="ConvexPolygonShape2D" id=6]
custom_solver_bias = 0.0
points = Vector2Array( -32, -24, 32, -24, 32, 24, -32, 24 )
[sub_resource type="ConvexPolygonShape2D" id=7]
custom_solver_bias = 0.0
points = Vector2Array( -32, -24, 24, -24, 24, 24, -32, 24 )
[sub_resource type="ConvexPolygonShape2D" id=8]
custom_solver_bias = 0.0
points = Vector2Array( -32, 32, -32, -32, 24, -32, 24, 32 )
[sub_resource type="ConvexPolygonShape2D" id=9]
custom_solver_bias = 0.0
points = Vector2Array( -64, 32, -64, -32, -8, -32, -8, 32 )
[sub_resource type="ConvexPolygonShape2D" id=10]
custom_solver_bias = 0.0
points = Vector2Array( -32, 32, -32, -32, 24, -32, 32, -24, 32, 32 )
[sub_resource type="ConvexPolygonShape2D" id=11]
custom_solver_bias = 0.0
points = Vector2Array( -32, 32, -32, -24, 32, -24, 32, 32 )
[sub_resource type="ConvexPolygonShape2D" id=12]
custom_solver_bias = 0.0
points = Vector2Array( -32, 32, -32, -24, 32, -24, 32, 32 )
[resource]
0/name = "floor"
0/texture = ExtResource( 1 )
0/tex_offset = Vector2( 0, 0 )
0/region = Rect2( 0, 0, 64, 64 )
0/occluder_offset = Vector2( 32, 32 )
0/navigation_offset = Vector2( 32, 32 )
0/shape_offset = Vector2( 32, 32 )
0/shapes = [ SubResource( 1 ) ]
1/name = "edge"
1/texture = ExtResource( 1 )
1/tex_offset = Vector2( 0, 0 )
1/region = Rect2( 64, 0, 64, 64 )
1/occluder_offset = Vector2( 32, 32 )
1/navigation_offset = Vector2( 32, 32 )
1/shape_offset = Vector2( 32, 32 )
1/shapes = [ SubResource( 2 ) ]
2/name = "wall"
2/texture = ExtResource( 1 )
2/tex_offset = Vector2( 0, 0 )
2/region = Rect2( 64, 64, 64, 64 )
2/occluder_offset = Vector2( 32, 32 )
2/navigation_offset = Vector2( 32, 32 )
2/shape_offset = Vector2( 32, 32 )
2/shapes = [ SubResource( 8 ) ]
3/name = "wall_deco"
3/texture = ExtResource( 1 )
3/tex_offset = Vector2( 0, 0 )
3/region = Rect2( 320, 128, 128, 64 )
3/occluder_offset = Vector2( 64, 32 )
3/navigation_offset = Vector2( 64, 32 )
3/shape_offset = Vector2( 64, 32 )
3/shapes = [ SubResource( 9 ) ]
4/name = "corner"
4/texture = ExtResource( 1 )
4/tex_offset = Vector2( 0, 0 )
4/region = Rect2( 64, 128, 64, 64 )
4/occluder_offset = Vector2( 32, 32 )
4/navigation_offset = Vector2( 32, 32 )
4/shape_offset = Vector2( 32, 32 )
4/shapes = [ SubResource( 10 ) ]
5/name = "flowers"
5/texture = ExtResource( 1 )
5/tex_offset = Vector2( 0, 0 )
5/region = Rect2( 192, 192, 64, 64 )
5/occluder_offset = Vector2( 32, 32 )
5/navigation_offset = Vector2( 32, 32 )
5/shape_offset = Vector2( 32, 32 )
5/shapes = [ SubResource( 11 ) ]
6/name = "tree_base"
6/texture = ExtResource( 1 )
6/tex_offset = Vector2( 0, 0 )
6/region = Rect2( 256, 192, 64, 64 )
6/occluder_offset = Vector2( 32, 32 )
6/navigation_offset = Vector2( 32, 32 )
6/shape_offset = Vector2( 32, 32 )
6/shapes = [ SubResource( 12 ) ]
7/name = "tree_mid"
7/texture = ExtResource( 1 )
7/tex_offset = Vector2( 0, 0 )
7/region = Rect2( 256, 128, 64, 64 )
7/occluder_offset = Vector2( 32, 32 )
7/navigation_offset = Vector2( 32, 32 )
7/shape_offset = Vector2( 0, 0 )
7/shapes = [ ]
8/name = "tree_mid 2"
8/texture = ExtResource( 1 )
8/tex_offset = Vector2( 0, 0 )
8/region = Rect2( 256, 64, 64, 64 )
8/occluder_offset = Vector2( 32, 32 )
8/navigation_offset = Vector2( 32, 32 )
8/shape_offset = Vector2( 0, 0 )
8/shapes = [ ]
9/name = "tree_top"
9/texture = ExtResource( 1 )
9/tex_offset = Vector2( 0, 0 )
9/region = Rect2( 256, 0, 64, 64 )
9/occluder_offset = Vector2( 32, 32 )
9/navigation_offset = Vector2( 32, 32 )
9/shape_offset = Vector2( 0, 0 )
9/shapes = [ ]
10/name = "solid"
10/texture = ExtResource( 1 )
10/tex_offset = Vector2( 0, 0 )
10/region = Rect2( 0, 64, 64, 64 )
10/occluder_offset = Vector2( 32, 32 )
10/navigation_offset = Vector2( 32, 32 )
10/shape_offset = Vector2( 0, 0 )
10/shapes = [ ]
11/name = "ceiling"
11/texture = ExtResource( 1 )
11/tex_offset = Vector2( 0, 0 )
11/region = Rect2( 384, 64, 64, 64 )
11/occluder_offset = Vector2( 32, 32 )
11/navigation_offset = Vector2( 32, 32 )
11/shape_offset = Vector2( 32, 32 )
11/shapes = [ SubResource( 3 ) ]
12/name = "ramp"
12/texture = ExtResource( 1 )
12/tex_offset = Vector2( 0, 0 )
12/region = Rect2( 128, 128, 64, 128 )
12/occluder_offset = Vector2( 32, 64 )
12/navigation_offset = Vector2( 32, 64 )
12/shape_offset = Vector2( 32, 64 )
12/shapes = [ SubResource( 4 ) ]
13/name = "ceiling2wall"
13/texture = ExtResource( 1 )
13/tex_offset = Vector2( 0, 0 )
13/region = Rect2( 448, 64, 64, 64 )
13/occluder_offset = Vector2( 32, 32 )
13/navigation_offset = Vector2( 32, 32 )
13/shape_offset = Vector2( 32, 32 )
13/shapes = [ SubResource( 5 ) ]
14/name = "platform_floor"
14/texture = ExtResource( 1 )
14/tex_offset = Vector2( 0, 0 )
14/region = Rect2( 128, 0, 64, 64 )
14/occluder_offset = Vector2( 32, 32 )
14/navigation_offset = Vector2( 32, 32 )
14/shape_offset = Vector2( 32, 32 )
14/shapes = [ SubResource( 6 ) ]
15/name = "platform_edge"
15/texture = ExtResource( 1 )
15/tex_offset = Vector2( 0, 0 )
15/region = Rect2( 192, 0, 64, 64 )
15/occluder_offset = Vector2( 32, 32 )
15/navigation_offset = Vector2( 32, 32 )
15/shape_offset = Vector2( 32, 32 )
15/shapes = [ SubResource( 7 ) ]

View File

@@ -0,0 +1,432 @@
[gd_scene load_steps=14 format=1]
[ext_resource path="res://tiles_demo.png" type="Texture" id=1]
[sub_resource type="ConvexPolygonShape2D" id=1]
custom_solver_bias = 0.0
points = Vector2Array( -32, -24, 32, -24, 32, 32, -32, 32 )
[sub_resource type="ConvexPolygonShape2D" id=2]
custom_solver_bias = 0.0
points = Vector2Array( -32, 32, -32, -24, 24, -24, 24, 32 )
[sub_resource type="ConvexPolygonShape2D" id=3]
custom_solver_bias = 0.0
points = Vector2Array( -32, 32, -32, -32, 24, -32, 24, 32 )
[sub_resource type="ConvexPolygonShape2D" id=4]
custom_solver_bias = 0.0
points = Vector2Array( -64, 32, -64, -32, -8, -32, -8, 32 )
[sub_resource type="ConvexPolygonShape2D" id=5]
custom_solver_bias = 0.0
points = Vector2Array( -32, 32, -32, -32, 24, -32, 32, -24, 32, 32 )
[sub_resource type="ConvexPolygonShape2D" id=6]
custom_solver_bias = 0.0
points = Vector2Array( -32, 32, -32, -24, 32, -24, 32, 32 )
[sub_resource type="ConvexPolygonShape2D" id=7]
custom_solver_bias = 0.0
points = Vector2Array( -32, 32, -32, -24, 32, -24, 32, 32 )
[sub_resource type="ConvexPolygonShape2D" id=8]
custom_solver_bias = 0.0
points = Vector2Array( -32, -32, 32, -32, 32, 32, -32, 32 )
[sub_resource type="ConvexPolygonShape2D" id=9]
custom_solver_bias = 0.0
points = Vector2Array( -32, -56, 32, 8, 32, 64, -32, 64 )
[sub_resource type="ConvexPolygonShape2D" id=10]
custom_solver_bias = 0.0
points = Vector2Array( -32, 32, -32, -32, 24, -32, 24, 32 )
[sub_resource type="ConvexPolygonShape2D" id=11]
custom_solver_bias = 0.0
points = Vector2Array( -32, -24, 32, -24, 32, 24, -32, 24 )
[sub_resource type="ConvexPolygonShape2D" id=12]
custom_solver_bias = 0.0
points = Vector2Array( -32, -24, 24, -24, 24, 24, -32, 24 )
[node name="Node" type="Node"]
[node name="floor" type="Sprite" parent="."]
texture = ExtResource( 1 )
region = true
region_rect = Rect2( 0, 0, 64, 64 )
[node name="collision" type="StaticBody2D" parent="floor"]
input/pickable = false
shapes/0/shape = SubResource( 1 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
collision/layers = 1
collision/mask = 1
constant_linear_velocity = Vector2( 0, 0 )
constant_angular_velocity = 0.0
friction = 1.0
bounce = 0.0
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="floor/collision"]
build_mode = 0
polygon = Vector2Array( 32, -24, 32, 32, -32, 32, -32, -24 )
shape_range = Vector2( -1, -1 )
trigger = false
[node name="edge" type="Sprite" parent="."]
transform/pos = Vector2( 64, 0 )
texture = ExtResource( 1 )
region = true
region_rect = Rect2( 64, 0, 64, 64 )
[node name="collision" type="StaticBody2D" parent="edge"]
input/pickable = false
shapes/0/shape = SubResource( 2 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
collision/layers = 1
collision/mask = 1
constant_linear_velocity = Vector2( 0, 0 )
constant_angular_velocity = 0.0
friction = 1.0
bounce = 0.0
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="edge/collision"]
build_mode = 0
polygon = Vector2Array( -32, -24, 24, -24, 24, 32, -32, 32 )
shape_range = Vector2( -1, -1 )
trigger = false
[node name="wall" type="Sprite" parent="."]
transform/pos = Vector2( 64, 64 )
texture = ExtResource( 1 )
region = true
region_rect = Rect2( 64, 64, 64, 64 )
[node name="collision" type="StaticBody2D" parent="wall"]
input/pickable = false
shapes/0/shape = SubResource( 3 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
collision/layers = 1
collision/mask = 1
constant_linear_velocity = Vector2( 0, 0 )
constant_angular_velocity = 0.0
friction = 1.0
bounce = 0.0
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="wall/collision"]
build_mode = 0
polygon = Vector2Array( -32, -32, 24, -32, 24, 32, -32, 32 )
shape_range = Vector2( -1, -1 )
trigger = false
[node name="wall_deco" type="Sprite" parent="."]
transform/pos = Vector2( 96, 128 )
texture = ExtResource( 1 )
region = true
region_rect = Rect2( 320, 128, 128, 64 )
[node name="collision" type="StaticBody2D" parent="wall_deco"]
input/pickable = false
shapes/0/shape = SubResource( 4 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
collision/layers = 1
collision/mask = 1
constant_linear_velocity = Vector2( 0, 0 )
constant_angular_velocity = 0.0
friction = 1.0
bounce = 0.0
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="wall_deco/collision"]
build_mode = 0
polygon = Vector2Array( -64, -32, -8, -32, -8, 32, -64, 32 )
shape_range = Vector2( -1, -1 )
trigger = false
[node name="corner" type="Sprite" parent="."]
transform/pos = Vector2( 64, 192 )
texture = ExtResource( 1 )
region = true
region_rect = Rect2( 64, 128, 64, 64 )
[node name="collision" type="StaticBody2D" parent="corner"]
input/pickable = false
shapes/0/shape = SubResource( 5 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
collision/layers = 1
collision/mask = 1
constant_linear_velocity = Vector2( 0, 0 )
constant_angular_velocity = 0.0
friction = 1.0
bounce = 0.0
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="corner/collision"]
build_mode = 0
polygon = Vector2Array( -32, -32, 24, -32, 32, -24, 32, 32, -32, 32 )
shape_range = Vector2( -1, -1 )
trigger = false
[node name="flowers" type="Sprite" parent="."]
transform/pos = Vector2( 128, 192 )
texture = ExtResource( 1 )
region = true
region_rect = Rect2( 192, 192, 64, 64 )
[node name="collision" type="StaticBody2D" parent="flowers"]
input/pickable = false
shapes/0/shape = SubResource( 6 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
collision/layers = 1
collision/mask = 1
constant_linear_velocity = Vector2( 0, 0 )
constant_angular_velocity = 0.0
friction = 1.0
bounce = 0.0
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="flowers/collision"]
build_mode = 0
polygon = Vector2Array( -32, 32, 32, 32, 32, -24, -32, -24 )
shape_range = Vector2( -1, -1 )
trigger = false
[node name="tree_base" type="Sprite" parent="."]
transform/pos = Vector2( 192, 192 )
texture = ExtResource( 1 )
region = true
region_rect = Rect2( 256, 192, 64, 64 )
[node name="collision" type="StaticBody2D" parent="tree_base"]
input/pickable = false
shapes/0/shape = SubResource( 7 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
collision/layers = 1
collision/mask = 1
constant_linear_velocity = Vector2( 0, 0 )
constant_angular_velocity = 0.0
friction = 1.0
bounce = 0.0
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="tree_base/collision"]
build_mode = 0
polygon = Vector2Array( -32, 32, 32, 32, 32, -24, -32, -24 )
shape_range = Vector2( -1, -1 )
trigger = false
[node name="tree_mid" type="Sprite" parent="."]
transform/pos = Vector2( 192, 128 )
texture = ExtResource( 1 )
region = true
region_rect = Rect2( 256, 128, 64, 64 )
[node name="tree_mid 2" type="Sprite" parent="."]
transform/pos = Vector2( 192, 64 )
texture = ExtResource( 1 )
region = true
region_rect = Rect2( 256, 64, 64, 64 )
[node name="tree_top" type="Sprite" parent="."]
transform/pos = Vector2( 192, 0 )
texture = ExtResource( 1 )
region = true
region_rect = Rect2( 256, 0, 64, 64 )
[node name="solid" type="Sprite" parent="."]
transform/pos = Vector2( 0, 64 )
texture = ExtResource( 1 )
region = true
region_rect = Rect2( 0, 64, 64, 64 )
[node name="ceiling" type="Sprite" parent="."]
transform/pos = Vector2( 0, 128 )
texture = ExtResource( 1 )
region = true
region_rect = Rect2( 384, 64, 64, 64 )
[node name="collision" type="StaticBody2D" parent="ceiling"]
input/pickable = false
shapes/0/shape = SubResource( 8 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
collision/layers = 1
collision/mask = 1
constant_linear_velocity = Vector2( 0, 0 )
constant_angular_velocity = 0.0
friction = 1.0
bounce = 0.0
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="ceiling/collision"]
build_mode = 0
polygon = Vector2Array( 32, -32, 32, 32, -32, 32, -32, -32 )
shape_range = Vector2( -1, -1 )
trigger = false
[node name="ramp" type="Sprite" parent="."]
transform/pos = Vector2( 256, 224 )
texture = ExtResource( 1 )
region = true
region_rect = Rect2( 128, 128, 64, 128 )
[node name="collision" type="StaticBody2D" parent="ramp"]
input/pickable = false
shapes/0/shape = SubResource( 9 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
collision/layers = 1
collision/mask = 1
constant_linear_velocity = Vector2( 0, 0 )
constant_angular_velocity = 0.0
friction = 1.0
bounce = 0.0
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="ramp/collision"]
build_mode = 0
polygon = Vector2Array( -32, -56, 32, 8, 32, 64, -32, 64 )
shape_range = Vector2( -1, -1 )
trigger = false
[node name="ceiling2wall" type="Sprite" parent="."]
transform/pos = Vector2( 0, 192 )
texture = ExtResource( 1 )
region = true
region_rect = Rect2( 448, 64, 64, 64 )
[node name="collision" type="StaticBody2D" parent="ceiling2wall"]
input/pickable = false
shapes/0/shape = SubResource( 10 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
collision/layers = 1
collision/mask = 1
constant_linear_velocity = Vector2( 0, 0 )
constant_angular_velocity = 0.0
friction = 1.0
bounce = 0.0
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="ceiling2wall/collision"]
build_mode = 0
polygon = Vector2Array( -32, -32, 24, -32, 24, 32, -32, 32 )
shape_range = Vector2( -1, -1 )
trigger = false
[node name="platform_floor" type="Sprite" parent="."]
transform/pos = Vector2( 0, 256 )
texture = ExtResource( 1 )
region = true
region_rect = Rect2( 128, 0, 64, 64 )
[node name="collision" type="StaticBody2D" parent="platform_floor"]
input/pickable = false
shapes/0/shape = SubResource( 11 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
collision/layers = 1
collision/mask = 1
constant_linear_velocity = Vector2( 0, 0 )
constant_angular_velocity = 0.0
friction = 1.0
bounce = 0.0
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="platform_floor/collision"]
build_mode = 0
polygon = Vector2Array( 32, -24, 32, 24, -32, 24, -32, -24 )
shape_range = Vector2( -1, -1 )
trigger = false
[node name="platform_edge" type="Sprite" parent="."]
transform/pos = Vector2( 64, 256 )
texture = ExtResource( 1 )
region = true
region_rect = Rect2( 192, 0, 64, 64 )
[node name="collision" type="StaticBody2D" parent="platform_edge"]
input/pickable = false
shapes/0/shape = SubResource( 12 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
collision/layers = 1
collision/mask = 1
constant_linear_velocity = Vector2( 0, 0 )
constant_angular_velocity = 0.0
friction = 1.0
bounce = 0.0
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="platform_edge/collision"]
build_mode = 0
polygon = Vector2Array( 24, -24, 24, 24, -32, 24, -32, -24 )
shape_range = Vector2( -1, -1 )
trigger = false
[node name="help" type="Label" parent="."]
focus/ignore_mouse = true
focus/stop_mouse = true
size_flags/horizontal = 2
margin/left = 1.0
margin/top = 331.0
margin/right = 727.0
margin/bottom = 422.0
text = "This scene serves as a tool for editing the tileset.\nNodes (sprites) and their respective collisionsare edited here.\n\nTo create a tileset from this, a \"TileSet\" resoucre must be created. Use the helper in: Scene -> Convert To -> TileSet.\nThis will save a tileset. Saving over it will merge your changes.\n\nFinally, the saved tileset resource (tileset.tres in this case), can be opened to be used into a TileMap node for editing a tile map."
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1

Binary file not shown.

View File

@@ -207,38 +207,42 @@ transform/pos = Vector2( 4172.75, 541.058 )
[node name="moving_platform" parent="props" instance=ExtResource( 3 )]
transform/pos = Vector2( 1451.86, 742.969 )
script_variables/motion = Vector2( 0, 1 )
script_variables/cycle = 5.0
motion = Vector2( 0, 0 )
cycle = 1.0
[node name="moving_platform 2" parent="props" instance=ExtResource( 3 )]
transform/pos = Vector2( 719.199, 1123.81 )
script_variables/motion = Vector2( 200, 0 )
script_variables/cycle = 5.0
motion = Vector2( 100, 0 )
cycle = 4.0
[node name="still" parent="props" instance=ExtResource( 3 )]
transform/pos = Vector2( 1231.37, 1105.18 )
transform/rot = 9.3572
script_variables/cycle = 1.0
motion = Vector2( 0, 0 )
cycle = 1.0
[node name="still1" parent="props" instance=ExtResource( 3 )]
transform/pos = Vector2( 1384.28, 1066.4 )
transform/rot = 18.4436
script_variables/cycle = 1.0
motion = Vector2( 0, 0 )
cycle = 1.0
[node name="still2" parent="props" instance=ExtResource( 3 )]
transform/pos = Vector2( 1552.7, 1032.05 )
transform/rot = 4.73782
script_variables/cycle = 1.0
motion = Vector2( 0, 0 )
cycle = 1.0
[node name="still3" parent="props" instance=ExtResource( 3 )]
transform/pos = Vector2( 1700.06, 1066.92 )
transform/rot = -31.3979
script_variables/cycle = 1.0
motion = Vector2( 0, 0 )
cycle = 1.0
[node name="one_way_platform" parent="props" instance=ExtResource( 4 )]