本篇文章主要介绍了" Spine Runtime for Delphi移植笔记(八) - spinedata",主要涉及到方面的内容,对于Delphijrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
////////////////////////////////////////////////////////////////////////////////...
////////////////////////////////////////////////////////////////////////////////
//Generic delphi runtime v3.6 for Spine animation tool //
//Runtime port by cjk (hzi1980@163.com) //
////////////////////////////////////////////////////////////////////////////////unit spine.data;
interfaceuses
System.Classes, System.SysUtils, System.Generics.Collections,
spine.types, spine.classes,
spine.core.skin, spine.core.animation;
type
TSkeletonData = class;
TBoneData = class;
TSlotData = class;
TEventData = class;
TAnimationStateData = class;
TIkConstraintData = class;
TTransformConstraintData = class;
TPathConstraintData = class;
TSkeletonData = class(TObject)
private
FPathConstraintDatas: TObjectList;
FIkConstraintDatas: TObjectList;
FTransformConstraintDatas: TObjectList;
FEventDatas: TObjectList;
FBoneDatas: TObjectList;
FSkins: TObjectList;
FSlotDatas: TObjectList;
FAnimations: TObjectList;
public
Name: string;
DefaultSkin: TSpineSkin;
Width, Height: Single;
Version: string;
Hash: string;
ImagesPath: string;
FPS: Single;
property BoneDatas: TObjectList read FBoneDatas;
property SlotDatas: TObjectList read FSlotDatas;
property Skins: TObjectList read FSkins;
property EventDatas: TObjectList read FEventDatas;
property Animations: TObjectList read FAnimations;
property IkConstraintDatas: TObjectList read FIkConstraintDatas;
property TransformConstraintDatas: TObjectList read FTransformConstraintDatas;
property PathConstraintDatas: TObjectList read FPathConstraintDatas;
publicconstructorCreate;
destructorDestroy; override;
function FindBone(const ABoneDataName: string): TBoneData;
function FindBoneIndex(const ABoneDataName: string): Integer;
function FindSlot(const ASlotDataName: string): TSlotData;
function FindSlotIndex(const ASlotDataName: string): Integer;
function FindSkin(const ASkinName: string): TSpineSkin;
function FintEvent(const AEventDataName: string): TEventData;
function FindAnimation(const AAnimationName: string): TSpineAnimation;
function FindIkConstraint(const AConstraintDataName: string): TIkConstraintData;
function FindTransformConstraint(const AConstraintDataName: string): TTransformConstraintData;
function FindPathConstraint(const AConstraintDataName: string): TPathConstraintData;
function FindPathConstraintIndex(const AConstraintDataName: string): Integer;
end;
TBoneData = class(TObject)
private
FIndex: Integer;
FName: string;
FParent: TBoneData;
public
Length: Single;
X, Y, Rotation, ScaleX, ScaleY, ShearX, ShearY: Single;
TransformMode: TTransformMode;
property Index: Integer read FIndex;
property Name: stringread FName;
property Parent: TBoneData read FParent;
publicconstructorCreate(const AIndex: Integer; const AName: string; const AParent: TBoneData);
end;
TSlotData = class(TObject)
private
FIndex: Integer;
FName: string;
FBoneData: TBoneData;
public
R, G, B, A, R2, G2, B2: Single;
HasSecondColor: Boolean;
AttachmentName: string;
BlendMode: TBlendMode;
property Index: Integer read FIndex;
property Name: stringread FName;
property BoneData: TBoneData read FBoneData;
publicconstructorCreate(const AIndex: Integer; const AName: string; const ABoneData: TBoneData);
end;
TEventData = class(TObject)
private
FName: string;
public
IntValue: Integer;
FloatValue: Single;
StringValue: string;
property Name: stringread FName;
publicconstructorCreate(const AName: string);
end;
TAnimationPair = record
A1: TSpineAnimation;
A2: TSpineAnimation;
end;
TAnimationStateData = class(TObject)
private
FSkeletonData: TSkeletonData;
FAnimationToMixTime: TDictionary;
public
DefaultMix: Single;
property SkeletonData: TSkeletonData read FSkeletonData;
publicconstructorCreate(const ASkeletonData: TSkeletonData);
destructorDestroy; override;
procedure SetMix(const AFromName, AToName: string; const ADuration: Single); overload;
procedure SetMix(const AFrom, ATo: TSpineAnimation; const ADuration: Single); overload;
function GetMix(const AFrom, ATo: TSpineAnimation): Single;
end;
TIkConstraintData = class(TObject)
private
FName: string;
FBoneDatas: TList;
public
Order: Integer;
Mix: Single;
BendDirection: Integer;
Target: TBoneData;
property Name: stringread FName;
property BoneDatas: TList read FBoneDatas;
publicconstructorCreate(const AName: string);
destructorDestroy; override;
end;
TTransformConstraintData = class(TObject)
private
FName: string;
FBoneDatas: TList;
public
Order: Integer;
Target: TBoneData;
RotateMix, TranslateMix, ScaleMix, ShearMix: Single;
OffsetRotation, OffsetX, OffsetY, OffsetScaleX, OffsetScaleY, OffsetShearY: Single;
Relative, Local: Boolean;
property Name: stringread FName;
property BoneDatas: TList read FBoneDatas;
publicconstructorCreate(const AName: string);
destructorDestroy; override;
end;
TPathConstraintData = class(TObject)
private
FName: string;
FBoneDatas: TList;
public
Order: Integer;
Relative: Boolean;
Local: Boolean;
Target: TSlotData;
PositionMode: TPositionMode;
SpacingMode: TSpacingMode;
RotateMode: TRotateMode;
OffsetRotation, Position, Spacing, RotateMix, TranslateMix: Single;
property Name: stringread FName;
property BoneDatas: TList read FBoneDatas;
publicconstructorCreate(const AName: string);
destructorDestroy; override;
end;
implementation{ TSkeletonData }constructor TSkeletonData.Create;
begininheritedCreate;
FPathConstraintDatas:= TObjectList.Create;
FIkConstraintDatas:= TObjectList.Create;
FTransformConstraintDatas:= TObjectList.Create;
FEventDatas:= TObjectList.Create;
FBoneDatas:= TObjectList.Create;
FSkins:= TObjectList.Create;
FSlotDatas:= TObjectList.Create;
FAnimations:= TObjectList.Create;
end;
destructor TSkeletonData.Destroy;
begin
FPathConstraintDatas.Free;
FIkConstraintDatas.Free;
FTransformConstraintDatas.Free;
FEventDatas.Free;
FBoneDatas.Free;
FSkins.Free;
FSlotDatas.Free;
FAnimations.Free;
inherited;
end;
function TSkeletonData.FindBone(const ABoneDataName: string): TBoneData;
var
i: Integer;
begin
result:= nil;
if ABoneDataName.Trim.IsEmpty thenraise Exception.Create('boneDataName cannot be null.');
for i:= 0to FBoneDatas.Count -1dobeginif FBoneDatas.Items[i].Name = ABoneDataName then
exit(FBoneDatas.Items[i]);
end;
end;
function TSkeletonData.FindBoneIndex(const ABoneDataName: string): Integer;
var
i: Integer;
begin
result:= -1;
if ABoneDataName.Trim.IsEmpty thenraise Exception.Create('boneDataName cannot be null.');
for i:= 0to FBoneDatas.Count -1dobeginif FBoneDatas.Items[i].Name = ABoneDataName then
exit(i);
end;
end;
function TSkeletonData.FindSkin(const ASkinName: string): TSpineSkin;
var
lSkin: TSpineSkin;
begin
result:= nil;
if ASkinName.Trim.IsEmpty thenraise Exception.Create('skinName cannot be null.');
for lSkin in FSkins doif lSkin.Name = ASkinName then
exit(lSkin);
end;
function TSkeletonData.FindSlot(const ASlotDataName: string): TSlotData;
var
i: Integer;
begin
result:= nil;
if ASlotDataName.Trim.IsEmpty thenraise Exception.Create('slotDataName cannot be null.');
for i:= 0to FSlotDatas.Count -1dobeginif FSlotDatas.Items[i].Name = ASlotDataName then
exit(FSlotDatas.Items[i]);
end;
end;
function TSkeletonData.FindSlotIndex(const ASlotDataName: string): Integer;
var
i: Integer;
begin
result:= -1;
if ASlotDataName.Trim.IsEmpty thenraise Exception.Create('slotDataName cannot be null.');
for i:= 0to FSlotDatas.Count -1dobeginif FSlotDatas.Items[i].Name = ASlotDataName then
exit(i);
end;
end;
function TSkeletonData.FintEvent(const AEventDataName: string): TEventData;
var
lData: TEventData;
begin
result:= nil;
if AEventDataName.Trim.IsEmpty thenraise Exception.Create('eventDataName cannot be null.');
for lData in FEventDatas doif lData.Name = AEventDataName then
exit(lData);
end;
function TSkeletonData.FindAnimation(const AAnimationName: string): TSpineAnimation;
var
i: Integer;
begin
result:= nil;
if AAnimationName.Trim.IsEmpty thenraise Exception.Create('animationName cannot be null.');
for i:= 0to FAnimations.Count -1dobeginif FAnimations.Items[i].Name = AAnimationName then
exit(FAnimations.Items[i]);
end;
end;
function TSkeletonData.FindIkConstraint(
const AConstraintDataName: string): TIkConstraintData;
var
i: Integer;
begin
result:= nil;
if AConstraintDataName.Trim.IsEmpty thenraise Exception.Create('constraintDataName cannot be null.');
for i:= 0to FIkConstraintDatas.Count -1dobeginif FIkConstraintDatas.Items[i].Name = AConstraintDataName then
exit(FIkConstraintDatas.Items[i]);
end;
end;
function TSkeletonData.FindPathConstraint(
const AConstraintDataName: string): TPathConstraintData;
var
i: Integer;
begin
result:= nil;
if AConstraintDataName.Trim.IsEmpty thenraise Exception.Create('constraintDataName cannot be null.');
for i:= 0to FPathConstraintDatas.Count -1dobeginif FPathConstraintDatas.Items[i].Name = AConstraintDataName then
exit(FPathConstraintDatas.Items[i]);
end;
end;
function TSkeletonData.FindPathConstraintIndex(
const AConstraintDataName: string): Integer;
var
i: Integer;
begin
result:= -1;
if AConstraintDataName.Trim.IsEmpty thenraise Exception.Create('constraintDataName cannot be null.');
for i:= 0to FIkConstraintDatas.Count -1dobeginif FIkConstraintDatas.Items[i].Name = AConstraintDataName then
exit(i);
end;
end;
function TSkeletonData.FindTransformConstraint(
const AConstraintDataName: string): TTransformConstraintData;
var
i: Integer;
begin
result:= nil;
if AConstraintDataName.Trim.IsEmpty thenraise Exception.Create('constraintDataName cannot be null.');
for i:= 0to FTransformConstraintDatas.Count -1dobeginif FTransformConstraintDatas.Items[i].Name = AConstraintDataName then
exit(FTransformConstraintDatas.Items[i]);
end;
end;
{ TBoneData }constructor TBoneData.Create(const AIndex: Integer; const AName: string;
const AParent: TBoneData);
begininheritedCreate;
if AIndex < 0thenraise Exception.Create('index must be >= 0.');
if AName.Trim.IsEmpty thenraise Exception.Create('name cannot be null.');
FIndex:= AIndex;
FName:= AName;
FParent:= AParent;
ScaleX:= 1;
ScaleY:= 1;
TransformMode:= TTransformMode.tmNormal;
end;
{ TSlotData }constructor TSlotData.Create(const AIndex: Integer; const AName: string;
const ABoneData: TBoneData);
begininheritedCreate;
if AIndex < 0thenraise Exception.Create('index must be >= 0.');
if AName.Trim.IsEmpty thenraise Exception.Create('name cannot be null.');
ifnot Assigned(ABoneData) thenraise Exception.Create('boneData cannot be null.');
FIndex:= AIndex;
FName:= AName;
FBoneData:= ABoneData;
R:= 1; G:= 1; B:= 1; A:= 1;
R2:= 0; G2:= 0; B2:= 0;
HasSecondColor:= False;
end;
{ TEventData }constructor TEventData.Create(const AName: string);
begininheritedCreate;
if AName.Trim.IsEmpty thenraise Exception.Create('name cannot be null.');
FName:= AName;
end;
{ TAnimationStateData }constructor TAnimationStateData.Create(const ASkeletonData: TSkeletonData);
begininheritedCreate;
ifnot Assigned(ASkeletonData) thenraise Exception.Create('skeletonData cannot be null.');
FAnimationToMixTime:= TDictionary.Create;
FSkeletonData:= ASkeletonData;
end;
destructor TAnimationStateData.Destroy;
begin
FAnimationToMixTime.Free;
inherited;
end;
procedure TAnimationStateData.SetMix(const AFromName, AToName: string;
const ADuration: Single);
var
lFrom, lTo: TSpineAnimation;
begin
lFrom:= FSkeletonData.FindAnimation(AFromName);
ifnot Assigned(lFrom) thenraise Exception.CreateFmt('Animation not found: %s',[AFromName]);
lTo:= FSkeletonData.FindAnimation(AToName);
ifnot Assigned(lTo) thenraise Exception.CreateFmt('Animation not found: %s',[AToName]);
SetMix(lFrom, lTo, ADuration);
end;
procedure TAnimationStateData.SetMix(const AFrom, ATo: TSpineAnimation;
const ADuration: Single);
var
lKey: TAnimationPair;
beginifnot Assigned(AFrom) thenraise Exception.Create('from animation cannot be null.');
ifnot Assigned(ATo) thenraise Exception.Create('to animation cannot be null.');
lKey.A1:= AFrom;
lKey.A2:= ATo;
FAnimationToMixTime.AddOrSetValue(lKey, ADuration);
end;
function TAnimationStateData.GetMix(const AFrom, ATo: TSpineAnimation): Single;
var
lKey: TAnimationPair;
beginifnot Assigned(AFrom) thenraise Exception.Create('from animation cannot be null.');
ifnot Assigned(ATo) thenraise Exception.Create('to animation cannot be null.');
lKey.A1:= AFrom;
lKey.A2:= ATo;
ifnot FAnimationToMixTime.TryGetValue(lKey, result) then
result:= DefaultMix;
end;
{ TIkConstraintData }constructor TIkConstraintData.Create(const AName: string);
begininheritedCreate;
if AName.Trim.IsEmpty thenraise Exception.Create('name cannot be null.');
FName:= AName;
FBoneDatas:= TList.Create;
end;
destructor TIkConstraintData.Destroy;
begin
FBoneDatas.Free;
inherited;
end;
{ TTransformConstraintData }constructor TTransformConstraintData.Create(const AName: string);
begininheritedCreate;
if AName.Trim.IsEmpty thenraise Exception.Create('name cannot be null.');
FName:= AName;
FBoneDatas:= TList.Create;
end;
destructor TTransformConstraintData.Destroy;
begin
FBoneDatas.Free;
inherited;
end;
{ TPathConstraintData }constructor TPathConstraintData.Create(const AName: string);
begininheritedCreate;
if AName.Trim.IsEmpty thenraise Exception.Create('name cannot be null.');
FName:= AName;
FBoneDatas:= TList.Create;
end;
destructor TPathConstraintData.Destroy;
begin
FBoneDatas.Free;
inherited;
end;
end.
各种数据
以上就介绍了 Spine Runtime for Delphi移植笔记(八) - spinedata,包括了方面的内容,希望对Delphijrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播有兴趣的朋友有所帮助。
本文网址链接:http://www.codes51.com/article/detail_4417750.html