Skip to content

Commit

Permalink
Add support for oversized weapons (#11)
Browse files Browse the repository at this point in the history
Add support for oversized weapons
  • Loading branch information
alextrevisan committed Nov 21, 2023
1 parent cab8d79 commit 555b0d7
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 78 deletions.
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@ func _ready():
player.play(LPCAnimatedSprite2D.LPCAnimation.WALK_UP)
```

## Support for Oversized Weapons
Just select the appropriate Sprite Type

If using component sprites rather than a a pre-built spritesheet, pay attention to the order in which they are configured as it will influence visibility.

## Version number

I choose this type of version to match the Godot version plus the release version number of the plugin:
Expand Down
99 changes: 25 additions & 74 deletions addons/LPCAnimatedSprite/LPCAnimatedSprite2D.gd
Original file line number Diff line number Diff line change
Expand Up @@ -3,64 +3,9 @@ extends Node2D

class_name LPCAnimatedSprite2D

const Framerate:float = 10.0
var AnimationData:Array[LPCAnimationData] = [
LPCAnimationData.new(7,"CAST_UP",0,false),
LPCAnimationData.new(7,"CAST_LEFT",1,false),
LPCAnimationData.new(7,"CAST_DOWN",2,false),
LPCAnimationData.new(7,"CAST_RIGHT",3,false),
LPCAnimationData.new(8,"THRUST_UP",4,false),
LPCAnimationData.new(8,"THRUST_LEFT",5,false),
LPCAnimationData.new(8,"THRUST_DOWN",6,false),
LPCAnimationData.new(8,"THRUST_RIGHT",7,false),
LPCAnimationData.new(8,"WALK_UP",8,true),
LPCAnimationData.new(8,"WALK_LEFT",9,true),
LPCAnimationData.new(8,"WALK_DOWN",10,true),
LPCAnimationData.new(8,"WALK_RIGHT",11,true),
LPCAnimationData.new(6,"SLASH_UP",12,false),
LPCAnimationData.new(6,"SLASH_LEFT",13,false),
LPCAnimationData.new(6,"SLASH_DOWN",14,false),
LPCAnimationData.new(6,"SLASH_RIGHT",15,false),
LPCAnimationData.new(13,"SHOOT_UP",16,false),
LPCAnimationData.new(13,"SHOOT_LEFT",17,false),
LPCAnimationData.new(13,"SHOOT_DOWN",18,false),
LPCAnimationData.new(13,"SHOOT_RIGHT",19,false),
LPCAnimationData.new(6,"HURT_DOWN",20,false),
LPCAnimationData.new(1,"IDLE_UP",8,false),
LPCAnimationData.new(1,"IDLE_LEFT",9,false),
LPCAnimationData.new(1,"IDLE_DOWN",10,false),
LPCAnimationData.new(1,"IDLE_RIGHT",11,false)
]

@export var SpriteSheets:Array[LPCSpriteSheet]
@export var DefaultAnimation:LPCAnimation = LPCAnimation.IDLE_DOWN

#yeah, unfortunatly repeating above string list
@export_enum("CAST_UP",
"CAST_LEFT",
"CAST_DOWN",
"CAST_RIGHT",
"THRUST_UP",
"THRUST_LEFT",
"THRUST_DOWN",
"THRUST_RIGHT",
"WALK_UP",
"WALK_LEFT",
"WALK_DOWN",
"WALK_RIGHT",
"SLASH_UP",
"SLASH_LEFT",
"SLASH_DOWN",
"SLASH_RIGHT",
"SHOOT_UP",
"SHOOT_LEFT",
"SHOOT_DOWN",
"SHOOT_RIGHT",
"HURT_DOWN",
"IDLE_UP",
"IDLE_LEFT",
"IDLE_DOWN",
"IDLE_RIGHT") var DefaultAnimation:int

enum LPCAnimation {
CAST_UP,
CAST_LEFT,
Expand All @@ -86,17 +31,22 @@ enum LPCAnimation {
IDLE_UP,
IDLE_LEFT,
IDLE_DOWN,
IDLE_RIGHT
IDLE_RIGHT,
HURT_DOWN_LAST
}

var AnimationNames:Array
func _ready():
if Engine.is_editor_hint() == false:
LoadAnimations()

func play(animation: LPCAnimation):
var sprites = get_children()
var sprites = get_children() as Array[AnimatedSprite2D]
for sprite in sprites:
sprite.play(AnimationData[animation].Name)
if sprite.sprite_frames.has_animation(AnimationNames[animation]):
sprite.visible = true
sprite.play(AnimationNames[animation])
else:
sprite.visible = false

func _notification(what):
if what == NOTIFICATION_EDITOR_POST_SAVE:
Expand All @@ -106,38 +56,38 @@ func _enter_tree():
if Engine.is_editor_hint():
LoadAnimations()


func LoadAnimations():
AnimationNames = LPCAnimation.keys()
var children = get_children();
for child in children:
remove_child(child)

for spriteSheet in SpriteSheets:
if spriteSheet == null:
push_warning("There are LPCSpriteSheets that are <empty> in the LPCAnimatedSprite2D panel")
continue
var animatedSprite = AnimatedSprite2D.new()
animatedSprite.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST
var spriteFrames = CreateSprites(spriteSheet.SpriteSheet)
var spriteFrames = CreateSprites(spriteSheet)
animatedSprite.frames = spriteFrames
add_child(animatedSprite)
if spriteSheet.Name == null || spriteSheet.Name == "":
animatedSprite.name = "no_name"
else:
animatedSprite.name = spriteSheet.Name
animatedSprite.owner = get_tree().edited_scene_root
animatedSprite.play(AnimationData[DefaultAnimation].Name)
play(DefaultAnimation)

func CreateSprites(spriteSheet:Texture):
func CreateSprites(spriteSheet:LPCSpriteSheet):
var spriteFrames = SpriteFrames.new()
spriteFrames.remove_animation("default")
for animationIndex in AnimationData.size():
var data = AnimationData[animationIndex]
var animationFrameCount = AnimationData[animationIndex].FrameCount
var animationSpriteRow = AnimationData[animationIndex].Row
var animationLoop = AnimationData[animationIndex].Loop
AddAnimation(spriteSheet, spriteFrames, AnimationData[animationIndex])

for animationData in spriteSheet.AnimationData():
AddAnimation(spriteSheet, spriteFrames, animationData)
return spriteFrames

func AddAnimation(spriteSheet:Texture, spriteFrames:SpriteFrames, animationData:LPCAnimationData):
if spriteSheet == null:
func AddAnimation(spriteSheet:LPCSpriteSheet, spriteFrames:SpriteFrames, animationData:LPCAnimationData):
if spriteSheet == null || spriteSheet.SpriteSheet == null:
return
if spriteFrames.has_animation(animationData.Name):
spriteFrames.clear(animationData.Name)
Expand All @@ -147,8 +97,9 @@ func AddAnimation(spriteSheet:Texture, spriteFrames:SpriteFrames, animationData:
if "WALK" in animationData.Name && col == 0:
continue
var atlasTexture = AtlasTexture.new()
atlasTexture.atlas = spriteSheet
atlasTexture.region = Rect2(64*col,64*animationData.Row,64,64)
atlasTexture.atlas = spriteSheet.SpriteSheet
var spriteSize:int = spriteSheet.Size()
atlasTexture.region = Rect2(spriteSize*(col+animationData.Col), spriteSize*animationData.Row, spriteSize, spriteSize)
spriteFrames.add_frame(animationData.Name, atlasTexture, 0.5)
spriteFrames.set_animation_loop(animationData.Name, animationData.Loop)
return spriteFrames
4 changes: 3 additions & 1 deletion addons/LPCAnimatedSprite/LPCSpriteData.gd
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ class_name LPCAnimationData
var FrameCount:int
var Name:String
var Row:int
var Col:int
var Loop:bool
func _init(frameCount:int, name:String, row:int, loop:bool):
func _init(frameCount:int, name:String, row:int, col:int, loop:bool):
FrameCount = frameCount
Name = name
Row = row
Col = col
Loop = loop
90 changes: 88 additions & 2 deletions addons/LPCAnimatedSprite/LPCSpriteSheet.gd
Original file line number Diff line number Diff line change
@@ -1,8 +1,94 @@
@tool
extends Resource
class_name LPCSpriteSheet

@export var SpriteSheet:Texture
@export var Name:String = ""

signal SpriteSheetChanged(texture:Texture)
signal NameChanged
@export var SpriteType: SpriteTypeEnum

enum SpriteTypeEnum {
Normal,
OversizeRod,
OversizeThrust,
OversizeSlash,
OversizeWhip
}

var NormalAnimationData:Array[LPCAnimationData] = [
LPCAnimationData.new(7,"CAST_UP",0, 0,false),
LPCAnimationData.new(7,"CAST_LEFT",1, 0,false),
LPCAnimationData.new(7,"CAST_DOWN",2, 0,false),
LPCAnimationData.new(7,"CAST_RIGHT",3, 0,false),
LPCAnimationData.new(8,"THRUST_UP",4, 0,false),
LPCAnimationData.new(8,"THRUST_LEFT",5, 0,false),
LPCAnimationData.new(8,"THRUST_DOWN",6, 0,false),
LPCAnimationData.new(8,"THRUST_RIGHT",7, 0,false),
LPCAnimationData.new(8,"WALK_UP",8, 0,true),
LPCAnimationData.new(8,"WALK_LEFT",9, 0,true),
LPCAnimationData.new(8,"WALK_DOWN",10, 0,true),
LPCAnimationData.new(8,"WALK_RIGHT",11, 0,true),
LPCAnimationData.new(6,"SLASH_UP",12, 0,false),
LPCAnimationData.new(6,"SLASH_LEFT",13, 0,false),
LPCAnimationData.new(6,"SLASH_DOWN",14, 0,false),
LPCAnimationData.new(6,"SLASH_RIGHT",15, 0,false),
LPCAnimationData.new(6,"WHIP_UP",12, 0,false),
LPCAnimationData.new(6,"WHIP_LEFT",13, 0,false),
LPCAnimationData.new(6,"WHIP_DOWN",14, 0,false),
LPCAnimationData.new(6,"WHIP_RIGHT",15, 0,false),
LPCAnimationData.new(13,"SHOOT_UP",16, 0,false),
LPCAnimationData.new(13,"SHOOT_LEFT",17, 0,false),
LPCAnimationData.new(13,"SHOOT_DOWN",18, 0,false),
LPCAnimationData.new(13,"SHOOT_RIGHT",19, 0,false),
LPCAnimationData.new(6,"HURT_DOWN",20, 0,false),
LPCAnimationData.new(1,"IDLE_UP",8, 0,false),
LPCAnimationData.new(1,"IDLE_LEFT",9, 0,false),
LPCAnimationData.new(1,"IDLE_DOWN",10, 0,false),
LPCAnimationData.new(1,"IDLE_RIGHT",11, 0,false),
LPCAnimationData.new(1,"HURT_DOWN_LAST",20, 5,false),
]
var SlashAnimationData:Array[LPCAnimationData] = [
LPCAnimationData.new(6,"SLASH_UP",0, 0,false),
LPCAnimationData.new(6,"SLASH_LEFT",1, 0,false),
LPCAnimationData.new(6,"SLASH_DOWN",2, 0,false),
LPCAnimationData.new(6,"SLASH_RIGHT",3, 0,false),
]
var ThrustAnimationData:Array[LPCAnimationData] = [
LPCAnimationData.new(6,"THRUST_UP",0, 0,false),
LPCAnimationData.new(6,"THRUST_LEFT",1, 0,false),
LPCAnimationData.new(6,"THRUST_DOWN",2, 0,false),
LPCAnimationData.new(6,"THRUST_RIGHT",3, 0,false),
]
var RodAnimationData:Array[LPCAnimationData] = [
LPCAnimationData.new(6,"ROD_UP",0, 0,false),
LPCAnimationData.new(6,"ROD_LEFT",1, 0,false),
LPCAnimationData.new(6,"ROD_DOWN",2, 0,false),
LPCAnimationData.new(6,"ROD_RIGHT",3, 0,false),
]
var WhipAnimationData:Array[LPCAnimationData] = [
LPCAnimationData.new(8,"WHIP_UP",0, 0,false),
LPCAnimationData.new(8,"WHIP_LEFT",1, 0,false),
LPCAnimationData.new(8,"WHIP_DOWN",2, 0,false),
LPCAnimationData.new(8,"WHIP_RIGHT",3, 0,false),
]

func Size() -> int:
match SpriteType:
SpriteTypeEnum.Normal:
return 64
_:
return 192
func AnimationData() -> Array[LPCAnimationData]:
match SpriteType:
SpriteTypeEnum.Normal:
return NormalAnimationData
SpriteTypeEnum.OversizeRod:
return RodAnimationData
SpriteTypeEnum.OversizeThrust:
return ThrustAnimationData
SpriteTypeEnum.OversizeSlash:
return SlashAnimationData
SpriteTypeEnum.OversizeWhip:
return WhipAnimationData
_:
return NormalAnimationData
2 changes: 1 addition & 1 deletion addons/LPCAnimatedSprite/plugin.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
name="LPCAnimatedSprite"
description=""
author="Alexandro Trevisan"
version="4.1.2.3"
version="4.1.2.4"
script="LPCAnimatedSprite.gd"

0 comments on commit 555b0d7

Please sign in to comment.