######################################## Simple implementation of layered sprites technique, to achieve a voxel-like# isometric effect.# More info about what inspired this at: http://michaelb.org/niums-3d-effect-in-godot/## Public Domain - michaelb (http://michaelb.org/)######################################## To use this, simply set it as a script on a Node2D.# It could probably be optimized by pre-rendering each direction onto a texture.# changing the direction will cause it to achieve the rotation effectexport(int,0,360)vardirection=0setgetset_direction# set spritesheet to be a single (horizontal) spritesheet containing every layerexport(ImageTexture)varspritesheet=nullsetgetset_spritesheet# layer_count is the number of layers (e.g. frames) contained by the spritesheetexport(int,0,100)varlayer_count=0setgetset_layer_count# offset is the number of pixels to offset each layerexport(int,0,100)varoffset=1setgetset_offsetvarsprites=[]funcset_direction(new_value):
direction=new_value_refresh_direction()funcset_offset(new_value):
offset=new_value_refresh_direction()funcset_layer_count(new_value):
layer_count=new_value_refresh_sprites()_refresh_direction()funcset_spritesheet(new_value):
spritesheet=new_value_refresh_sprites()_refresh_direction()func_ready():
_refresh_sprites()_refresh_direction()func_refresh_sprites():
sprites=[]# First remove existing childrenforchildinget_children():
remove_child(child)# Then add new spritesforlayerinrange(layer_count):
varsprite=Sprite.new()sprite.set_texture(spritesheet)sprite.set_hframes(layer_count)sprite.set_frame(layer)sprites.append(sprite)add_child(sprite)func_refresh_direction():
forlayerinrange(layer_count):
iflayer>=sprites.size():
# layer_count hasn't yet been setreturnvarsprite=sprites[layer]sprite.set_rotd(direction)sprite.set_pos(Vector2(0,layer*-offset))
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.