public ISpriteSheet GetFaceTexture(ICharacterRenderProperties characterRenderProperties) { if (characterRenderProperties.EmoteFrame < 0 || characterRenderProperties.Emote == Emote.Trade || characterRenderProperties.Emote == Emote.LevelUp) { return(new EmptySpriteSheet()); } //14 rows (7 female - 7 male) / 11 columns const int ROWS = 14; const int COLS = 11; var texture = _gfxManager.TextureFromResource(GFXTypes.SkinSprites, 8, true); var widthDelta = texture.Width / COLS; var heightDelta = texture.Height / ROWS; var genderOffset = texture.Height / 2 * characterRenderProperties.Gender; //'playful' is the last face in the gfx (ndx 10), even though it has enum value of 14 (ndx 13) var emote = characterRenderProperties.Emote == Emote.Playful || characterRenderProperties.Emote == Emote.Drunk ? 10 : (int)characterRenderProperties.Emote - 1; var sourceRectangle = new Rectangle(widthDelta * emote, heightDelta * characterRenderProperties.Race + genderOffset, widthDelta, heightDelta); return(new SpriteSheet(texture, sourceRectangle)); }
private static CharacterRenderProperties MakeCopy(ICharacterRenderProperties other) { return(new CharacterRenderProperties { CurrentAction = other.CurrentAction, HairStyle = other.HairStyle, HairColor = other.HairColor, Race = other.Race, Gender = other.Gender, BootsGraphic = other.BootsGraphic, ArmorGraphic = other.ArmorGraphic, HatGraphic = other.HatGraphic, ShieldGraphic = other.ShieldGraphic, WeaponGraphic = other.WeaponGraphic, Direction = other.Direction, MapX = other.MapX, MapY = other.MapY, WalkFrame = other.WalkFrame, AttackFrame = other.AttackFrame, EmoteFrame = other.EmoteFrame, SitState = other.SitState, Emote = other.Emote, IsHidden = other.IsHidden, IsDead = other.IsDead }); }
public ISpriteSheet GetEmoteTexture(ICharacterRenderProperties characterRenderProperties) { if (characterRenderProperties.Emote == 0 || characterRenderProperties.EmoteFrame < 0) { return(new EmptySpriteSheet()); } const int NUM_EMOTES = 15; const int NUM_FRAMES = 4; var emoteValue = Enum.GetName(typeof(Emote), characterRenderProperties.Emote) ?? ""; var convertedValuesDictionary = Enum.GetNames(typeof(EmoteSpriteType)) .ToDictionary(x => x, x => (EmoteSpriteType)Enum.Parse(typeof(EmoteSpriteType), x)); var convertedEmote = (int)convertedValuesDictionary[emoteValue]; var emoteTexture = _gfxManager.TextureFromResource(GFXTypes.PostLoginUI, 38, true); var eachSet = emoteTexture.Width / NUM_EMOTES; var eachFrame = emoteTexture.Width / (NUM_EMOTES * NUM_FRAMES); var startX = convertedEmote * eachSet + characterRenderProperties.EmoteFrame * eachFrame; var emoteRect = new Rectangle(startX, 0, eachFrame, emoteTexture.Height); return(new SpriteSheet(emoteTexture, emoteRect)); }
private ICharacterRenderer InitializeRendererForCharacter(ICharacterRenderProperties renderProperties) { var renderer = _characterRendererFactory.CreateCharacterRenderer(renderProperties); renderer.Initialize(); return(renderer); }
public HairRenderer(ICharacterRenderProperties renderProperties, ISpriteSheet hairSheet) : base(renderProperties) { _hairSheet = hairSheet; _hairRenderLocationCalculator = new HairRenderLocationCalculator(_renderProperties); }
public ISpriteSheet GetSkinTexture(ICharacterRenderProperties characterRenderProperties) { var sheetRows = 7; var sheetColumns = 4; var gfxNum = 1; if (characterRenderProperties.CurrentAction == CharacterActionState.Walking && characterRenderProperties.WalkFrame > 0) { gfxNum = 2; sheetColumns = 16; } else if (characterRenderProperties.CurrentAction == CharacterActionState.Attacking && characterRenderProperties.AttackFrame > 0) { if (!BowIsEquipped(characterRenderProperties)) { gfxNum = 3; sheetColumns = 8; } else if (characterRenderProperties.AttackFrame == 1) //only 1 frame of bow/gun animation { gfxNum = 7; //4 columns in this one too } } else if (characterRenderProperties.CurrentAction == CharacterActionState.SpellCast) { gfxNum = 4; } else if (characterRenderProperties.CurrentAction == CharacterActionState.Sitting) { if (characterRenderProperties.SitState == SitState.Floor) { gfxNum = 6; } else if (characterRenderProperties.SitState == SitState.Chair) { gfxNum = 5; } } var texture = _gfxManager.TextureFromResource(GFXTypes.SkinSprites, gfxNum, true); var rotated = characterRenderProperties.Direction == EODirection.Left || characterRenderProperties.Direction == EODirection.Up; var heightDelta = texture.Height / sheetRows; var widthDelta = texture.Width / sheetColumns; var sectionDelta = texture.Width / 4; var walkExtra = characterRenderProperties.WalkFrame > 0 ? widthDelta * (characterRenderProperties.WalkFrame - 1) : 0; walkExtra = !BowIsEquipped(characterRenderProperties) && characterRenderProperties.AttackFrame > 0 ? widthDelta * (characterRenderProperties.AttackFrame - 1) : walkExtra; var sourceArea = new Rectangle( characterRenderProperties.Gender * widthDelta * (sheetColumns / 2) + (rotated ? sectionDelta : 0) + walkExtra, characterRenderProperties.Race * heightDelta, widthDelta, heightDelta); return(new SpriteSheet(texture, sourceArea)); }
public ICharacter WithRenderProperties(ICharacterRenderProperties renderProperties) { var character = MakeCopy(this); character.RenderProperties = renderProperties; return(character); }
public SkinRenderer(ICharacterRenderProperties renderProperties, ISpriteSheet skinSheet) : base(renderProperties) { _skinSheet = skinSheet; _skinRenderLocationCalculator = new SkinRenderLocationCalculator(_renderProperties); }
public ShieldRenderer(ICharacterRenderProperties renderProperties, ISpriteSheet shieldSheet, bool isShieldOnBack) : base(renderProperties) { _shieldSheet = shieldSheet; _isShieldOnBack = isShieldOnBack; }
public ArmorRenderer(ICharacterRenderProperties renderProperties, Texture2D armorTexture, IPubFile <EIFRecord> itemFile) { _renderProperties = renderProperties; _armorTexture = armorTexture; _itemFile = itemFile; }
public int CalculateOffsetY(ICharacterRenderProperties properties) { var multiplier = properties.IsFacing(EODirection.Left, EODirection.Up) ? -1 : 1; var walkAdjust = properties.IsActing(CharacterActionState.Walking) ? WalkHeightFactor * properties.WalkFrame : 0; //walkAdjust * multiplier is the old ViewAdjustY return(properties.MapX * HeightFactor + properties.MapY * HeightFactor + walkAdjust * multiplier); }
public BootsRenderer(ICharacterRenderProperties renderProperties, Texture2D bootsTexture, IPubFile <EIFRecord> itemFile) { _renderProperties = renderProperties; _bootsTexture = bootsTexture; _itemFile = itemFile; }
public EmoteRenderer(ICharacterRenderProperties renderProperties, ISpriteSheet emoteSheet, IPubFile <EIFRecord> itemFile) { _renderProperties = renderProperties; _emoteSheet = emoteSheet; _skinRenderLocationCalculator = new SkinRenderLocationCalculator(_renderProperties, itemFile); }
public WeaponRenderer(ICharacterRenderProperties renderProperties, ISpriteSheet weaponSheet, bool isRangedWeapon) : base(renderProperties) { _weaponSheet = weaponSheet; _isRangedWeapon = isRangedWeapon; }
public WeaponRenderer(ICharacterRenderProperties renderProperties, Texture2D weaponTexture, IPubFile <EIFRecord> itemFile) { _renderProperties = renderProperties; _weaponTexture = weaponTexture; _itemFile = itemFile; }
public void UpdateCharacterState(int id, ICharacterRenderProperties newCharacterState) { if (!HasCharacterWithID(id)) { _characterRenderProperties.Add(id, null); } _characterRenderProperties[id] = newCharacterState; }
public HairRenderer(ICharacterRenderProperties renderProperties, Texture2D hairTexture, IPubFile <EIFRecord> itemFile) { _renderProperties = renderProperties; _hairTexture = hairTexture; _hairRenderLocationCalculator = new HairRenderLocationCalculator(itemFile, _renderProperties); }
private static bool CharacterIsAtPosition(ICharacterRenderProperties renderProperties, int row, int col) { if (renderProperties.IsActing(CharacterActionState.Walking)) { return(row == renderProperties.GetDestinationY() && col == renderProperties.GetDestinationX()); } return(row == renderProperties.MapY && col == renderProperties.MapX); }
private bool IsHairOnTopOfHat(ICharacterRenderProperties renderProperties) { //todo: i might have this backwards... var hatInfo = EIFFile.Data.SingleOrDefault( x => x.Type == ItemType.Hat && x.DollGraphic == renderProperties.HatGraphic); return(hatInfo != null && hatInfo.SubType == ItemSubType.FaceMask); }
public ICharacterRenderer CreateCharacterRenderer(ICharacterRenderProperties initialRenderProperties) { return(new CharacterRenderer((Game)_gameProvider.Game, _renderTargetFactory, _characterProvider, _renderOffsetCalculator, _characterPropertyRendererBuilder, _characterTextures, _characterSpriteCalculator, initialRenderProperties)); }
public HatRenderer(IShaderProvider shaderProvider, ICharacterRenderProperties renderProperties, ISpriteSheet hatSheet, ISpriteSheet hairSheet) : base(renderProperties) { _shaderProvider = shaderProvider; _hatSheet = hatSheet; _hairSheet = hairSheet; _hairRenderLocationCalculator = new HairRenderLocationCalculator(_renderProperties); }
private bool IsWeaponBehindCharacter(ICharacterRenderProperties renderProperties) { var weaponInfo = EIFFile.Data.SingleOrDefault( x => x.Type == ItemType.Weapon && x.DollGraphic == renderProperties.WeaponGraphic); var pass1 = renderProperties.AttackFrame < 2; var pass2 = renderProperties.IsFacing(EODirection.Up, EODirection.Left); var pass3 = weaponInfo == null || weaponInfo.SubType == ItemSubType.Ranged; return(pass1 || pass2 || pass3); }
private static ICharacterRenderProperties EnsureCorrectXAndY(ICharacterRenderProperties renderProperties, byte x, byte y) { var opposite = renderProperties.Direction.Opposite(); var tempRenderProperties = renderProperties .WithDirection(opposite) .WithMapX(x) .WithMapY(y); return(renderProperties .WithMapX(tempRenderProperties.GetDestinationX()) .WithMapY(tempRenderProperties.GetDestinationY())); }
public void Refresh(ICharacterRenderProperties characterRenderProperties) { Boots = _characterSpriteCalculator.GetBootsTexture(characterRenderProperties).SheetTexture; Armor = _characterSpriteCalculator.GetArmorTexture(characterRenderProperties).SheetTexture; Hat = _characterSpriteCalculator.GetHatTexture(characterRenderProperties).SheetTexture; Shield = _characterSpriteCalculator.GetShieldTexture(characterRenderProperties).SheetTexture; Weapon = _characterSpriteCalculator.GetWeaponTexture(characterRenderProperties).SheetTexture; Hair = _characterSpriteCalculator.GetHairTexture(characterRenderProperties).SheetTexture; Skin = _characterSpriteCalculator.GetSkinTexture(characterRenderProperties); Emote = _characterSpriteCalculator.GetEmoteTexture(characterRenderProperties); Face = _characterSpriteCalculator.GetFaceTexture(characterRenderProperties); }
private static ICharacterRenderProperties AnimateOneWalkFrame(ICharacterRenderProperties renderProperties) { var nextFrameRenderProperties = renderProperties.WithNextWalkFrame(); if (nextFrameRenderProperties.CurrentAction != CharacterActionState.Walking) { nextFrameRenderProperties = nextFrameRenderProperties .WithMapX(nextFrameRenderProperties.GetDestinationX()) .WithMapY(nextFrameRenderProperties.GetDestinationY()); } return(nextFrameRenderProperties); }
private bool BowIsEquipped(ICharacterRenderProperties characterRenderProperties) { if (EIFFile == null || EIFFile.Data == null) { return(false); } var itemData = EIFFile.Data; var weaponInfo = itemData.SingleOrDefault(x => x.Type == ItemType.Weapon && x.DollGraphic == characterRenderProperties.WeaponGraphic); return(weaponInfo != null && weaponInfo.SubType == ItemSubType.Ranged); }
public IEnumerable <ICharacterPropertyRenderer> BuildList(ICharacterTextures textures, ICharacterRenderProperties renderProperties) { bool shieldAdded = false, weaponAdded = false; if (IsShieldBehindCharacter(renderProperties)) { shieldAdded = true; yield return(new ShieldRenderer(renderProperties, textures.Shield)); } if (IsWeaponBehindCharacter(renderProperties)) { weaponAdded = true; yield return(new WeaponRenderer(renderProperties, textures.Weapon, EIFFile)); } yield return(new SkinRenderer(renderProperties, textures.Skin, EIFFile)); yield return(new FaceRenderer(renderProperties, textures.Face, EIFFile)); yield return(new EmoteRenderer(renderProperties, textures.Emote, EIFFile)); yield return(new BootsRenderer(renderProperties, textures.Boots, EIFFile)); yield return(new ArmorRenderer(renderProperties, textures.Armor, EIFFile)); if (!weaponAdded) { yield return(new WeaponRenderer(renderProperties, textures.Weapon, EIFFile)); } if (IsHairOnTopOfHat(renderProperties)) { yield return(new HatRenderer(renderProperties, textures.Hat, EIFFile)); yield return(new HairRenderer(renderProperties, textures.Hair, EIFFile)); } else { yield return(new HairRenderer(renderProperties, textures.Hair, EIFFile)); yield return(new HatRenderer(renderProperties, textures.Hat, EIFFile)); } if (!shieldAdded) { yield return(new ShieldRenderer(renderProperties, textures.Shield)); } }
public ISpriteSheet GetBootsTexture(ICharacterRenderProperties characterRenderProperties) { if (characterRenderProperties.BootsGraphic == 0) { return(new EmptySpriteSheet()); } var type = BootsSpriteType.Standing; switch (characterRenderProperties.CurrentAction) { case CharacterActionState.Walking: switch (characterRenderProperties.WalkFrame) { case 1: type = BootsSpriteType.WalkFrame1; break; case 2: type = BootsSpriteType.WalkFrame2; break; case 3: type = BootsSpriteType.WalkFrame3; break; case 4: type = BootsSpriteType.WalkFrame4; break; } break; case CharacterActionState.Attacking: if (!BowIsEquipped(characterRenderProperties) && characterRenderProperties.AttackFrame == 2 || BowIsEquipped(characterRenderProperties) && characterRenderProperties.AttackFrame == 1) { type = BootsSpriteType.Attack; } break; case CharacterActionState.Sitting: switch (characterRenderProperties.SitState) { case SitState.Chair: type = BootsSpriteType.SitChair; break; case SitState.Floor: type = BootsSpriteType.SitGround; break; } break; } var gfxFile = characterRenderProperties.Gender == 0 ? GFXTypes.FemaleShoes : GFXTypes.MaleShoes; var offset = GetOffsetBasedOnState(type) * GetBaseOffsetFromDirection(characterRenderProperties.Direction); var baseBootGraphic = GetBaseBootGraphic(characterRenderProperties.BootsGraphic); var gfxNumber = baseBootGraphic + (int)type + offset; return(new SpriteSheet(_gfxManager.TextureFromResource(gfxFile, gfxNumber, true))); }
public ISpriteSheet GetHatTexture(ICharacterRenderProperties characterRenderProperties) { if (characterRenderProperties.HatGraphic == 0) { return(new EmptySpriteSheet()); } var gfxFile = characterRenderProperties.Gender == 0 ? GFXTypes.FemaleHat : GFXTypes.MaleHat; var offset = 2 * GetBaseOffsetFromDirection(characterRenderProperties.Direction); var baseHatValue = GetBaseHatGraphic(characterRenderProperties.HatGraphic); var gfxNumber = baseHatValue + 1 + offset; return(new SpriteSheet(_gfxManager.TextureFromResource(gfxFile, gfxNumber, true))); }
public ISpriteSheet GetHairTexture(ICharacterRenderProperties characterRenderProperties) { if (characterRenderProperties.HairStyle == 0) { return(new EmptySpriteSheet()); } var gfxFile = characterRenderProperties.Gender == 0 ? GFXTypes.FemaleHair : GFXTypes.MaleHair; var offset = 2 * GetBaseOffsetFromDirection(characterRenderProperties.Direction); var gfxNumber = GetBaseHairGraphic(characterRenderProperties.HairStyle, characterRenderProperties.HairColor) + 2 + offset; var hairTexture = _gfxManager.TextureFromResource(gfxFile, gfxNumber, true, true); return(new SpriteSheet(hairTexture)); }