mirror of
https://github.com/4ian/GDevelop.git
synced 2025-10-15 10:19:04 +00:00
Add custom hitbox action and fix polygons draw
This commit is contained in:
@@ -175,7 +175,7 @@ gdjs.sk.DebugPixiRenderer.prototype.loadVertices = function(verts, color, fill){
|
||||
}
|
||||
this.renderer.lineStyle(2, color, 0.8);
|
||||
for(var i=0; i<verts.length; i++){
|
||||
this.renderer.drawPolygon(verts.reduce(function(a, b){ return a.concat(b); }));
|
||||
this.renderer.drawPolygon(verts.reduce(function(a, b){ return a.concat(b); }).concat(verts[0]));
|
||||
}
|
||||
if(fill){
|
||||
this.renderer.endFill();
|
||||
|
@@ -137,6 +137,16 @@ void DeclareSkeletonObjectExtension(gd::PlatformExtension & extension)
|
||||
obj.AddExpression("Height", _("Height"), _("Object height"), _("Size"), "JsPlatform/Extensions/skeletonicon16.png")
|
||||
.AddParameter("object", _("Object"), "Skeleton");
|
||||
|
||||
obj.AddAction("SetDefaultHitbox",
|
||||
_("Default hitbox"),
|
||||
_("Change the object default hitbox to be used by other conditions and behaviors."),
|
||||
_("Set _PARAM0_ default hitbox to _PARAM1_"),
|
||||
_("Size"),
|
||||
"JsPlatform/Extensions/skeletonicon24.png",
|
||||
"JsPlatform/Extensions/skeletonicon16.png")
|
||||
.AddParameter("object", _("Object"), "Skeleton")
|
||||
.AddParameter("string", _("Slot path")).SetDefaultValue("\"\"");
|
||||
|
||||
// Animation instructions
|
||||
obj.AddCondition("AnimationPaused",
|
||||
_("Paused"),
|
||||
|
@@ -23,6 +23,7 @@ gdjs.SkeletonRuntimeObject = function(runtimeScene, objectData){
|
||||
this.scaleX = 1.0;
|
||||
this.scaleY = 1.0;
|
||||
this.renderer = new gdjs.SkeletonRuntimeObjectRenderer();
|
||||
this.hitboxSlot = null;
|
||||
|
||||
var skeletalData = this.renderer.getData(objectData.skeletalDataFilename);
|
||||
// Main loaders
|
||||
@@ -54,6 +55,7 @@ gdjs.SkeletonRuntimeObject.prototype.loadDragonBones = function(runtimeScene, sk
|
||||
this.rootArmature.loadDragonBones(skeletalData, 0, this.renderer.textures, objectData.debugPolygons);
|
||||
}
|
||||
this.rootArmature.renderer.putInScene(this, runtimeScene);
|
||||
this.customHitboxes = [];
|
||||
};
|
||||
|
||||
// RuntimeObject overwrites
|
||||
@@ -77,6 +79,9 @@ gdjs.SkeletonRuntimeObject.prototype.getRendererObject = function(){
|
||||
};
|
||||
|
||||
gdjs.SkeletonRuntimeObject.prototype.getHitBoxes = function(){
|
||||
if(this.hitboxSlot){
|
||||
return this.hitboxSlot.getPolygons();
|
||||
}
|
||||
return [this.rootArmature.getAABB()];
|
||||
};
|
||||
|
||||
@@ -113,7 +118,7 @@ gdjs.SkeletonRuntimeObject.prototype.setScaleY = function(scaleY){
|
||||
};
|
||||
|
||||
gdjs.SkeletonRuntimeObject.prototype.getWidth = function(){
|
||||
return this.rootArmature.getDefaultWidth() * this.scaleX;
|
||||
return this.rootArmature.getDefaultWidth() * Math.abs(this.scaleX);
|
||||
};
|
||||
|
||||
gdjs.SkeletonRuntimeObject.prototype.setWidth = function(width){
|
||||
@@ -122,7 +127,7 @@ gdjs.SkeletonRuntimeObject.prototype.setWidth = function(width){
|
||||
};
|
||||
|
||||
gdjs.SkeletonRuntimeObject.prototype.getHeight = function(){
|
||||
return this.rootArmature.getDefaultHeight() * this.scaleY;
|
||||
return this.rootArmature.getDefaultHeight() * Math.abs(this.scaleY);
|
||||
};
|
||||
|
||||
gdjs.SkeletonRuntimeObject.prototype.setHeight = function(height){
|
||||
@@ -130,6 +135,17 @@ gdjs.SkeletonRuntimeObject.prototype.setHeight = function(height){
|
||||
this.setScaleY(height / this.rootArmature.getDefaultHeight());
|
||||
};
|
||||
|
||||
gdjs.SkeletonRuntimeObject.prototype.setDefaultHitbox = function(slotPath){
|
||||
if(slotPath === ""){
|
||||
this.hitboxSlot = null;
|
||||
return;
|
||||
}
|
||||
var slot = this.getSlot(slotPath);
|
||||
if(slot){
|
||||
this.hitboxSlot = slot;
|
||||
}
|
||||
};
|
||||
|
||||
// Animation instructions
|
||||
gdjs.SkeletonRuntimeObject.prototype.isAnimationPaused = function(){
|
||||
return !this.animationPlaying;
|
||||
|
@@ -30,7 +30,7 @@ public:
|
||||
|
||||
GetObjectMetadata("SkeletonObject::Skeleton")
|
||||
.SetIncludeFile("Extensions/SkeletonObject/Hsk-tools.js")
|
||||
.SetIncludeFile("Extensions/SkeletonObject/Gskeletonruntimeobject.js")
|
||||
.AddIncludeFile("Extensions/SkeletonObject/Gskeletonruntimeobject.js")
|
||||
.AddIncludeFile("Extensions/SkeletonObject/Fskanimation.js")
|
||||
.AddIncludeFile("Extensions/SkeletonObject/Eskarmature.js")
|
||||
.AddIncludeFile("Extensions/SkeletonObject/Dskslot.js")
|
||||
@@ -60,6 +60,8 @@ public:
|
||||
actions["SkeletonObject::SetHeight"].SetFunctionName("setHeight").SetGetter("getHeight");
|
||||
expressions["Height"].SetFunctionName("getHeight");
|
||||
|
||||
actions["SkeletonObject::SetDefaultHitbox"].SetFunctionName("setDefaultHitbox");
|
||||
|
||||
// Animation instructions
|
||||
conditions["SkeletonObject::AnimationPaused"].SetFunctionName("isAnimationPaused");
|
||||
actions["SkeletonObject::PauseAnimation"].SetFunctionName("setAnimationPaused");
|
||||
|
Reference in New Issue
Block a user