예제 #1
0
    public override void _Ready()
    {
        _team = (Team)GetNode("Team");
        _team.CurrentTeamCode = _defaultTeamCode;

        _captureTeamCode  = _team.CurrentTeamCode;
        _unitDisplayLabel = ((Label)(GetNode("UnitDisplay/Name")));
        _unitDisplay      = (UnitDisplay)GetNode("UnitDisplay");

        _collisionShape = (CollisionShape2D)GetNode("CollisionShape2D");

        _rng = new RandomNumberGenerator();
        _rng.Randomize();

        _base    = (Sprite)GetNode("Base");
        _boundry = (Sprite)GetNode("Boundry");

        _timer = (Timer)GetNode("CaptureTimer");

        agentsEntered = new Godot.Collections.Array();

        for (int index = 0; index < Enum.GetNames(typeof(Team.TeamCode)).Length; index++)
        {
            agentsEntered.Add(0);
        }

        // Update unit display
        SetCaptureBaseTeam(_team.CurrentTeamCode);
    }
예제 #2
0
    public List <Point> GetPositionsForRangeAttack(UnitDisplay attacker, Point fromPosition)
    {
        var radiusPoints = this.FindPointsInRadius(fromPosition, attacker.CardData.abilities.range.range, attacker.CardData.abilities.range.minRange);

        var points = new List <Point>();

        foreach (var radiusPoint in radiusPoints)
        {
            var canUnitStandsAtThisPoint = true;
            var area = this.Areas[radiusPoint.x, radiusPoint.y];
            if (area != null && !area.GetComponent <AreaDisplay>().areaData.canUnitsWalkThoughtIt)
            {
                canUnitStandsAtThisPoint = false;
            }

            var canAttackToThisPoint = this.CheckRangeAttackBetweenPoints(fromPosition, radiusPoint);

            if (canAttackToThisPoint && canUnitStandsAtThisPoint)
            {
                points.Add(radiusPoint);
            }
        }

        return(points);
    }
예제 #3
0
 public void EmmitCardToAimAction(UnitDisplay unit)
 {
     Unibus.Dispatch <SimpleAbilityCardAction>(ActionEmmiter.CARD_TO_AIM, new SimpleAbilityCardAction
     {
         cardId = unit.CardData.id
     });
 }
예제 #4
0
 public void EmmitCardUseManaAbilityAction(UnitDisplay unit)
 {
     Unibus.Dispatch <SimpleAbilityCardAction>(ActionEmmiter.CARD_USE_MANA_ABILITY, new SimpleAbilityCardAction
     {
         cardId = unit.CardData.id
     });
 }
예제 #5
0
    private void OnUnitMouseExitOnBoard(UnitDisplay unit)
    {
        this.boardCreator.RemoveAllBlinks();
        unit.CardDisplay.OverHighlightOff();

        CursorController.SetDefault();
    }
예제 #6
0
 private void InteractWithUnit(UnitDisplay clickedUnitDisplay)
 {
     if (clickedUnitDisplay.CardDisplay.IsAlly)
     {
         if (!clickedUnitDisplay.CardData.tapped)
         {
             this.ChangeSelectedToAnotherAlly(clickedUnitDisplay);
         }
     }
     else
     {
         if (this.selectedUnit.CardData.abilities.push != null)
         {
             this.EnableSelectingPushTargetState(clickedUnitDisplay);
         }
         else if (this.selectedUnit.CardData.abilities.ricochet && this.boardCreator.UnitHaveRicochetTargetNearby(clickedUnitDisplay))
         {
             this.EnableSelectingRicochetTargetState(clickedUnitDisplay);
         }
         else
         {
             this.AttackEnemy(clickedUnitDisplay);
         }
     }
 }
예제 #7
0
 private void OnUnitMouseExitOnBoard(UnitDisplay unit)
 {
     unit.CardDisplay.OverHighlightOff();
     CursorController.SetDefault();
     this.boardCreator.RemoveAllBlinks();
     this.boardCreator.ShowPathReach(this.selectedUnit);
 }
예제 #8
0
    private void UpdatePositions(UnitDisplay unitDisplay, Point position)
    {
        Point oldPosition = GetUnitPosition(unitDisplay);

        Units[oldPosition.x, oldPosition.y] = null;
        Units[position.x, position.y]       = unitDisplay.gameObject as GameObject;
    }
예제 #9
0
        private void OnSelectProfile(object sender, SelectionChangedEventArgs e)
        {
            if (ProfileBox.SelectedItem == null)
            {
                return;
            }

            MissionProfile selectProfile = _missionProfiles[(string)ProfileBox.SelectedItem];

            CraftBox.Items.Clear();
            CommandBox.Items.Clear();
            PropertyBox.Items.Clear();

            foreach (string craftName in selectProfile.Commands.Keys)
            {
                CraftBox.Items.Add(craftName);
            }

            DateTime launchDate = selectProfile.Config.GetLaunchDate();

            VehicleName.Content   = selectProfile.Config.VehicleType;
            PlanetName.Content    = selectProfile.Config.ParentPlanet;
            PayloadName.Content   = UnitDisplay.Mass(selectProfile.Config.PayloadMass);
            LocalTimeName.Content = $"{launchDate.ToShortDateString()} {launchDate.ToShortTimeString()}";
        }
