/// <summary> /// Constructor /// </summary> /// <remarks> /// Constructor. Most often <see cref="RB.PackedSpriteGet"/> should be used instead of created PackedSprite manually. /// <seedoc>Features:Sprite Packs</seedoc> /// </remarks> /// <param name="id">SpriteID of the sprite</param> /// <param name="size">Size of the sprite, untrimmed</param> /// <param name="sourceRect">Source rectangle from within packed texture, may be trimmed</param> /// <param name="trimOffset">Trim offset</param> /// <seealso cref="SpriteSheetAsset"/> /// <seealso cref="RB.PackedSpriteGet"/> public PackedSprite(PackedSpriteID id, Vector2i size, Rect2i sourceRect, Vector2i trimOffset) { mID = id; mSize = size; mSourceRect = sourceRect; mTrimOffset = trimOffset; }
/// <summary> /// Simple nine-slice constructor, all corners and sides are mirrored and rotated /// </summary> /// <param name="topLeftCornerRect">Top left corner rect</param> /// <param name="topSideRect">Top side rect</param> /// <param name="middleRect">Middle rect</param> public NineSlice(Rect2i topLeftCornerRect, Rect2i topSideRect, Rect2i middleRect) { TopLeftCornerRect = topLeftCornerRect; TopSideRect = topSideRect; TopRightCornerRect = topLeftCornerRect; LeftSideRect = topSideRect; MiddleRect = middleRect; RightSideRect = topSideRect; BottomLeftCornerRect = topLeftCornerRect; BottomSideRect = topSideRect; BottomRightCornerRect = topLeftCornerRect; FlagsTopLeftCorner = 0; FlagsTopSide = 0; FlagsTopRightCorner = RB.FLIP_H; FlagsLeftSide = RB.ROT_90_CCW; FlagsRightSide = RB.ROT_90_CW; FlagsBottomLeftCorner = RB.FLIP_V; FlagsBottomSide = RB.FLIP_V; FlagsBottomRightCorner = RB.FLIP_H | RB.FLIP_V; PackedSpriteID empty = new PackedSpriteID(0); TopLeftCornerID = empty; TopSideID = empty; TopRightCornerID = empty; LeftSideID = empty; MiddleID = empty; RightSideID = empty; BottomLeftCornerID = empty; BottomSideID = empty; BottomRightCornerID = empty; IsRectBased = true; }
/// <summary> /// Simple nine-slice constructor, all corners and sides are mirrored and rotated /// </summary> /// <param name="topLeftCorner">Top left corner PackedSprite</param> /// <param name="topSide">Top side PackedSprite</param> /// <param name="middle">Middle PackedSprite</param> public NineSlice(PackedSprite topLeftCorner, PackedSprite topSide, PackedSprite middle) { TopLeftCornerID = topLeftCorner.id; TopSideID = topSide.id; TopRightCornerID = topLeftCorner.id; LeftSideID = topSide.id; MiddleID = middle.id; RightSideID = topSide.id; BottomLeftCornerID = topLeftCorner.id; BottomSideID = topSide.id; BottomRightCornerID = topLeftCorner.id; FlagsTopLeftCorner = 0; FlagsTopSide = 0; FlagsTopRightCorner = RB.FLIP_H; FlagsLeftSide = RB.ROT_90_CCW; FlagsRightSide = RB.ROT_90_CW; FlagsBottomLeftCorner = RB.FLIP_V; FlagsBottomSide = RB.FLIP_V; FlagsBottomRightCorner = RB.FLIP_H | RB.FLIP_V; TopLeftCornerRect = Rect2i.zero; TopSideRect = Rect2i.zero; TopRightCornerRect = Rect2i.zero; LeftSideRect = Rect2i.zero; MiddleRect = Rect2i.zero; RightSideRect = Rect2i.zero; BottomLeftCornerRect = Rect2i.zero; BottomSideRect = Rect2i.zero; BottomRightCornerRect = Rect2i.zero; IsRectBased = false; }
/// <summary> /// Constructor /// </summary> /// <param name="source">Source entity</param> /// <param name="target">Target entity</param> /// <param name="targetPos">Target position</param> /// <param name="projectileSprite">Projectile sprite facing top</param> /// <param name="projecticleSprite45">Projectile sprite facing top-right</param> /// <param name="projecticleColor">Projectile color</param> /// <param name="launchSound">Launching sound</param> /// <param name="landSound">Landing sound</param> public EffectThrow(EntityID source, EntityID target, Vector2i targetPos, PackedSpriteID projectileSprite, PackedSpriteID projecticleSprite45, Color32 projecticleColor, int launchSound, int landSound) : base(EffectType.Throw) { mSourcePos = new Vector2i(source.e.pos.x * RB.SpriteSize(0).width, source.e.pos.y * RB.SpriteSize(0).height); mTargetEntity = target; mProjecticleColor = projecticleColor; mFramesTotal = 10; mFramesRemaining = mFramesTotal; mRotate = true; mProjecticleSprite = projectileSprite; mProjecticleSprite45 = projecticleSprite45; mLaunchSound = launchSound; mLandSound = landSound; mTargetPos = targetPos; if (mLaunchSound >= 0) { RB.SoundPlay(mLaunchSound); } }
/// <summary> /// Constructor /// </summary> /// <param name="source">Source entity</param> /// <param name="target">Target entity</param> /// <param name="targetPos">Target position</param> /// <param name="projectileSprite">Projectile sprite facing top</param> /// <param name="projecticleSprite45">Projectile sprite facing top-right</param> /// <param name="projecticleColor">Projectile color</param> /// <param name="launchSound">Launching sound</param> /// <param name="landSound">Landing sound</param> public EffectThrow(EntityID source, EntityID target, Vector2i targetPos, PackedSpriteID projectileSprite, PackedSpriteID projecticleSprite45, Color32 projecticleColor, AudioAsset launchSound, AudioAsset landSound) : base(EffectType.Throw) { var game = (RetroDungeoneerGame)RB.Game; mSourcePos = new Vector2i(source.e.pos.x * game.assets.spriteSheet.grid.cellSize.width, source.e.pos.y * game.assets.spriteSheet.grid.cellSize.height); mTargetEntity = target; mProjecticleColor = projecticleColor; mFramesTotal = 10; mFramesRemaining = mFramesTotal; mRotate = true; mProjecticleSprite = projectileSprite; mProjecticleSprite45 = projecticleSprite45; mLaunchSound = launchSound; mLandSound = landSound; mTargetPos = targetPos; if (mLaunchSound != null) { RB.SoundPlay(mLaunchSound); } }
/// <summary> /// Simple nine-slice constructor, all corners and sides are mirrored and rotated /// </summary> /// <param name="topLeftCornerName">Top left corner sprite name</param> /// <param name="topSideName">Top side rect sprite name</param> /// <param name="middleName">Middle rect sprite name</param> public NineSlice(FastString topLeftCornerName, FastString topSideName, FastString middleName) { TopLeftCornerID = RB.PackedSpriteID(topLeftCornerName); TopSideID = RB.PackedSpriteID(topSideName); TopRightCornerID = RB.PackedSpriteID(topLeftCornerName); LeftSideID = RB.PackedSpriteID(topSideName); MiddleID = RB.PackedSpriteID(middleName); RightSideID = RB.PackedSpriteID(topSideName); BottomLeftCornerID = RB.PackedSpriteID(topLeftCornerName); BottomSideID = RB.PackedSpriteID(topSideName); BottomRightCornerID = RB.PackedSpriteID(topLeftCornerName); FlagsTopLeftCorner = 0; FlagsTopSide = 0; FlagsTopRightCorner = RB.FLIP_H; FlagsLeftSide = RB.ROT_90_CCW; FlagsRightSide = RB.ROT_90_CW; FlagsBottomLeftCorner = RB.FLIP_V; FlagsBottomSide = RB.FLIP_V; FlagsBottomRightCorner = RB.FLIP_H | RB.FLIP_V; TopLeftCornerRect = Rect2i.zero; TopSideRect = Rect2i.zero; TopRightCornerRect = Rect2i.zero; LeftSideRect = Rect2i.zero; MiddleRect = Rect2i.zero; RightSideRect = Rect2i.zero; BottomLeftCornerRect = Rect2i.zero; BottomSideRect = Rect2i.zero; BottomRightCornerRect = Rect2i.zero; IsRectBased = false; }
/// <summary> /// Constructor /// </summary> /// <param name="type">Tile type</param> /// <param name="sprite">Sprite to use when rendering this tile</param> /// <param name="color">Color of the tile</param> /// <param name="blocked">Whether the tile is blocking</param> /// <param name="blockSight">Whether the tile blocks sight (field of view)</param> public Tile(Type type, PackedSpriteID sprite, Color32 color, bool blocked, bool blockSight) { this.blocked = blocked; this.blockSight = blockSight; this.sprite = sprite; this.color = color; }
/// <summary> /// Constructor /// </summary> /// <param name="template">Template tile to copy</param> public Tile(Tile template) { type = template.type; blocked = template.blocked; blockSight = template.blockSight; sprite = template.sprite; color = template.color; }
/// <summary> /// De-serialize the component /// </summary> /// <param name="reader">Reader instance</param> public override void Read(BinaryReader reader) { int1 = reader.ReadInt32(); int2 = reader.ReadInt32(); targeting = reader.ReadBoolean(); targetingMessage = reader.ReadFastString(); useFunction = (ItemFunction)reader.ReadInt32(); paperDoll = reader.ReadPackedSpriteID(); type = (ItemType)reader.ReadInt32(); }
/// <summary> /// De-serialize the effect /// </summary> /// <param name="reader">Reader instance</param> public override void Read(BinaryReader reader) { base.Read(reader); mSourcePos = reader.ReadVector2i(); mTargetPos = reader.ReadVector2i(); mTargetEntity = reader.ReadEntityID(); mAlphaFade = reader.ReadInt32(); mProjecticleColor = reader.ReadColor32(); mProjecticleSprite = reader.ReadPackedSpriteID(); mProjecticleSprite45 = reader.ReadPackedSpriteID(); mRotate = reader.ReadBoolean(); mLaunchSound = SoundSerializer.Deserialize(reader.ReadInt32()); mLandSound = SoundSerializer.Deserialize(reader.ReadInt32()); }
/// <summary> /// Initialize the entity /// </summary> /// <param name="pos">Position</param> /// <param name="sprite">Sprite to draw with</param> /// <param name="color">Color</param> /// <param name="name">String name</param> /// <param name="renderOrder">Rendering order</param> /// <param name="blocks">Whether the entity is blocking</param> public void Initialize( Vector2i pos, PackedSpriteID sprite, Color32 color, FastString name, RenderFunctions.RenderOrder renderOrder, bool blocks = false) { this.pos = pos; this.sprite = sprite; this.color = color; this.name.Append(name); this.blocks = blocks; this.renderOrder = renderOrder; }
/// <summary> /// Constructor /// </summary> /// <remarks> /// Creates a new NineSlice image definition. A nine-slice sprite is a special kind of sprite usually used to draw rectangular shapes for UI elements. /// A nine-slice sprite is defined by up to 9 separate sprites that are arranged and repeated as needed in such a way that they can /// fill any rectangular area. /// /// <image src="nineslice_parts.png">Nine parts that make up a nine slice image</image> /// /// The pieces *A*, *C*, *G*, and *I* are always drawn in the corners of the nine-slice sprite. *B* and *H* are repeated horizontally. /// *E* and *F* are repeated vertically. Finally, *X* is repeated in both directions to fill the middle of the nine-slice sprite. /// /// For best results each of these groups of pieces should be the same height: /// <ul> /// <li> *A*, *B*, *C*</li> /// <li> *E*, *F*</li> /// <li> *G*, *H*, *I*</li> /// </ul> /// These groups should be the same width: /// <ul> /// <li> *A*, *E*, *G*</li> /// <li> *B*, *H*</li> /// <li> *C*, *F*, *I*</li> /// </ul> /// The center piece *X* can be of any size. /// /// The pieces that make up a nine-slice image should not be too small to limit the amount of times they have to be repeated to fill /// your nine-slice sprite. /// /// In some cases, such as in the image above, many of the pieces are symmetric, for convenience there are <see cref="NineSlice.NineSlice"/> overloads that /// take only *srcTopLeftCornerRect*, *srcTopSideRect*, and *srcMiddleRect* and simply rotate and mirror the remaining pieces automatically. /// /// You can specify the pieces of a nine-slice image through either source rectangles, or sprite ids for sprites in a sprite pack. /// <seedoc>Features:Nine-Slice Sprite</seedoc> /// <seedoc>Features:Sprite Sheets</seedoc> /// <seedoc>Features:Sprite Packs</seedoc> /// </remarks> /// <param name="topLeftCornerRect">Top left corner rect</param> /// <param name="topSideRect">Top side rect</param> /// <param name="topRightCornerRect">Top right corner rect</param> /// <param name="leftSideRect">Left side rect</param> /// <param name="middleRect">Middle rect</param> /// <param name="rightSideRect">Right side rect</param> /// <param name="bottomLeftCornerRect">Bottom left corner rect</param> /// <param name="bottomSideRect">Bottom side rect</param> /// <param name="bottomRightCornerRect">Bottom right corner rect</param> /// <code> /// SpriteSheetAsset uiSprites = new SpriteSheetAsset(); /// NineSlice dialogFrame; /// /// void Initialize() { /// uiSprites.Load("spritesheets/ui"); /// dialogFrame = new NineSlice( /// new Rect2i(0, 0, 8, 8), /// new Rect2i(8, 0, 8, 8), /// new Rect2i(16, 0, 8, 8)); /// } /// /// void Render() { /// RB.SpriteSheetSet(uiSprites); /// /// var dialogRect = new Rect2i(100, 100, 128, 64); /// /// // Draw a dialog frame using the predefined NineSlice /// RB.DrawNineSlice(dialogRect, dialogFrame); /// RB.Print( /// dialogRect, Color.white, RB.ALIGN_H_CENTER | RB.ALIGN_V_CENTER, /// "It's boring to go alone, take me!"); /// } /// </code> /// <seealso cref="RB.DrawNineSlice"/> /// <seealso cref="RB.SpriteSheetSet"/> /// <seealso cref="SpriteSheetAsset"/> public NineSlice( Rect2i topLeftCornerRect, Rect2i topSideRect, Rect2i topRightCornerRect, Rect2i leftSideRect, Rect2i middleRect, Rect2i rightSideRect, Rect2i bottomLeftCornerRect, Rect2i bottomSideRect, Rect2i bottomRightCornerRect) { TopLeftCornerRect = topLeftCornerRect; TopSideRect = topSideRect; TopRightCornerRect = topRightCornerRect; LeftSideRect = leftSideRect; MiddleRect = middleRect; RightSideRect = rightSideRect; BottomLeftCornerRect = bottomLeftCornerRect; BottomSideRect = bottomSideRect; BottomRightCornerRect = bottomRightCornerRect; FlagsTopLeftCorner = 0; FlagsTopSide = 0; FlagsTopRightCorner = 0; FlagsLeftSide = 0; FlagsRightSide = 0; FlagsBottomLeftCorner = 0; FlagsBottomSide = 0; FlagsBottomRightCorner = 0; PackedSpriteID empty = new PackedSpriteID(0); TopLeftCornerID = empty; TopSideID = empty; TopRightCornerID = empty; LeftSideID = empty; MiddleID = empty; RightSideID = empty; BottomLeftCornerID = empty; BottomSideID = empty; BottomRightCornerID = empty; IsRectBased = true; }
/// <summary> /// Constructor /// </summary> /// <param name="topLeftCornerName">Top left corner sprite name</param> /// <param name="topSideName">Top side sprite name</param> /// <param name="topRightCornerName">Top right corner sprite name</param> /// <param name="leftSideName">Left side sprite name</param> /// <param name="middleName">Middle sprite name</param> /// <param name="rightSideName">Right side sprite name</param> /// <param name="bottomLeftCornerName">Bottom left corner sprite name</param> /// <param name="bottomSideName">Bottom side sprite name</param> /// <param name="bottomRightCornerName">Bottom right corner sprite name</param> public NineSlice( FastString topLeftCornerName, FastString topSideName, FastString topRightCornerName, FastString leftSideName, FastString middleName, FastString rightSideName, FastString bottomLeftCornerName, FastString bottomSideName, FastString bottomRightCornerName) { TopLeftCornerID = RB.PackedSpriteID(topLeftCornerName); TopSideID = RB.PackedSpriteID(topSideName); TopRightCornerID = RB.PackedSpriteID(topRightCornerName); LeftSideID = RB.PackedSpriteID(leftSideName); MiddleID = RB.PackedSpriteID(middleName); RightSideID = RB.PackedSpriteID(rightSideName); BottomLeftCornerID = RB.PackedSpriteID(bottomLeftCornerName); BottomSideID = RB.PackedSpriteID(bottomSideName); BottomRightCornerID = RB.PackedSpriteID(bottomRightCornerName); FlagsTopLeftCorner = 0; FlagsTopSide = 0; FlagsTopRightCorner = 0; FlagsLeftSide = 0; FlagsRightSide = 0; FlagsBottomLeftCorner = 0; FlagsBottomSide = 0; FlagsBottomRightCorner = 0; TopLeftCornerRect = Rect2i.zero; TopSideRect = Rect2i.zero; TopRightCornerRect = Rect2i.zero; LeftSideRect = Rect2i.zero; MiddleRect = Rect2i.zero; RightSideRect = Rect2i.zero; BottomLeftCornerRect = Rect2i.zero; BottomSideRect = Rect2i.zero; BottomRightCornerRect = Rect2i.zero; IsRectBased = false; }
/// <summary> /// Constructor /// </summary> /// <param name="topLeftCorner">Top left corner PackedSprite</param> /// <param name="topSide">Top side PackedSprite</param> /// <param name="topRightCorner">Top right corner PackedSprite</param> /// <param name="leftSide">Left side PackedSprite</param> /// <param name="middle">Middle PackedSprite</param> /// <param name="rightSide">Right side PackedSprite</param> /// <param name="bottomLeftCorner">Bottom left corner PackedSprite</param> /// <param name="bottomSide">Bottom side PackedSprite</param> /// <param name="bottomRightCorner">Bottom right corner PackedSprite</param> public NineSlice( PackedSprite topLeftCorner, PackedSprite topSide, PackedSprite topRightCorner, PackedSprite leftSide, PackedSprite middle, PackedSprite rightSide, PackedSprite bottomLeftCorner, PackedSprite bottomSide, PackedSprite bottomRightCorner) { TopLeftCornerID = topLeftCorner.id; TopSideID = topSide.id; TopRightCornerID = topRightCorner.id; LeftSideID = leftSide.id; MiddleID = middle.id; RightSideID = rightSide.id; BottomLeftCornerID = bottomLeftCorner.id; BottomSideID = bottomSide.id; BottomRightCornerID = bottomRightCorner.id; FlagsTopLeftCorner = 0; FlagsTopSide = 0; FlagsTopRightCorner = 0; FlagsLeftSide = 0; FlagsRightSide = 0; FlagsBottomLeftCorner = 0; FlagsBottomSide = 0; FlagsBottomRightCorner = 0; TopLeftCornerRect = Rect2i.zero; TopSideRect = Rect2i.zero; TopRightCornerRect = Rect2i.zero; LeftSideRect = Rect2i.zero; MiddleRect = Rect2i.zero; RightSideRect = Rect2i.zero; BottomLeftCornerRect = Rect2i.zero; BottomSideRect = Rect2i.zero; BottomRightCornerRect = Rect2i.zero; IsRectBased = false; }
/// <summary> /// Constructor /// </summary> /// <param name="topLeftCornerID">Top left corner sprite ID</param> /// <param name="topSideID">Top side sprite ID</param> /// <param name="topRightCornerID">Top right corner sprite ID</param> /// <param name="leftSideID">Left side sprite ID</param> /// <param name="middleID">Middle sprite ID</param> /// <param name="rightSideID">Right side sprite ID</param> /// <param name="bottomLeftCornerID">Bottom left corner sprite ID</param> /// <param name="bottomSideID">Bottom side sprite ID</param> /// <param name="bottomRightCornerID">Bottom right corner sprite ID</param> public NineSlice( PackedSpriteID topLeftCornerID, PackedSpriteID topSideID, PackedSpriteID topRightCornerID, PackedSpriteID leftSideID, PackedSpriteID middleID, PackedSpriteID rightSideID, PackedSpriteID bottomLeftCornerID, PackedSpriteID bottomSideID, PackedSpriteID bottomRightCornerID) { TopLeftCornerID = topLeftCornerID; TopSideID = topSideID; TopRightCornerID = topRightCornerID; LeftSideID = leftSideID; MiddleID = middleID; RightSideID = rightSideID; BottomLeftCornerID = bottomLeftCornerID; BottomSideID = bottomSideID; BottomRightCornerID = bottomRightCornerID; FlagsTopLeftCorner = 0; FlagsTopSide = 0; FlagsTopRightCorner = 0; FlagsLeftSide = 0; FlagsRightSide = 0; FlagsBottomLeftCorner = 0; FlagsBottomSide = 0; FlagsBottomRightCorner = 0; TopLeftCornerRect = Rect2i.zero; TopSideRect = Rect2i.zero; TopRightCornerRect = Rect2i.zero; LeftSideRect = Rect2i.zero; MiddleRect = Rect2i.zero; RightSideRect = Rect2i.zero; BottomLeftCornerRect = Rect2i.zero; BottomSideRect = Rect2i.zero; BottomRightCornerRect = Rect2i.zero; IsRectBased = false; }
/// <summary> /// Equality /// </summary> /// <remarks> /// Equality check. /// </remarks> /// <param name="other">Other</param> /// <returns>True if equal</returns> public override bool Equals(object other) { if (other == null) { return(false); } if (other is PackedSpriteID) { PackedSpriteID pid = (PackedSpriteID)other; if (id != pid.id) { return(false); } return(true); } else { return(false); } }
private static void RenderTargeting() { var tilePos = SceneGame.GetMouseTilePos(); if (tilePos.x != -1) { var renderPos = new Vector2i( tilePos.x * RB.SpriteSize(0).width, tilePos.y * RB.SpriteSize(0).height); PackedSpriteID sprite = S.TARGET_1; if (RB.Ticks % 20 < 10) { sprite = S.TARGET_2; } RB.TintColorSet(new Color32(255, 0, 0, 200)); RB.DrawSprite(sprite, renderPos); RB.TintColorSet(Color.white); } }
private static void RenderTargeting() { var game = (RetroDungeoneerGame)RB.Game; var tilePos = SceneGame.GetMouseTilePos(); if (tilePos.x != -1) { var renderPos = new Vector2i( tilePos.x * game.assets.spriteSheet.grid.cellSize.width, tilePos.y * game.assets.spriteSheet.grid.cellSize.height); PackedSpriteID sprite = S.TARGET_1; if (RB.Ticks % 20 < 10) { sprite = S.TARGET_2; } RB.TintColorSet(new Color32(255, 0, 0, 200)); RB.DrawSprite(sprite, renderPos); RB.TintColorSet(Color.white); } }
/// <summary> /// Write sprite id /// </summary> /// <param name="writer">Writer instance</param> /// <param name="spriteID">Sprite id</param> public static void Write(this BinaryWriter writer, PackedSpriteID spriteID) { writer.Write(spriteID.id); }
public Enemy(Coord pos, string name, PackedSpriteID spriteID) : base(pos, name, (int)MapLayers.ENEMIES, spriteID) { Stats[StatTypes.AWARENESS] = 3; }
public MapTerrain(Coord pos, bool isStatic, bool isWalkable, bool isTransparent, PackedSpriteID spriteID) { _gameObjectImplementation = new GameObject(pos, (int)MapLayers.TERRAIN, this, isStatic, isWalkable, isTransparent); SpriteID = spriteID; }