/usr/src/castle-game-engine-5.2.0/x3d/x3dloadinternalspine_skins.inc is in castle-game-engine-src 5.2.0-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | {
Copyright 2014-2014 Michalis Kamburelis.
This file is part of "Castle Game Engine".
"Castle Game Engine" is free software; see the file COPYING.txt,
included in this distribution, for details about the copyright.
"Castle Game Engine" is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
----------------------------------------------------------------------------
}
{ Spine skins. }
{$ifdef read_interface}
TSkin = class
Attachments: TAttachmentList;
Name: string;
constructor Create;
destructor Destroy; override;
procedure Parse(const Json: TJSONObject; const Bones: TBoneList);
procedure BuildNodes(const BaseUrl: string; const TextureLoader: TTextureLoader);
end;
TSkinList = class(specialize TFPGObjectList<TSkin>)
{ Find by name.
@raises ESpineReadError If does not exist and NilOnError = @false. }
function Find(const Name: string; const NilOnError: boolean): TSkin;
procedure Parse(const Json: TJSONObject; var DefaultSkin: TSkin; const Bones: TBoneList);
procedure BuildNodes(const BaseUrl: string; const TextureLoader: TTextureLoader);
end;
{$endif}
{$ifdef read_implementation}
{ TSkin ---------------------------------------------------------------------- }
constructor TSkin.Create;
begin
inherited;
Attachments := TAttachmentList.Create;
end;
destructor TSkin.Destroy;
begin
FreeAndNil(Attachments);
inherited;
end;
procedure TSkin.Parse(const Json: TJSONObject; const Bones: TBoneList);
procedure ParseSlotMap(const Json: TJSONObject; const SlotName: string);
var
I: Integer;
Attachment: TAttachment;
begin
for I := 0 to Json.Count - 1 do
if Json.Items[I] is TJSONObject then
begin
Attachment := TAttachment.CreateAndParse(
TJSONObject(Json.Items[I]), SlotName, Json.Names[I], Bones);
if Attachment <> nil then
Attachments.Add(Attachment);
end;
end;
var
I: Integer;
begin
for I := 0 to Json.Count - 1 do
if Json.Items[I] is TJSONObject then
ParseSlotMap(TJSONObject(Json.Items[I]), Json.Names[I]);
end;
procedure TSkin.BuildNodes(const BaseUrl: string; const TextureLoader: TTextureLoader);
var
I: Integer;
begin
for I := 0 to Attachments.Count - 1 do
Attachments[I].BuildNodes(BaseUrl, TextureLoader);
end;
{ TSkinList ------------------------------------------------------------------ }
function TSkinList.Find(const Name: string; const NilOnError: boolean): TSkin;
var
I: Integer;
begin
for I := 0 to Count - 1 do
if Items[I].Name = Name then
Exit(Items[I]);
if NilOnError then
begin
OnWarning(wtMinor, 'Spine', Format('Skin name "%s" not found', [Name]));
Result := nil;
end else
raise ESpineReadError.CreateFmt('Skin name "%s" not found', [Name]);
end;
procedure TSkinList.Parse(const Json: TJSONObject; var DefaultSkin: TSkin; const Bones: TBoneList);
var
I: Integer;
Skin: TSkin;
ChildObj: TJSONObject;
begin
ChildObj := Json.Find('skins', jtObject) as TJSONObject;
if ChildObj = nil then
raise ESpineReadError.Create('Spine JSON skeleton: Missing "skins" object');
for I := 0 to ChildObj.Count - 1 do
if ChildObj.Items[I] is TJSONObject then
begin
Skin := TSkin.Create;
Add(Skin);
Skin.Name := ChildObj.Names[I];
Skin.Parse(TJSONObject(ChildObj.Items[I]), Bones);
if Skin.Name = 'default' then
DefaultSkin := Skin;
end;
if DefaultSkin = nil then
raise ESpineReadError.Create('Spine JSON skeleton: Missing "default" skin definition');
end;
procedure TSkinList.BuildNodes(const BaseUrl: string; const TextureLoader: TTextureLoader);
var
I: Integer;
begin
for I := 0 to Count - 1 do
Items[I].BuildNodes(BaseUrl, TextureLoader);
end;
{$endif}
|