예제 #10
0
 private void OnUnitSelectedOnBoard(UnitDisplay clickedUnitDisplay)
 {
     if (!clickedUnitDisplay.CardDisplay.IsAlly)
     {
         this.actionEmmiter.EmmitCardAttackAction(this.attackerSelectedUnit, this.attackedSelectedUnit, null, clickedUnitDisplay);
         this.EnableNoSelectionsState();
     }
 }
예제 #11
0
 public void EmmitCardHealingAction(UnitDisplay healerUnit, UnitDisplay healedUnit)
 {
     Unibus.Dispatch <HealCardAction>(ActionEmmiter.CARD_HEAL, new HealCardAction
     {
         healerCardId = healerUnit.CardData.id,
         healedCardId = healedUnit.CardData.id
     });
 }
예제 #12
0
    public void PushUnit(CardDisplay cardDisplay, Point position)
    {
        UnitDisplay unitDisplay = cardDisplay.UnitDisplay;

        unitDisplay.transform.DOLocalJump(PointerToIcometric(position, tileWidth, tileHeight), 0.5f, 1, 0.5f);

        this.UpdatePositions(unitDisplay, position);
    }
 private void OnUnitSelectedOnBoard(UnitDisplay clickedUnitDisplay)
 {
     if (clickedUnitDisplay.CardDisplay.IsAlly)
     {
         this.actionEmmiter.EmmitCardHealingAction(this.selectedUnit, clickedUnitDisplay);
         this.EnableNoSelectionsState();
     }
 }
예제 #14
0
 public void EmmitCardMoveAction(UnitDisplay movingUnit, Point point)
 {
     Unibus.Dispatch <MoveCardAction>(ActionEmmiter.CARD_MOVE, new MoveCardAction
     {
         cardId = movingUnit.CardData.id,
         x      = point.x.ToString(),
         y      = point.y.ToString()
     });
 }
예제 #15
0
파일: Scale.cs 프로젝트: stauders/SpaceSim
        public void Render(Graphics graphics, RectangleD cameraBounds)
        {
            double scale = cameraBounds.Width * _widthPercentage;

            graphics.FillRectangle(new SolidBrush(Color.White), _center.X - 50, _center.Y - 2, 100, 4);
            graphics.FillRectangle(new SolidBrush(Color.White), _center.X - 51, _center.Y - _size, 4, 20);
            graphics.FillRectangle(new SolidBrush(Color.White), _center.X + 51, _center.Y - _size, 4, 20);

            graphics.DrawString(UnitDisplay.Distance(scale), _font, new SolidBrush(Color.White), _center.X + 65, _center.Y - _size);
        }
예제 #16
0
    public void KillUnit(CardDisplay cardDisplay)
    {
        UnitDisplay unitDisplay = cardDisplay.UnitDisplay;

        Point position = GetUnitPosition(unitDisplay);

        Units[position.x, position.y] = null;

        unitDisplay.ToKill();
    }
예제 #17
0
 private void ShowRangeAttackReach(UnitDisplay unit, Point fromPosition = null)
 {
     if (unit.CardData.abilities.range != null)
     {
         if (fromPosition == null)
         {
             fromPosition = this.boardCreator.GetUnitPosition(unit);
         }
         this.boardCreator.ShowRangeAttackReach(unit, fromPosition);
     }
 }
예제 #18
0
    public List <Point> ShowPathReach(UnitDisplay unitDisplay)
    {
        var reachChecker = this.CreateReachChecker();

        Point unitPosition = this.GetUnitPosition(unitDisplay);
        var   points       = reachChecker.CheckReach(unitPosition, unitDisplay.CardData.currentMovingPoints);

        this.HighlightPathInTilesByPoints(points);

        return(points);
    }
예제 #19
0
    public List <Point> ShowPushReach(UnitDisplay attacker, UnitDisplay attacked)
    {
        var reachChecker = this.CreateReachChecker(true, true, true);

        Point unitPosition = this.GetUnitPosition(attacked);
        var   points       = reachChecker.CheckReach(unitPosition, attacker.CardData.abilities.push.range);

        this.HighlightPathInTilesByPoints(points);

        return(points);
    }
예제 #20
0
 public void Prime(List <Unit> units)
 {
     clearDisplays();
     foreach (var unit in units)
     {
         UnitDisplay display = (UnitDisplay)Instantiate(unitDisplayPrefab);
         display.transform.SetParent(targetTransform, false);
         display.Prime(unit);
         display.onClick += Display_onClick;
         unitDisplays.Add(display);
     }
 }
 private void OnUnitMouseEnterOnBoard(UnitDisplay unit)
 {
     if (unit.CardDisplay.IsAlly && this.boardCreator.CheckUnitInPoints(unit, this.points))
     {
         CursorController.SetPointer();
         unit.OverHighlightOn();
     }
     else
     {
         CursorController.SetPointerForbidden();
     }
 }
