mirror of
https://gitgud.io/AbstractConcept/rimworld-animation-studio.git
synced 2024-08-15 00:43:27 +00:00
Manual timeline, cycle and actor tweaking
This commit is contained in:
parent
dfa564759b
commit
1dd7781179
165 changed files with 4040 additions and 166 deletions
Binary file not shown.
|
@ -66,6 +66,7 @@
|
|||
<Compile Include="Assets\Scripts\ActorBody.cs" />
|
||||
<Compile Include="Assets\Scripts\ActorCard.cs" />
|
||||
<Compile Include="Assets\Scripts\AnimationComponents\Actor.cs" />
|
||||
<Compile Include="Assets\Scripts\AnimationComponents\ActorBodyPart.cs" />
|
||||
<Compile Include="Assets\Scripts\AnimationComponents\AlienRaceOffset.cs" />
|
||||
<Compile Include="Assets\Scripts\AnimationComponents\AnimationClips\AnimationClip.cs" />
|
||||
<Compile Include="Assets\Scripts\AnimationComponents\AnimationClips\PawnAnimationClip.cs" />
|
||||
|
@ -89,8 +90,10 @@
|
|||
<Compile Include="Assets\Scripts\DialogBoxes\SelectDefNamesDialog.cs" />
|
||||
<Compile Include="Assets\Scripts\DialogBoxes\SelectInteractionDefsDialog.cs" />
|
||||
<Compile Include="Assets\Scripts\DialogBoxes\SelectSexTypesDialog.cs" />
|
||||
<Compile Include="Assets\Scripts\Enums.cs" />
|
||||
<Compile Include="Assets\Scripts\Extensions\IListExtensions.cs" />
|
||||
<Compile Include="Assets\Scripts\Extensions\TransformExtensions.cs" />
|
||||
<Compile Include="Assets\Scripts\GUI\ActorKeyframeCard.cs" />
|
||||
<Compile Include="Assets\Scripts\GUI\AnimationTimeline.cs" />
|
||||
<Compile Include="Assets\Scripts\GUI\KeyframeSlider.cs" />
|
||||
<Compile Include="Assets\Scripts\GenMath.cs" />
|
||||
|
|
|
@ -10,6 +10,8 @@ GameObject:
|
|||
m_Component:
|
||||
- component: {fileID: 7929422519883802245}
|
||||
- component: {fileID: 7929422519883802244}
|
||||
- component: {fileID: 3275330537164762353}
|
||||
- component: {fileID: 7621569460770085946}
|
||||
m_Layer: 0
|
||||
m_Name: ActorHead
|
||||
m_TagString: Untagged
|
||||
|
@ -70,17 +72,57 @@ SpriteRenderer:
|
|||
m_SortingLayerID: -2115984483
|
||||
m_SortingLayer: 22
|
||||
m_SortingOrder: 1
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Sprite: {fileID: 21300000, guid: 0b37cc6354dc6a94cb2d2de2529baa4e, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_Size: {x: 1.28, y: 1.28}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_MaskInteraction: 0
|
||||
m_SpriteSortPoint: 0
|
||||
--- !u!114 &3275330537164762353
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7929422519883802246}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b23e33f312d52c642b86f5f2138f4030, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
bodyPartRenderer: {fileID: 7929422519883802244}
|
||||
parent: {fileID: -4411442180840688308}
|
||||
--- !u!61 &7621569460770085946
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7929422519883802246}
|
||||
m_Enabled: 1
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IsTrigger: 0
|
||||
m_UsedByEffector: 0
|
||||
m_UsedByComposite: 0
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
oldSize: {x: 1.28, y: 1.28}
|
||||
newSize: {x: 1.28, y: 1.28}
|
||||
adaptiveTilingThreshold: 0.5
|
||||
drawMode: 0
|
||||
adaptiveTiling: 0
|
||||
m_AutoTiling: 0
|
||||
serializedVersion: 2
|
||||
m_Size: {x: 0.5, y: 0.5}
|
||||
m_EdgeRadius: 0
|
||||
--- !u!1 &7929422520673851210
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -92,6 +134,7 @@ GameObject:
|
|||
- component: {fileID: 7929422520673851209}
|
||||
- component: {fileID: 7929422520673851208}
|
||||
- component: {fileID: -4411442180840688308}
|
||||
- component: {fileID: -7575978412006062152}
|
||||
m_Layer: 0
|
||||
m_Name: ActorBody
|
||||
m_TagString: Untagged
|
||||
|
@ -153,15 +196,15 @@ SpriteRenderer:
|
|||
m_SortingLayerID: -2115984483
|
||||
m_SortingLayer: 22
|
||||
m_SortingOrder: 0
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Sprite: {fileID: 21300000, guid: e6887bc2f64df4d4b91bd2d0ad0ffd98, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_Size: {x: 1.5058824, y: 1.5058824}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_MaskInteraction: 0
|
||||
m_SpriteSortPoint: 0
|
||||
--- !u!114 &-4411442180840688308
|
||||
|
@ -176,5 +219,32 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: 511a9ed9093e7fc458dec8d3c657f9a5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
actorID: 0
|
||||
bodyRenderer: {fileID: 7929422520673851208}
|
||||
headRenderer: {fileID: 7929422519883802244}
|
||||
--- !u!61 &-7575978412006062152
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7929422520673851210}
|
||||
m_Enabled: 1
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IsTrigger: 0
|
||||
m_UsedByEffector: 0
|
||||
m_UsedByComposite: 0
|
||||
m_Offset: {x: 0, y: -0.2}
|
||||
m_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
oldSize: {x: 1.5058824, y: 1.5058824}
|
||||
newSize: {x: 1.5058824, y: 1.5058824}
|
||||
adaptiveTilingThreshold: 0.5
|
||||
drawMode: 0
|
||||
adaptiveTiling: 0
|
||||
m_AutoTiling: 0
|
||||
serializedVersion: 2
|
||||
m_Size: {x: 0.75, y: 1}
|
||||
m_EdgeRadius: 0
|
||||
|
|
|
@ -107,7 +107,7 @@ RectTransform:
|
|||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 1, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 20}
|
||||
m_SizeDelta: {x: -10, y: 20}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &7758949423219383195
|
||||
MonoBehaviour:
|
||||
|
@ -147,7 +147,7 @@ MonoBehaviour:
|
|||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_Interactable: 0
|
||||
m_TargetGraphic: {fileID: 0}
|
||||
m_FillRect: {fileID: 0}
|
||||
m_HandleRect: {fileID: 4629009613275671144}
|
||||
|
@ -164,6 +164,8 @@ MonoBehaviour:
|
|||
ghostSliderPrefab: {fileID: 3581489635090573721, guid: 890d76c226858de4fa96adfe7cc85383,
|
||||
type: 3}
|
||||
maxGhosts: 0
|
||||
actorID: 0
|
||||
keyframeID: 0
|
||||
--- !u!1 &8359461402257861397
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 22 KiB |
BIN
Assets/Resources/Textures/UI/square.png
Normal file
BIN
Assets/Resources/Textures/UI/square.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 151 B |
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f2673788e9e92e147b38af939d2fb7fe
|
||||
guid: 51ffbfed19686f041975a6e1757db741
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
@ -45,7 +45,7 @@ TextureImporter:
|
|||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 20
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
File diff suppressed because it is too large
Load diff
|
@ -1,12 +1,73 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
|
||||
namespace RimWorldAnimationStudio
|
||||
{
|
||||
public class ActorBody : MonoBehaviour
|
||||
public class ActorBody : MonoBehaviour, IPointerClickHandler, IDragHandler
|
||||
{
|
||||
public int actorID;
|
||||
|
||||
public SpriteRenderer bodyRenderer;
|
||||
public SpriteRenderer headRenderer;
|
||||
|
||||
public void Initialize(int actorID)
|
||||
{
|
||||
this.actorID = actorID;
|
||||
}
|
||||
|
||||
public void OnPointerClick(PointerEventData eventData)
|
||||
{
|
||||
if (eventData.pointerCurrentRaycast.gameObject.GetComponent<ActorBody>() == null)
|
||||
{ return; }
|
||||
|
||||
foreach (ActorBody actorBody in AnimationController.Instance.actorBodies)
|
||||
{
|
||||
if (actorBody == this)
|
||||
{ continue; }
|
||||
|
||||
actorBody.bodyRenderer.color = new Color(1f, 1f, 1f);
|
||||
actorBody.headRenderer.color = new Color(1f, 1f, 1f);
|
||||
}
|
||||
|
||||
bodyRenderer.color = new Color(0f, 1f, 0f);
|
||||
headRenderer.color = new Color(0f, 1f, 0f);
|
||||
|
||||
Workspace.actorID = actorID;
|
||||
}
|
||||
|
||||
public void OnDrag(PointerEventData eventData)
|
||||
{
|
||||
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
|
||||
|
||||
|
||||
if (Workspace.actorManipulationMode == ActorManipulationMode.Pan)
|
||||
{
|
||||
Workspace.animationDef.animationStages[Workspace.stageID].animationClips[actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID).bodyOffsetX = mousePosition.x;
|
||||
Workspace.animationDef.animationStages[Workspace.stageID].animationClips[actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID).bodyOffsetZ = mousePosition.y;
|
||||
}
|
||||
|
||||
else if (Workspace.actorManipulationMode == ActorManipulationMode.Rotate)
|
||||
{
|
||||
float angle = Vector2.SignedAngle(Vector2.down, (Vector2)mousePosition - (Vector2)transform.position);
|
||||
Workspace.animationDef.animationStages[Workspace.stageID].animationClips[actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID).bodyAngle = angle;
|
||||
}
|
||||
|
||||
else if (Workspace.actorManipulationMode == ActorManipulationMode.Face)
|
||||
{
|
||||
float angle = Vector2.SignedAngle(Vector2.up, (Vector2)mousePosition - (Vector2)transform.position);
|
||||
int facing = -Mathf.RoundToInt(angle / 90f );
|
||||
facing = facing < 0 ? facing + 4 : facing;
|
||||
|
||||
Debug.Log(facing.ToString());
|
||||
|
||||
Workspace.animationDef.animationStages[Workspace.stageID].animationClips[actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID).bodyFacing = facing;
|
||||
}
|
||||
|
||||
PawnAnimationClip clip = Workspace.Instance.GetPawnAnimationClip(actorID);
|
||||
clip.BuildSimpleCurves();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
67
Assets/Scripts/AnimationComponents/ActorBodyPart.cs
Normal file
67
Assets/Scripts/AnimationComponents/ActorBodyPart.cs
Normal file
|
@ -0,0 +1,67 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
|
||||
namespace RimWorldAnimationStudio
|
||||
{
|
||||
public class ActorBodyPart : MonoBehaviour, IDragHandler, IPointerClickHandler
|
||||
{
|
||||
public SpriteRenderer bodyPartRenderer;
|
||||
public ActorBody parent;
|
||||
|
||||
public void OnPointerClick(PointerEventData eventData)
|
||||
{
|
||||
if (eventData.pointerCurrentRaycast.gameObject.GetComponent<ActorBodyPart>() == null)
|
||||
{ return; }
|
||||
|
||||
foreach (ActorBody actorBody in AnimationController.Instance.actorBodies)
|
||||
{
|
||||
actorBody.bodyRenderer.color = new Color(1f, 1f, 1f);
|
||||
actorBody.headRenderer.color = new Color(1f, 1f, 1f);
|
||||
}
|
||||
|
||||
bodyPartRenderer.color = new Color(0f, 1f, 0f);
|
||||
}
|
||||
|
||||
public void OnDrag(PointerEventData eventData)
|
||||
{
|
||||
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
|
||||
PawnKeyframe keyframe = Workspace.animationDef.animationStages[Workspace.stageID].animationClips[parent.actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID);
|
||||
|
||||
if (Workspace.actorManipulationMode == ActorManipulationMode.Pan)
|
||||
{
|
||||
float distance = ((Vector2)mousePosition - (Vector2)transform.position).y;
|
||||
Vector3 headOffset = new Vector3(0f, 0.34f, 0f);
|
||||
headOffset = Quaternion.Euler(0, 0, keyframe.bodyAngle) * headOffset;
|
||||
|
||||
distance = Vector2.Dot(parent.transform.up, (Vector2)(mousePosition - parent.transform.position - headOffset));
|
||||
|
||||
Debug.Log(headOffset.ToString());
|
||||
|
||||
Workspace.animationDef.animationStages[Workspace.stageID].animationClips[parent.actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID).headBob = distance;
|
||||
}
|
||||
|
||||
else if (Workspace.actorManipulationMode == ActorManipulationMode.Rotate)
|
||||
{
|
||||
float angle = Vector2.SignedAngle(Vector2.down, (Vector2)mousePosition - (Vector2)transform.position);
|
||||
Workspace.animationDef.animationStages[Workspace.stageID].animationClips[parent.actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID).headAngle = angle;
|
||||
}
|
||||
|
||||
else if (Workspace.actorManipulationMode == ActorManipulationMode.Face)
|
||||
{
|
||||
float angle = Vector2.SignedAngle(Vector2.up, (Vector2)mousePosition - (Vector2)transform.position);
|
||||
int facing = -Mathf.RoundToInt(angle / 90f);
|
||||
facing = facing < 0 ? facing + 4 : facing;
|
||||
|
||||
Debug.Log(facing.ToString());
|
||||
|
||||
Workspace.animationDef.animationStages[Workspace.stageID].animationClips[parent.actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID).headFacing = facing;
|
||||
}
|
||||
|
||||
PawnAnimationClip clip = Workspace.Instance.GetPawnAnimationClip(parent.actorID);
|
||||
clip.BuildSimpleCurves();
|
||||
}
|
||||
}
|
||||
}
|
11
Assets/Scripts/AnimationComponents/ActorBodyPart.cs.meta
Normal file
11
Assets/Scripts/AnimationComponents/ActorBodyPart.cs.meta
Normal file
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b23e33f312d52c642b86f5f2138f4030
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -49,8 +49,6 @@ namespace RimWorldAnimationStudio
|
|||
if (keyframe.HasValidKeyframeID() == false)
|
||||
{ keyframe.GenerateKeyframeID(); }
|
||||
|
||||
Debug.Log(keyframe.atTick.Value);
|
||||
|
||||
BodyAngle.Add((float)keyframe.atTick / (float)duration, keyframe.bodyAngle, true);
|
||||
HeadAngle.Add((float)keyframe.atTick / (float)duration, keyframe.headAngle, true);
|
||||
BodyOffsetX.Add((float)keyframe.atTick / (float)duration, keyframe.bodyOffsetX, true);
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
using UnityEngine;
|
||||
|
@ -25,8 +26,15 @@ namespace RimWorldAnimationStudio
|
|||
|
||||
public void GenerateKeyframeID()
|
||||
{
|
||||
keyframeID = Random.Range(100000, 1000000);
|
||||
Debug.Log("Generated ID: " + keyframeID);
|
||||
int _keyframeID = Random.Range(100000, 1000000);
|
||||
|
||||
if (Workspace.animationDef.animationStages.Any(x => x.animationClips.Any(y => y.keyframes.Any(z => z.keyframeID == _keyframeID))))
|
||||
{
|
||||
GenerateKeyframeID();
|
||||
return;
|
||||
}
|
||||
|
||||
keyframeID = _keyframeID;
|
||||
}
|
||||
|
||||
public bool HasValidKeyframeID()
|
||||
|
|
|
@ -36,6 +36,10 @@ namespace RimWorldAnimationStudio
|
|||
public AnimationTimeline animationTimelinePrefab;
|
||||
|
||||
private float currentTime = 0;
|
||||
private int cycleIndex = 0;
|
||||
|
||||
public InputField cyclesNormalField;
|
||||
public InputField cyclesFastField;
|
||||
|
||||
public void Update()
|
||||
{
|
||||
|
@ -58,25 +62,29 @@ namespace RimWorldAnimationStudio
|
|||
currentTime -= 1f/60f;
|
||||
stageTick += 1;
|
||||
|
||||
int stageLenght = Workspace.animationDef.animationStages[Workspace.stageID].playTimeTicks;
|
||||
|
||||
if (stageTick > stageLenght)
|
||||
if (stageTick > Workspace.animationClipWindowSize)
|
||||
{
|
||||
if (stageLoopDropdown.value == 1)
|
||||
{ stageTick = 1; }
|
||||
|
||||
else if (stageLoopDropdown.value == 2 && Workspace.stageID < Workspace.animationDef.animationStages.Count - 1)
|
||||
{
|
||||
stageTick = 1;
|
||||
Workspace.stageID++;
|
||||
stageIDField.text = Workspace.stageID.ToString();
|
||||
{
|
||||
++cycleIndex;
|
||||
stageTick = 1;
|
||||
|
||||
if (cycleIndex > int.Parse(cyclesNormalField.text))
|
||||
{
|
||||
++Workspace.stageID;
|
||||
stageIDField.text = Workspace.stageID.ToString();
|
||||
cycleIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{ stageTick = stageLenght; }
|
||||
{ stageTick = Workspace.animationClipWindowSize; }
|
||||
}
|
||||
|
||||
stageTimelineSlider.maxValue = stageLenght;
|
||||
stageTimelineSlider.maxValue = Workspace.animationClipWindowSize;
|
||||
stageTimelineSlider.value = stageTick;
|
||||
|
||||
UpdateAnimation();
|
||||
|
@ -87,12 +95,12 @@ namespace RimWorldAnimationStudio
|
|||
if (stageTickText != null)
|
||||
{ stageTickText.text = stageTick.ToString(); }
|
||||
if (stageLengthText != null)
|
||||
{ stageLengthText.text = Workspace.animationDef.animationStages[Workspace.stageID].playTimeTicks.ToString(); }
|
||||
{ stageLengthText.text = Workspace.animationClipWindowSize.ToString(); }
|
||||
|
||||
for (int actorID = 0; actorID < actorBodies.Count; actorID++)
|
||||
{
|
||||
ActorBody actorBody = actorBodies[actorID];
|
||||
string bodyType = actorCards.transform.GetChild(actorID).GetComponent<ActorCard>().bodyType; //bodyTypeDropdowns[actorID].options[bodyTypeDropdowns[actorID].value].text;
|
||||
string bodyType = actorCards.transform.GetChild(actorID).GetComponent<ActorCard>().bodyType;
|
||||
|
||||
PawnAnimationClip clip = Workspace.animationDef.animationStages[Workspace.stageID].animationClips[actorID];
|
||||
float clipPercent = (float)(stageTick % clip.duration) / clip.duration;
|
||||
|
@ -128,7 +136,7 @@ namespace RimWorldAnimationStudio
|
|||
|
||||
actorBody.bodyRenderer.sortingLayerName = clip.layer;
|
||||
actorBody.headRenderer.sortingLayerName = clip.layer;
|
||||
actorBody.headRenderer.sortingOrder = headFacing == 2 ? 1 : -1;
|
||||
actorBody.headRenderer.sortingOrder = headFacing == 0 ? -1 : 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -154,10 +162,17 @@ namespace RimWorldAnimationStudio
|
|||
|
||||
Reset();
|
||||
|
||||
Workspace.animationClipWindowSize = Workspace.animationDef.animationStages[Workspace.stageID].animationClips.Select(x => x.duration).Max();
|
||||
stageTimelineSlider.maxValue = Workspace.animationClipWindowSize;
|
||||
|
||||
cyclesNormalField.text = Mathf.Max(Mathf.CeilToInt((float)Workspace.animationDef.animationStages[Workspace.stageID].playTimeTicks / Workspace.animationClipWindowSize), 1).ToString();
|
||||
cyclesFastField.text = Mathf.Max(Mathf.CeilToInt((float)Workspace.animationDef.animationStages[Workspace.stageID].playTimeTicksQuick / Workspace.animationClipWindowSize), 1).ToString();
|
||||
|
||||
for (int actorID = 0; actorID < Workspace.animationDef.actors.Count; actorID++)
|
||||
{
|
||||
GameObject actorBodyObject = Instantiate(actorBodyPrefab, transform);
|
||||
actorBodies.Add(actorBodyObject.GetComponent<ActorBody>());
|
||||
actorBodyObject.GetComponent<ActorBody>().Initialize(actorID);
|
||||
|
||||
GameObject actorCardObject = Instantiate(actorCardPrefab, actorCards);
|
||||
actorCardObject.GetComponent<ActorCard>().Initialize(Workspace.animationDef.actors[actorID]);
|
||||
|
@ -204,10 +219,13 @@ namespace RimWorldAnimationStudio
|
|||
if (Workspace.animationDef == null)
|
||||
{ return; }
|
||||
|
||||
int stageLenght = Workspace.animationDef.animationStages[Workspace.stageID].playTimeTicks;
|
||||
|
||||
if (stageLenght != (int)stageTimelineSlider.value)
|
||||
if (stageTick != (int)stageTimelineSlider.value)
|
||||
{ stageTick = (int)stageTimelineSlider.value; }
|
||||
}
|
||||
|
||||
public void ToggleActorManipulationMode(int mode)
|
||||
{
|
||||
Workspace.actorManipulationMode = (ActorManipulationMode)mode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,8 +48,8 @@ namespace RimWorldAnimationStudio
|
|||
{
|
||||
Debug.Log("Loaded AnimationDef: " + animationDef.defName);
|
||||
|
||||
animationDef.Initialize();
|
||||
Workspace.animationDef = animationDef;
|
||||
animationDef.Initialize();
|
||||
Workspace.isDirty = true;
|
||||
|
||||
var animationDefCards = Resources.FindObjectsOfTypeAll(typeof(AnimationDefCard)) as AnimationDefCard[];
|
||||
|
@ -78,8 +78,19 @@ namespace RimWorldAnimationStudio
|
|||
{
|
||||
Debug.Log("Saving AnimationDef: " + Workspace.animationDef.defName);
|
||||
|
||||
AnimationDef animationDef = Workspace.animationDef;
|
||||
|
||||
foreach (AnimationStage stage in animationDef.animationStages)
|
||||
{
|
||||
foreach (PawnAnimationClip clip in stage.animationClips)
|
||||
{
|
||||
clip.keyframes = clip.keyframes.OrderBy(x => x.atTick).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Defs defs = new Defs();
|
||||
defs.animationDefs.Add(Workspace.animationDef);
|
||||
defs.animationDefs.Add(animationDef);
|
||||
|
||||
XmlUtility.WriteXML(defs, path);
|
||||
}
|
||||
|
|
7
Assets/Scripts/Enums.cs
Normal file
7
Assets/Scripts/Enums.cs
Normal file
|
@ -0,0 +1,7 @@
|
|||
public enum ActorManipulationMode
|
||||
{
|
||||
Pan,
|
||||
Rotate,
|
||||
Face,
|
||||
}
|
||||
|
11
Assets/Scripts/Enums.cs.meta
Normal file
11
Assets/Scripts/Enums.cs.meta
Normal file
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ee120e06e7d8c1f45ad58fc6baab0d47
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
65
Assets/Scripts/GUI/ActorKeyframeCard.cs
Normal file
65
Assets/Scripts/GUI/ActorKeyframeCard.cs
Normal file
|
@ -0,0 +1,65 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace RimWorldAnimationStudio
|
||||
{
|
||||
public class ActorKeyframeCard : MonoBehaviour
|
||||
{
|
||||
public InputField positionXField;
|
||||
public InputField positionZField;
|
||||
public InputField rotationField;
|
||||
|
||||
private int lastTick = -1;
|
||||
private bool isDirty = false;
|
||||
|
||||
public void Update()
|
||||
{
|
||||
if ((Workspace.animationDef == null || AnimationController.Instance.stageTick == lastTick) && isDirty == false)
|
||||
{ return; }
|
||||
|
||||
ActorBody actorBody = AnimationController.Instance.actorBodies[Workspace.actorID];
|
||||
string bodyType = AnimationController.Instance.actorCards.transform.GetChild(Workspace.actorID).GetComponent<ActorCard>().bodyType;
|
||||
|
||||
PawnAnimationClip clip = Workspace.animationDef.animationStages[Workspace.stageID].animationClips[Workspace.actorID];
|
||||
float clipPercent = (float)(AnimationController.Instance.stageTick % clip.duration) / clip.duration;
|
||||
|
||||
Vector3 deltaPos = new Vector3(clip.BodyOffsetX.Evaluate(clipPercent), 0, clip.BodyOffsetZ.Evaluate(clipPercent));
|
||||
deltaPos += Workspace.animationDef.actors[Workspace.actorID].bodyTypeOffset.GetOffset(bodyType);
|
||||
|
||||
float bodyAngle = clip.BodyAngle.Evaluate(clipPercent);
|
||||
float headAngle = clip.HeadAngle.Evaluate(clipPercent);
|
||||
|
||||
if (bodyAngle < 0) bodyAngle = 360 - ((-1f * bodyAngle) % 360);
|
||||
if (bodyAngle > 360) bodyAngle %= 360;
|
||||
|
||||
if (headAngle < 0) headAngle = 360 - ((-1f * headAngle) % 360);
|
||||
if (headAngle > 360) headAngle %= 360;
|
||||
|
||||
int bodyFacing = (int)clip.BodyFacing.Evaluate(clipPercent);
|
||||
Vector3 headBob = new Vector3(0, 0, clip.HeadBob.Evaluate(clipPercent)) + PawnUtility.BaseHeadOffsetAt(bodyType, bodyFacing);
|
||||
|
||||
Vector3 bodyPos = new Vector3(deltaPos.x, deltaPos.z, 0);
|
||||
Vector3 headPos = new Vector3(headBob.x, headBob.z, 0);
|
||||
|
||||
positionXField.text = bodyPos.x.ToString("0.000");
|
||||
positionZField.text = bodyPos.y.ToString("0.000");
|
||||
rotationField.text = bodyAngle.ToString("0.000");
|
||||
|
||||
lastTick = AnimationController.Instance.stageTick;
|
||||
isDirty = false;
|
||||
}
|
||||
|
||||
public void OnValueChanged()
|
||||
{
|
||||
Workspace.animationDef.animationStages[Workspace.stageID].animationClips[Workspace.actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID).bodyOffsetX = float.Parse(positionXField.text);
|
||||
Workspace.animationDef.animationStages[Workspace.stageID].animationClips[Workspace.actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID).bodyOffsetZ = float.Parse(positionZField.text);
|
||||
Workspace.animationDef.animationStages[Workspace.stageID].animationClips[Workspace.actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID).bodyAngle = float.Parse(rotationField.text);
|
||||
|
||||
Workspace.Instance.GetPawnAnimationClip(Workspace.actorID).BuildSimpleCurves();
|
||||
isDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
11
Assets/Scripts/GUI/ActorKeyframeCard.cs.meta
Normal file
11
Assets/Scripts/GUI/ActorKeyframeCard.cs.meta
Normal file
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 58ad3d066d9103541806d07bc98823d6
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -4,11 +4,12 @@ using System.Linq;
|
|||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace RimWorldAnimationStudio
|
||||
{
|
||||
public class KeyframeSlider : Slider
|
||||
public class KeyframeSlider : Slider, IPointerClickHandler, IBeginDragHandler, IEndDragHandler
|
||||
{
|
||||
public AnimationTimeline timeline;
|
||||
//public AnimationClip clip;
|
||||
|
@ -31,9 +32,8 @@ namespace RimWorldAnimationStudio
|
|||
this.keyframeID = keyframeID;
|
||||
|
||||
PawnKeyframe keyframe = Workspace.Instance.GetPawnKeyframe(actorID, keyframeID);
|
||||
Debug.Log(keyframe);
|
||||
|
||||
value = (float)keyframe.atTick / Workspace.Instance.GetCurrentStageLength();
|
||||
Debug.Log(keyframe.atTick);
|
||||
value = (float)keyframe.atTick / Workspace.animationClipWindowSize;
|
||||
OnValueChanged();
|
||||
|
||||
onValueChanged.AddListener(delegate (float value) { OnValueChanged(); });
|
||||
|
@ -44,32 +44,15 @@ namespace RimWorldAnimationStudio
|
|||
PawnKeyframe keyframe = Workspace.Instance.GetPawnKeyframe(actorID, keyframeID);
|
||||
PawnAnimationClip clip = Workspace.Instance.GetPawnAnimationClip(actorID);
|
||||
|
||||
int stageLength = Workspace.Instance.GetCurrentStageLength();
|
||||
int newTick = Mathf.RoundToInt(value * stageLength);
|
||||
|
||||
/*if (timeline.CanAddKeyFrameAtTick(newTick) == false)
|
||||
{
|
||||
int delta = keyframe.atTick > newTick ? 1 : -1;
|
||||
|
||||
while (timeline.CanAddKeyFrameAtTick(newTick) == false)
|
||||
{
|
||||
newTick += delta;
|
||||
|
||||
if (newTick == 1 || newTick == stageLength) { break; }
|
||||
}
|
||||
|
||||
if (timeline.CanAddKeyFrameAtTick(newTick) == false)
|
||||
{ value = (float)keyframe.atTick / stageLength; return; }
|
||||
}*/
|
||||
int newTick = Mathf.RoundToInt(value * Workspace.animationClipWindowSize);
|
||||
|
||||
keyframe.atTick = newTick;
|
||||
|
||||
Debug.Log("Value changed: " + newTick);
|
||||
//value = (float)keyframe.atTick / stageLength;
|
||||
|
||||
UpdateGhostFrames();
|
||||
|
||||
clip.BuildSimpleCurves();
|
||||
|
||||
AnimationController.Instance.stageTick = keyframe.atTick.Value;
|
||||
}
|
||||
|
||||
// Ghost sliders are non-interactable slider handle
|
||||
|
@ -81,12 +64,11 @@ namespace RimWorldAnimationStudio
|
|||
if (maxGhosts == 0)
|
||||
{ return; }
|
||||
|
||||
int stageLength = Workspace.Instance.GetCurrentStageLength();
|
||||
int nGhosts = GetGhostFramesRequired();
|
||||
|
||||
for (int i = 0; i < Mathf.Max(nGhosts, ghostSliders.childCount); i++)
|
||||
{
|
||||
if ((i - 1) * clip.duration + keyframe.atTick <= stageLength)
|
||||
if ((i - 1) * clip.duration + keyframe.atTick <= Workspace.animationClipWindowSize)
|
||||
{
|
||||
if (ghostSliders.childCount <= i)
|
||||
{ Instantiate(ghostSliderPrefab, ghostSliders); }
|
||||
|
@ -97,7 +79,7 @@ namespace RimWorldAnimationStudio
|
|||
|
||||
Slider ghostSlider = ghostSliderObject.GetComponent<Slider>();
|
||||
Debug.Log(ghostSlider);
|
||||
ghostSlider.value = (float)((i + 1) * clip.duration + keyframe.atTick) / stageLength;
|
||||
ghostSlider.value = (float)((i + 1) * clip.duration + keyframe.atTick) / Workspace.animationClipWindowSize;
|
||||
|
||||
float mult = 1f - Mathf.Pow((float)i / maxGhosts, 2);
|
||||
ghostSlider.transform.FindDeepChild("Handle").GetComponent<Image>().color = new Color(0, 0.5f, 0.5f, 0.5f * mult);
|
||||
|
@ -118,7 +100,36 @@ namespace RimWorldAnimationStudio
|
|||
if (clip.duration <= 1)
|
||||
{ return 0; }
|
||||
|
||||
return Math.Min(Mathf.CeilToInt((float)Workspace.Instance.GetCurrentStageLength() / clip.duration), maxGhosts);
|
||||
return Math.Min(Mathf.CeilToInt((float)Workspace.animationClipWindowSize / clip.duration), maxGhosts);
|
||||
}
|
||||
|
||||
public void OnPointerClick(PointerEventData eventData)
|
||||
{
|
||||
PawnKeyframe keyframe = Workspace.Instance.GetPawnKeyframe(actorID, keyframeID);
|
||||
|
||||
foreach (KeyframeSlider keyframeSlider in timeline.transform.GetComponentsInChildren<KeyframeSlider>())
|
||||
{
|
||||
if (keyframeSlider == this)
|
||||
{ continue; }
|
||||
|
||||
keyframeSlider.transform.FindDeepChild("Handle").GetComponent<Image>().color = new Color(1f, 1f, 1f);
|
||||
}
|
||||
|
||||
transform.FindDeepChild("Handle").GetComponent<Image>().color = new Color(0f, 1f, 0f);
|
||||
|
||||
AnimationController.Instance.stageTick = keyframe.atTick.Value;
|
||||
|
||||
Workspace.keyframeID = keyframeID;
|
||||
}
|
||||
|
||||
public void OnBeginDrag(PointerEventData eventData)
|
||||
{
|
||||
interactable = true;
|
||||
}
|
||||
|
||||
public void OnEndDrag(PointerEventData eventData)
|
||||
{
|
||||
interactable = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,8 @@ namespace RimWorldAnimationStudio
|
|||
{
|
||||
public static AnimationDef animationDef;
|
||||
public static int stageID = 0;
|
||||
public static int actorID = 0;
|
||||
public static int keyframeID = 0;
|
||||
public static bool isDirty = false;
|
||||
|
||||
public static List<string> defNames = new List<string>() { "Human" };
|
||||
|
@ -23,13 +25,15 @@ namespace RimWorldAnimationStudio
|
|||
private static int maxHistoryDepth = 100;
|
||||
private static int historyIndex = 0;
|
||||
|
||||
public int GetCurrentStageLength()
|
||||
{
|
||||
if (stageID < 0 || stageID >= animationDef.animationStages.Count)
|
||||
{ return 0; }
|
||||
public static ActorManipulationMode actorManipulationMode = ActorManipulationMode.Pan;
|
||||
public static int animationClipWindowSize = 600;
|
||||
|
||||
return animationDef.animationStages[stageID].playTimeTicks;
|
||||
}
|
||||
|
||||
|
||||
//public int? GetCurrentKeyframe()
|
||||
//{
|
||||
// return animationDef?.animationStages[stageID]?.animationClips[actorID]?.keyframes.FirstOrDefault(x => x.keyframeID == keyframeID)?.keyframeID;
|
||||
//}
|
||||
|
||||
public PawnAnimationClip GetPawnAnimationClip(int actorID)
|
||||
{
|
||||
|
|
Binary file not shown.
BIN
Library/Artifacts/00/00fa4f35a69b19d4e22fe527066afeb7
Normal file
BIN
Library/Artifacts/00/00fa4f35a69b19d4e22fe527066afeb7
Normal file
Binary file not shown.
BIN
Library/Artifacts/03/03678927e7d4cf64923a092949c9f9a1
Normal file
BIN
Library/Artifacts/03/03678927e7d4cf64923a092949c9f9a1
Normal file
Binary file not shown.
Binary file not shown.
BIN
Library/Artifacts/07/07121b8dcf3be0074f3b2d754af5a82e
Normal file
BIN
Library/Artifacts/07/07121b8dcf3be0074f3b2d754af5a82e
Normal file
Binary file not shown.
BIN
Library/Artifacts/08/08bc77deaf66a6f5778e5a85875cab8d
Normal file
BIN
Library/Artifacts/08/08bc77deaf66a6f5778e5a85875cab8d
Normal file
Binary file not shown.
BIN
Library/Artifacts/0b/0b43e358d97225c787a95cae9fe06e6d
Normal file
BIN
Library/Artifacts/0b/0b43e358d97225c787a95cae9fe06e6d
Normal file
Binary file not shown.
BIN
Library/Artifacts/0e/0e2826d67a7de855d3ca23112dd341f5
Normal file
BIN
Library/Artifacts/0e/0e2826d67a7de855d3ca23112dd341f5
Normal file
Binary file not shown.
Binary file not shown.
BIN
Library/Artifacts/14/1488705177bb600dea2b0322068998e9
Normal file
BIN
Library/Artifacts/14/1488705177bb600dea2b0322068998e9
Normal file
Binary file not shown.
BIN
Library/Artifacts/16/1638db9d452226412a4111d5d8caa21c
Normal file
BIN
Library/Artifacts/16/1638db9d452226412a4111d5d8caa21c
Normal file
Binary file not shown.
BIN
Library/Artifacts/18/18ab8767e062981c37a592bb983c1e49
Normal file
BIN
Library/Artifacts/18/18ab8767e062981c37a592bb983c1e49
Normal file
Binary file not shown.
BIN
Library/Artifacts/19/1943b79b9bf5ae3a5234c62c4b8a2c50
Normal file
BIN
Library/Artifacts/19/1943b79b9bf5ae3a5234c62c4b8a2c50
Normal file
Binary file not shown.
BIN
Library/Artifacts/1a/1a5b0634a26c2531621cc49cb9d985ef
Normal file
BIN
Library/Artifacts/1a/1a5b0634a26c2531621cc49cb9d985ef
Normal file
Binary file not shown.
BIN
Library/Artifacts/1b/1b13bf0e4267b0915db376a590f33b24
Normal file
BIN
Library/Artifacts/1b/1b13bf0e4267b0915db376a590f33b24
Normal file
Binary file not shown.
BIN
Library/Artifacts/1d/1d449ce4bc666ee1c69dde1f818e5288
Normal file
BIN
Library/Artifacts/1d/1d449ce4bc666ee1c69dde1f818e5288
Normal file
Binary file not shown.
BIN
Library/Artifacts/1e/1e90ff1dbbcc962413583abee716581d
Normal file
BIN
Library/Artifacts/1e/1e90ff1dbbcc962413583abee716581d
Normal file
Binary file not shown.
BIN
Library/Artifacts/21/211b4b69a248381163a52bbabe362c5e
Normal file
BIN
Library/Artifacts/21/211b4b69a248381163a52bbabe362c5e
Normal file
Binary file not shown.
BIN
Library/Artifacts/22/22a9fe3ecaae29820cf66573ad40efcb
Normal file
BIN
Library/Artifacts/22/22a9fe3ecaae29820cf66573ad40efcb
Normal file
Binary file not shown.
BIN
Library/Artifacts/26/265d1a03c972ee07bdc1caed417b9b24
Normal file
BIN
Library/Artifacts/26/265d1a03c972ee07bdc1caed417b9b24
Normal file
Binary file not shown.
BIN
Library/Artifacts/26/2698c7661cbe16bec45be980a81eab87
Normal file
BIN
Library/Artifacts/26/2698c7661cbe16bec45be980a81eab87
Normal file
Binary file not shown.
BIN
Library/Artifacts/28/28077e1db3df099720b2021af13188d9
Normal file
BIN
Library/Artifacts/28/28077e1db3df099720b2021af13188d9
Normal file
Binary file not shown.
BIN
Library/Artifacts/29/290421a1b762035d06e3667c78bac3ef
Normal file
BIN
Library/Artifacts/29/290421a1b762035d06e3667c78bac3ef
Normal file
Binary file not shown.
Binary file not shown.
BIN
Library/Artifacts/2c/2c7aabe1a8a7ac82c3883084436a6e12
Normal file
BIN
Library/Artifacts/2c/2c7aabe1a8a7ac82c3883084436a6e12
Normal file
Binary file not shown.
BIN
Library/Artifacts/2e/2ef89dbac8d0e7b6257099a16c2a36f0
Normal file
BIN
Library/Artifacts/2e/2ef89dbac8d0e7b6257099a16c2a36f0
Normal file
Binary file not shown.
BIN
Library/Artifacts/30/309621439bcf77b47648baa7e400105e
Normal file
BIN
Library/Artifacts/30/309621439bcf77b47648baa7e400105e
Normal file
Binary file not shown.
BIN
Library/Artifacts/33/338f00489093cfb6c56d57b305063f5c
Normal file
BIN
Library/Artifacts/33/338f00489093cfb6c56d57b305063f5c
Normal file
Binary file not shown.
BIN
Library/Artifacts/37/37d032b35b92075b13e59b37de9b6e54
Normal file
BIN
Library/Artifacts/37/37d032b35b92075b13e59b37de9b6e54
Normal file
Binary file not shown.
BIN
Library/Artifacts/39/39b0188a9ed34d4b1e7834c1cd21ef30
Normal file
BIN
Library/Artifacts/39/39b0188a9ed34d4b1e7834c1cd21ef30
Normal file
Binary file not shown.
Binary file not shown.
BIN
Library/Artifacts/3e/3e1dda46a4fd83d60b35261772b8eb44
Normal file
BIN
Library/Artifacts/3e/3e1dda46a4fd83d60b35261772b8eb44
Normal file
Binary file not shown.
BIN
Library/Artifacts/3e/3e5aeda083f8adede9e44e2c7da8115b
Normal file
BIN
Library/Artifacts/3e/3e5aeda083f8adede9e44e2c7da8115b
Normal file
Binary file not shown.
BIN
Library/Artifacts/3f/3f291391dfc7194f382a70842707d18c
Normal file
BIN
Library/Artifacts/3f/3f291391dfc7194f382a70842707d18c
Normal file
Binary file not shown.
BIN
Library/Artifacts/3f/3fa7d845a80a7a4a73caf45d627c0bb6
Normal file
BIN
Library/Artifacts/3f/3fa7d845a80a7a4a73caf45d627c0bb6
Normal file
Binary file not shown.
BIN
Library/Artifacts/43/43d56a298afbcd06ab2c13e6757ac8af
Normal file
BIN
Library/Artifacts/43/43d56a298afbcd06ab2c13e6757ac8af
Normal file
Binary file not shown.
BIN
Library/Artifacts/48/48b06af2b0ca520ff20d1d215fed91a2
Normal file
BIN
Library/Artifacts/48/48b06af2b0ca520ff20d1d215fed91a2
Normal file
Binary file not shown.
BIN
Library/Artifacts/4d/4dcd84dff613db12cecb2ee090dc647b
Normal file
BIN
Library/Artifacts/4d/4dcd84dff613db12cecb2ee090dc647b
Normal file
Binary file not shown.
BIN
Library/Artifacts/4d/4de67520a8c2188d83abd9cd4402b8b1
Normal file
BIN
Library/Artifacts/4d/4de67520a8c2188d83abd9cd4402b8b1
Normal file
Binary file not shown.
BIN
Library/Artifacts/4e/4e4eaa512e0f077402d7d8096783577c
Normal file
BIN
Library/Artifacts/4e/4e4eaa512e0f077402d7d8096783577c
Normal file
Binary file not shown.
BIN
Library/Artifacts/52/52139fd4ddf5ebdd8f99aa3941fde269
Normal file
BIN
Library/Artifacts/52/52139fd4ddf5ebdd8f99aa3941fde269
Normal file
Binary file not shown.
BIN
Library/Artifacts/52/52e01f64bae952b37263640319c1430d
Normal file
BIN
Library/Artifacts/52/52e01f64bae952b37263640319c1430d
Normal file
Binary file not shown.
BIN
Library/Artifacts/52/52e4e1042b6072aa42bef6c7cbba52a4
Normal file
BIN
Library/Artifacts/52/52e4e1042b6072aa42bef6c7cbba52a4
Normal file
Binary file not shown.
BIN
Library/Artifacts/55/5531e946c8542ae288fb416fd258b62a
Normal file
BIN
Library/Artifacts/55/5531e946c8542ae288fb416fd258b62a
Normal file
Binary file not shown.
BIN
Library/Artifacts/55/55a20c484f24d7b47de4ca7eefb1c62c
Normal file
BIN
Library/Artifacts/55/55a20c484f24d7b47de4ca7eefb1c62c
Normal file
Binary file not shown.
BIN
Library/Artifacts/57/577c7561abd5fb0d44064dec1c62f79c
Normal file
BIN
Library/Artifacts/57/577c7561abd5fb0d44064dec1c62f79c
Normal file
Binary file not shown.
BIN
Library/Artifacts/57/57d33ce2b72a53e4d78274ca0225aca5
Normal file
BIN
Library/Artifacts/57/57d33ce2b72a53e4d78274ca0225aca5
Normal file
Binary file not shown.
BIN
Library/Artifacts/5a/5a9b497be7b03013f0e96636c91333c4
Normal file
BIN
Library/Artifacts/5a/5a9b497be7b03013f0e96636c91333c4
Normal file
Binary file not shown.
BIN
Library/Artifacts/5d/5dbbe11d23b9d33f9344f444d9771511
Normal file
BIN
Library/Artifacts/5d/5dbbe11d23b9d33f9344f444d9771511
Normal file
Binary file not shown.
BIN
Library/Artifacts/5d/5dd7356cf42fc24fd8f968c07eb3f619
Normal file
BIN
Library/Artifacts/5d/5dd7356cf42fc24fd8f968c07eb3f619
Normal file
Binary file not shown.
BIN
Library/Artifacts/5d/5dda7ad9b107a0e764414dd5db9acbfd
Normal file
BIN
Library/Artifacts/5d/5dda7ad9b107a0e764414dd5db9acbfd
Normal file
Binary file not shown.
BIN
Library/Artifacts/5e/5e85f045f4986e5b63c05c60a2063053
Normal file
BIN
Library/Artifacts/5e/5e85f045f4986e5b63c05c60a2063053
Normal file
Binary file not shown.
BIN
Library/Artifacts/60/605eee6972da06e0239366c9deec7cb5
Normal file
BIN
Library/Artifacts/60/605eee6972da06e0239366c9deec7cb5
Normal file
Binary file not shown.
BIN
Library/Artifacts/60/60b08b2a32391792a18903825d1e4905
Normal file
BIN
Library/Artifacts/60/60b08b2a32391792a18903825d1e4905
Normal file
Binary file not shown.
BIN
Library/Artifacts/61/61e0ec02d88ec60d4de6d7102d48f4fc
Normal file
BIN
Library/Artifacts/61/61e0ec02d88ec60d4de6d7102d48f4fc
Normal file
Binary file not shown.
BIN
Library/Artifacts/64/646a7472dc56227c129556a494bffc34
Normal file
BIN
Library/Artifacts/64/646a7472dc56227c129556a494bffc34
Normal file
Binary file not shown.
BIN
Library/Artifacts/67/67512d0d83618c476e004e96a4f06730
Normal file
BIN
Library/Artifacts/67/67512d0d83618c476e004e96a4f06730
Normal file
Binary file not shown.
BIN
Library/Artifacts/6a/6a39a0c9b59bc0c077047e2fdcb5a69c
Normal file
BIN
Library/Artifacts/6a/6a39a0c9b59bc0c077047e2fdcb5a69c
Normal file
Binary file not shown.
Binary file not shown.
BIN
Library/Artifacts/6f/6f25be0c1ca09cb737bf3e0be797c647
Normal file
BIN
Library/Artifacts/6f/6f25be0c1ca09cb737bf3e0be797c647
Normal file
Binary file not shown.
BIN
Library/Artifacts/72/72165efbdc7734373235660bed6bd1ec
Normal file
BIN
Library/Artifacts/72/72165efbdc7734373235660bed6bd1ec
Normal file
Binary file not shown.
BIN
Library/Artifacts/73/733b743457fabce85df83c767c8d1b70
Normal file
BIN
Library/Artifacts/73/733b743457fabce85df83c767c8d1b70
Normal file
Binary file not shown.
BIN
Library/Artifacts/74/744393064f214cea4c8a457594a80ac6
Normal file
BIN
Library/Artifacts/74/744393064f214cea4c8a457594a80ac6
Normal file
Binary file not shown.
BIN
Library/Artifacts/74/744c383d345985924f5f2635a9682fe6
Normal file
BIN
Library/Artifacts/74/744c383d345985924f5f2635a9682fe6
Normal file
Binary file not shown.
BIN
Library/Artifacts/75/75d6df915a02c1ebfafdf179fd545e95
Normal file
BIN
Library/Artifacts/75/75d6df915a02c1ebfafdf179fd545e95
Normal file
Binary file not shown.
BIN
Library/Artifacts/76/76912ebde97356a4f0fe6c97d9ca3859
Normal file
BIN
Library/Artifacts/76/76912ebde97356a4f0fe6c97d9ca3859
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
Binary file not shown.
BIN
Library/Artifacts/7c/7c4e7095da493fac7b7be0c70ca151b8
Normal file
BIN
Library/Artifacts/7c/7c4e7095da493fac7b7be0c70ca151b8
Normal file
Binary file not shown.
BIN
Library/Artifacts/7f/7fa1eded06715ac960c2311151cec6ed
Normal file
BIN
Library/Artifacts/7f/7fa1eded06715ac960c2311151cec6ed
Normal file
Binary file not shown.
BIN
Library/Artifacts/7f/7ffc156bf8218824b5a361ed86b74ef4
Normal file
BIN
Library/Artifacts/7f/7ffc156bf8218824b5a361ed86b74ef4
Normal file
Binary file not shown.
BIN
Library/Artifacts/80/80a3edf2acb5bf4087c1032c224fb97e
Normal file
BIN
Library/Artifacts/80/80a3edf2acb5bf4087c1032c224fb97e
Normal file
Binary file not shown.
BIN
Library/Artifacts/87/87bd4859bd9082b52d188e39a2da9293
Normal file
BIN
Library/Artifacts/87/87bd4859bd9082b52d188e39a2da9293
Normal file
Binary file not shown.
After Width: | Height: | Size: 302 B |
BIN
Library/Artifacts/88/880ff94463df92501d1c2c565a3416e9
Normal file
BIN
Library/Artifacts/88/880ff94463df92501d1c2c565a3416e9
Normal file
Binary file not shown.
BIN
Library/Artifacts/8b/8b4ab59000b07dfd9be5b8db568ae0a7
Normal file
BIN
Library/Artifacts/8b/8b4ab59000b07dfd9be5b8db568ae0a7
Normal file
Binary file not shown.
BIN
Library/Artifacts/8b/8bbdb6424cc5628c1bc054a6a57e7ece
Normal file
BIN
Library/Artifacts/8b/8bbdb6424cc5628c1bc054a6a57e7ece
Normal file
Binary file not shown.
Binary file not shown.
BIN
Library/Artifacts/93/936e47ac7e574746e1840025d1dbebc0
Normal file
BIN
Library/Artifacts/93/936e47ac7e574746e1840025d1dbebc0
Normal file
Binary file not shown.
BIN
Library/Artifacts/93/93a79ad8078ce4cdb562f8d5d562e842
Normal file
BIN
Library/Artifacts/93/93a79ad8078ce4cdb562f8d5d562e842
Normal file
Binary file not shown.
BIN
Library/Artifacts/a1/a1a73e593d4802ff75c60446cdf543fc
Normal file
BIN
Library/Artifacts/a1/a1a73e593d4802ff75c60446cdf543fc
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue