Skip to content

Instantly share code, notes, and snippets.

@thecosss
Created May 4, 2017 12:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thecosss/f4cf148e727e4bedc7fda73680d3518f to your computer and use it in GitHub Desktop.
Save thecosss/f4cf148e727e4bedc7fda73680d3518f to your computer and use it in GitHub Desktop.
extends KinematicBody2D
export var bounce = 1.1
var size
var vel = Vector2()
var rot_speed
var screen_size
var extents
onready var puff = get_node('puff')
var textures = {'big': ['res://art/sheet.meteorGrey_big1.atex',
'res://art/sheet.meteorGrey_big2.atex',
'res://art/sheet.meteorGrey_big3.atex'],
'med': ['res://art/sheet.meteorGrey_med1.atex',
'res://art/sheet.meteorGrey_med2.atex'],
'sm': ['res://art/sheet.meteorGrey_small1.atex',
'res://art/sheet.meteorGrey_small2.atex'],
'tiny': ['res://art/sheet.meteorGrey_tiny1.atex',
'res://art/sheet.meteorGrey_tiny2.atex']}
func _ready():
randomize()
set_fixed_process(true)
screen_size = get_viewport_rect().size
add_to_group("asteroids")
func init(init_size, init_pos, init_vel):
size = init_size
if init_vel.lentgh() > 0:
vel = init_vel
else:
vel = Vector2(rand_range(30, 100), 0).rotated(rand_range(0, 2*PI))
rot_speed = rand_range(-1.5, 1.5)
var texture = load(textures[size][randi() % textures[size].size()])
get_node("Sprite").set_texture(texture)
extents = texture.get_size() / 2
set_pos(init_pos)
var shape = CircleShape2D.new()
shape.set_radius(min(texture.get_width() / 2, texture.get_height() / 2))
add_shape(shape)
func _fixed_process(delta):
set_rot(get_rot() + rot_speed * delta)
move(vel * delta)
if is_colliding():
vel += get_collision_normal() * (get_collider().vel.length() * bounce)
puff.set_global_pos(get_collision_pos())
puff.set_emitting(true)
var pos = get_pos()
if pos.x > screen_size.width + extents.width:
pos.x = -extents.width
if pos.x < -extents.width:
pos.x = screen_size.width + extents.width
if pos.y > screen_size.height + extents.height:
pos.y = -extents.height
if pos.y < -extents.height:
pos.y = screen_size.height + extents.height
set_pos(pos)
func explode():
queue_free()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment