コード例 #1
0
 public MPQCOF GetPlayerAnimation(eHero hero, eMobMode mobMode, PlayerEquipment equipment)
 => cache.AddOrGetExisting($"COF::{hero}{mobMode.ToToken()}{equipment.HashKey}", () =>
 {
     var path = $"{ResourcePaths.PlayerAnimationBase}\\{hero.ToToken()}\\COF\\{hero.ToToken()}{mobMode.ToToken()}{equipment.WeaponClass.ToToken()}.cof";
     return(MPQCOF.Load(mpqProvider.GetStream(path), Animations, hero, mobMode, equipment));
 }, new System.Runtime.Caching.CacheItemPolicy {
     Priority = System.Runtime.Caching.CacheItemPriority.NotRemovable
 });
コード例 #2
0
        public void ResetAnimationData()
        {
            var lastMobMode = MobMode;

            switch (LocationDetails.MovementType)
            {
            case eMovementType.Stopped:
                MobMode = eMobMode.PlayerTownNeutral;
                break;

            case eMovementType.Walking:
                MobMode = eMobMode.PlayerTownWalk;
                break;

            case eMovementType.Running:
                MobMode = eMobMode.PlayerRun;
                break;

            default:
                MobMode = eMobMode.PlayerNeutral;
                break;
            }
            if (lastMobMode != MobMode)
            {
                renderFrameIndex = 0;
            }

            currentDirectionCache = directionCache.FirstOrDefault(x => x.MobMode == MobMode && x.Direction == directionConversion[LocationDetails.MovementDirection]);
            if (currentDirectionCache != null)
            {
                return;
            }

            animationData = resourceManager.GetPlayerAnimation(Hero, MobMode, Equipment);
            if (animationData == null)
            {
                throw new OpenDiablo2Exception("Could not locate animation for the character!");
            }

            var palette = paletteProvider.PaletteTable["Units"];

            CacheFrames(animationData.Layers.Select(layer => resourceManager.GetPlayerDCC(layer, Equipment, palette)).ToArray());
        }