/// <summary> /// Do a missile attack animation. creature firing from start to finish in color. /// Currently checks if the target and origin creature are in FOV but not the path itself /// Currently only used for MvP attacks /// </summary> /// <param name="LocationMap"></param> /// <param name="point"></param> /// <param name="point_3"></param> /// <param name="color"></param> internal void DrawMissileAttack(Creature originCreature, Creature target, CombatResults result, Color color) { if (!CombatAnimations) return; //Check that the player can see the action MapSquare creatureSquare = Game.Dungeon.Levels[originCreature.LocationLevel].mapSquares[originCreature.LocationMap.x, originCreature.LocationMap.y]; MapSquare targetSquare = Game.Dungeon.Levels[target.LocationLevel].mapSquares[target.LocationMap.x, target.LocationMap.y]; if (!creatureSquare.InPlayerFOV && !targetSquare.InPlayerFOV) return; //Draw the screen as normal Draw(); FlushConsole(); //Flash the attacker /* if (creatureSquare.InPlayerFOV) { rootConsole.ForegroundColor = ColorPresets.White; rootConsole.PutChar(mapTopLeft.x + originCreature.LocationMap.x, mapTopLeft.y + originCreature.LocationMap.y, originCreature.Representation); }*/ //Draw animation to animation layer //Calculate and draw the line overlay DrawPathLine(TileLevel.Animations, originCreature.LocationMap, target.LocationMap, color, ColorPresets.Black); //Flash the target if they were damaged //Draw them in either case so that we overwrite the missile animation on the target square with the creature if (targetSquare.InPlayerFOV) { Color colorToDraw = ColorPresets.Red; if (result == CombatResults.DefenderDamaged || result == CombatResults.DefenderDied) { } else { colorToDraw = target.RepresentationColor(); } if (isViewVisible(target.LocationMap)) { tileMapLayer(TileLevel.Animations)[ViewRelative(target.LocationMap)] = new TileEngine.TileCell(target.Representation); tileMapLayer(TileLevel.Animations)[ViewRelative(target.LocationMap)].TileFlag = new LibtcodColorFlags(colorToDraw); } } //Render the full layered map (with these animations) on screen MapRendererLibTCod.RenderMap(tileMap, new Point(0, 0), new System.Drawing.Rectangle(mapTopLeft.x, mapTopLeft.y, mapBotRightBase.x - mapTopLeftBase.x + 1, mapBotRightBase.y - mapTopLeftBase.y + 1)); FlushConsole(); //Wait TCODSystem.Sleep(missileDelay); //Wipe the animation layer tileMap.ClearLayer((int)TileLevel.Animations); //Draw the map normally MapRendererLibTCod.RenderMap(tileMap, new Point(0, 0), new System.Drawing.Rectangle(mapTopLeft.x, mapTopLeft.y, mapBotRightBase.x - mapTopLeftBase.x + 1, mapBotRightBase.y - mapTopLeftBase.y + 1)); FlushConsole(); }