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);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        // 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);
 }