public static void Init() { unitAnimMeshListDic = new Dictionary <ECS_UnitAnim, List <Mesh> >(); unitAnimDictionaryKeyDic = new Dictionary <DictionaryKey, ECS_UnitAnim>(); foreach (ECS_UnitAnimType ecsUnitAnimType in ECS_UnitAnimType.GetUnitAnimTypeList()) { foreach (UnitAnim.AnimDir animDir in System.Enum.GetValues(typeof(UnitAnim.AnimDir))) { ECS_UnitAnim ecsUnitAnim = ecsUnitAnimType.GetUnitAnim(animDir); unitAnimDictionaryKeyDic[new DictionaryKey { ecsUnitAnimTypeEnum = ecsUnitAnimType.GetTypeEnum(), animDir = animDir }] = ecsUnitAnim; unitAnimMeshListDic[ecsUnitAnim] = new List <Mesh>(); int frameCount = ecsUnitAnim.GetFrameCount(); for (int i = 0; i < frameCount; i++) { Mesh mesh = ECS_Animation.CreateMesh(ecsUnitAnim, i); unitAnimMeshListDic[ecsUnitAnim].Add(mesh); } } } }
// Display Mesh protected override void OnUpdate() { Material marineMaterial = ECS_RTSControls.instance.marineMaterial; Quaternion quaternionIdentity = Quaternion.identity; EntityQuery skeletonQuery = GetEntityQuery(ComponentType.ReadOnly <Translation>(), ComponentType.ReadOnly <Skeleton_Data>()); NativeArray <Translation> translationArray = skeletonQuery.ToComponentDataArray <Translation>(Allocator.TempJob); NativeArray <Skeleton_Data> skeletonDataArray = skeletonQuery.ToComponentDataArray <Skeleton_Data>(Allocator.TempJob); float3 skeletonOffset = new float3(0, 5f, 0); //* for (int i = 0; i < translationArray.Length; i++) { Vector3 position = translationArray[i].Value + skeletonOffset; position.z = position.y * .05f; Skeleton_Data skeletonData = skeletonDataArray[i]; // #### TODO: Performance issue when grabbing mesh list List <Mesh> meshList = ECS_UnitAnim.GetMeshList(skeletonData.activeUnitAnimTypeEnum, skeletonData.activeAnimDir); Mesh mesh = meshList[skeletonData.currentFrame]; Material material = marineMaterial; Graphics.DrawMesh(mesh, position, quaternionIdentity, material, 0); Graphics.DrawMesh(ECS_RTSControls.instance.shadowMesh, (float3)position + new float3(0, -8f, -.01f), quaternionIdentity, ECS_RTSControls.instance.shadowMaterial, 0); } //*/ translationArray.Dispose(); skeletonDataArray.Dispose(); }
private void SetAnims(ECS_UnitAnim animDown, ECS_UnitAnim animUp, ECS_UnitAnim animLeft, ECS_UnitAnim animRight, ECS_UnitAnim animDownLeft, ECS_UnitAnim animDownRight, ECS_UnitAnim animUpLeft, ECS_UnitAnim animUpRight) { singleAnimDic[UnitAnim.AnimDir.Down] = animDown; singleAnimDic[UnitAnim.AnimDir.Up] = animUp; singleAnimDic[UnitAnim.AnimDir.Left] = animLeft; singleAnimDic[UnitAnim.AnimDir.Right] = animRight; singleAnimDic[UnitAnim.AnimDir.DownLeft] = animDownLeft; singleAnimDic[UnitAnim.AnimDir.DownRight] = animDownRight; singleAnimDic[UnitAnim.AnimDir.UpLeft] = animUpLeft; singleAnimDic[UnitAnim.AnimDir.UpRight] = animUpRight; }
public static void Init() { unitAnimTypeDic = new Dictionary <TypeEnum, ECS_UnitAnimType>(); unitAnimTypeList = new List <ECS_UnitAnimType>(); foreach (TypeEnum typeEnum in System.Enum.GetValues(typeof(TypeEnum))) { ECS_UnitAnimType ecsUnitAnimType = ECS_Animation.ConvertVAnimToAnim(typeEnum); unitAnimTypeDic[typeEnum] = ecsUnitAnimType; unitAnimTypeList.Add(ecsUnitAnimType); } ECS_UnitAnim.Init(); }
public static Skeleton_Data GetSkeletonData(ECS_UnitAnimType.TypeEnum ecsUnitAnimTypeEnum, UnitAnim.AnimDir animDir, Skeleton_Anim_OnComplete onComplete) { ECS_UnitAnimType ecsUnitAnimType = ECS_UnitAnimType.Get(ecsUnitAnimTypeEnum); ECS_UnitAnim ecsUnitAnim = ecsUnitAnimType.GetUnitAnim(animDir); return (new Skeleton_Data { frameCount = ecsUnitAnim.GetFrameCount(), currentFrame = 0, loopCount = 0, frameTimer = 0f, frameRate = ecsUnitAnim.GetFrameRate(), activeUnitAnimTypeEnum = ecsUnitAnimTypeEnum, activeAnimDir = animDir, onComplete = onComplete, }); }
public static Mesh CreateMesh(ECS_UnitAnim unitAnim, int frame) { ECS_Skeleton_Anim[] anims = unitAnim.anims; int animsLength = anims.Length; Skeleton_AnimMeshData testAnimMeshData = new Skeleton_AnimMeshData(animsLength); for (int i = 0; i < animsLength; i++) { //int frameIndex = (frame < anims[i].frameArray.Length) ? frame : anims[i].frameArray.Length - 1; int frameIndex = frame % anims[i].frameArray.Length; testAnimMeshData.SetQuad(i, anims[i].frameArray[frameIndex].quad); } testAnimMeshData.SetIgnoreQuad(animsLength); testAnimMeshData.RefreshMesh(); return(testAnimMeshData.mesh); }
public ECS_UnitAnimType(TypeEnum ecsUnitAnimTypeEnum, ECS_UnitAnim animDown, ECS_UnitAnim animUp, ECS_UnitAnim animLeft, ECS_UnitAnim animRight, ECS_UnitAnim animDownLeft, ECS_UnitAnim animDownRight, ECS_UnitAnim animUpLeft, ECS_UnitAnim animUpRight) { this.ecsUnitAnimTypeEnum = ecsUnitAnimTypeEnum; singleAnimDic = new Dictionary <UnitAnim.AnimDir, ECS_UnitAnim>(); SetAnims(animDown, animUp, animLeft, animRight, animDownLeft, animDownRight, animUpLeft, animUpRight); }