예제 #22
0
    public TileDisplay GetTileByUnit(UnitDisplay unitDisplay)
    {
        Point unitPosition = GetUnitPosition(unitDisplay);

        var tile = Tiles[unitPosition.x, unitPosition.y];

        if (tile)
        {
            return(tile.GetComponent <TileDisplay>());
        }

        return(null);
    }
예제 #23
0
    public void MoveUnit(CardDisplay cardDisplay, Point position, Point[] path)
    {
        UnitDisplay    unitDisplay = cardDisplay.UnitDisplay;
        List <Vector3> waypoints   = new List <Vector3>();

        foreach (var point in path)
        {
            waypoints.Add(PointerToIcometric(point, tileWidth, tileHeight));
        }

        unitDisplay.transform.DOLocalPath(waypoints.ToArray(), 0.3f * waypoints.Count);

        this.UpdatePositions(unitDisplay, position);
    }
예제 #24
0
    public void CreateUnit(CardDisplay cardDisplay, Point position)
    {
        GameObject unit = Instantiate <GameObject>(UnitPrefab, this.transform);

        unit.transform.SetParent(this.transform);
        unit.transform.localPosition = PointerToIcometric(position, tileWidth, tileHeight);

        UnitDisplay unitDisplay = unit.GetComponent <UnitDisplay>();

        unitDisplay.CardData    = cardDisplay.cardData;
        unitDisplay.CardDisplay = cardDisplay;
        cardDisplay.UnitDisplay = unitDisplay;

        Units[position.x, position.y] = unit as GameObject;
    }
    public void Enable(UnitDisplay selectedUnit, HealingAbility healingAbility)
    {
        this.Enable();
        this.selectedUnit = selectedUnit;

        this.points = this.boardCreator.BlinkHealTargets(selectedUnit, healingAbility.range);

        CursorController.SetPointer();

        Dialog.instance.ShowDialog("Choose ally unit to heal (Heal ability)", "Cancel", this.EnableNoSelectionsState);

        Unibus.Subscribe <UnitDisplay>(BoardCreator.UNIT_CLICKED_ON_BOARD, OnUnitSelectedOnBoard);
        Unibus.Subscribe <UnitDisplay>(BoardCreator.UNIT_MOUSE_ENTER_ON_BOARD, OnUnitMouseEnterOnBoard);
        Unibus.Subscribe <UnitDisplay>(BoardCreator.UNIT_MOUSE_EXIT_ON_BOARD, OnUnitMouseExitOnBoard);
    }
예제 #26
0
    void OnTileMouseLeftClick(Point position)
    {
        GameObject unit = Units[position.x, position.y];

        if (unit)
        {
            UnitDisplay unitDisplay = unit.GetComponent <UnitDisplay>();

            Unibus.Dispatch <UnitDisplay>(UNIT_CLICKED_ON_BOARD, unitDisplay);
        }
        else
        {
            Unibus.Dispatch <Point>(CLICKED_ON_VOID_TILE, position);
        }
    }
예제 #27
0
    public bool CheckCardsAdjacency(UnitDisplay firstCard, UnitDisplay secondCard)
    {
        Point firstCardPoint  = GetUnitPosition(firstCard);
        Point secondCardPoint = GetUnitPosition(secondCard);

        int xDistance = Math.Abs(firstCardPoint.x - secondCardPoint.x);
        int yDistance = Math.Abs(firstCardPoint.y - secondCardPoint.y);

        if (xDistance + yDistance < 2)
        {
            return(true);
        }

        return(false);
    }
예제 #28
0
    public Point GetUnitPosition(UnitDisplay unitDisplay)
    {
        for (int x = 1; x <= Width; x++)
        {
            for (int y = 1; y <= Height; y++)
            {
                if (Units[x, y] == unitDisplay.gameObject)
                {
                    return(new Point(x, y));
                }
            }
        }

        return(null);
    }
예제 #29
0
    public void ShowRangeAttackReach(UnitDisplay attacker, Point fromPosition)
    {
        var points = this.GetPositionsForRangeAttack(attacker, fromPosition);

        this.HighlightRangeAttackReachInTilesByPoints(points);

        List <UnitDisplay> units = this.GetUnitsByPoints(points);

        foreach (var unit in units)
        {
            if (!unit.CardDisplay.IsAlly)
            {
                unit.ShowTarget();
            }
        }
    }
예제 #30
0
    private void OnUnitMouseEnterOnBoard(UnitDisplay unit)
    {
        if (unit.CardDisplay.IsAlly && !unit.CardDisplay.cardData.tapped)
        {
            unit.CardDisplay.OverHighlightOn();

            this.boardCreator.ShowPathReach(unit);

            if (unit.CardData.abilities.range != null)
            {
                Point attackerPosition = this.boardCreator.GetUnitPosition(unit);
                this.boardCreator.ShowRangeAttackReach(unit, attackerPosition);
            }

            CursorController.SetPointer();
        }
    }