public BaseUnitBehaviour( EntityController.GetTarget getTarget, EntityController.Faction faction, UnitViewPresenter myViewPresenter, AnimationController animationController)
 {
     this.myViewPresenter = myViewPresenter;
     this.animationController = animationController;
     myFaction = faction;
     this.navMeshAgent = myViewPresenter.navMeshAgent;
     GetTargetDelegate = getTarget;
     InitStateMachine();
 }
Exemplo n.º 2
0
    public void GetSelectableUnits( UnitViewPresenter[] array)
    {
        if ( array.Length > 0 ) {
            Deselect();
            cursor.SetMoveCursor();

            foreach ( var key in array ) {
                key.GetComponent<UnitViewPresenter>().Select();
            }
        }
    }
Exemplo n.º 3
0
 public EntityController( Player player, UnitViewPresenter redMainTarget, Vector3 blueMainPosition, BuildViewPresenter buildViewPresenter )
 {
     this.redMainTarget = redMainTarget;
     this.blueMainPosition = blueMainPosition;
     unitsControllersBlue = new List<BaseUnitController>();
     unitsControllersRed = new List<BaseUnitController>();
     unitsControllersSelectedRed = new List<BaseUnitController>();
     unitsControllersSelectedBlue = new List<BaseUnitController>();
     this.player = player;
     this.buildViewPresenter = buildViewPresenter;
 }
Exemplo n.º 4
0
    public void CreateUnit( UnitViewPresenter unitViewPresenter, BaseUnit.UnitCharacteristics unitCharacteristics, Faction faction, BaraksModel.SetUpdeteCharacteristicsDelegate setUpdeteCharacteristicsDelegate )
    {
        unitViewPresenter.faction = faction;

        unitViewPresenter.GetPlayer( player );

        BaseUnitController unitController;

        if ( unitViewPresenter.unitType == BaseUnit.UnitType.hero ) {
            unitController = new HeroUnitController( SelectUnit, (HeroViewPresentor)unitViewPresenter, unitCharacteristics, GetUnitTarget, faction, DestroyUnit, _HeroResurrect, setUpdeteCharacteristicsDelegate );
            buildController = new BuildController( SelectUnit, buildViewPresenter, unitCharacteristics, GetUnitTarget, faction, DestroyUnit, setUpdeteCharacteristicsDelegate );
        } else {
            unitController = new BaseUnitController( SelectUnit, unitViewPresenter, unitCharacteristics, GetUnitTarget, faction, DestroyUnit, setUpdeteCharacteristicsDelegate );
        }

        if ( faction == Faction.Blue ) {
            unitsControllersBlue.Add( unitController );
        } else {
            unitsControllersRed.Add( unitController );
        }
    }
    public BaseUnitController(
        EntityController.Select entityControllerSelect, 
        UnitViewPresenter unitViewPresenter, 
        BaseUnit.UnitCharacteristics unitCharacteristics, 
        EntityController.GetTarget getTarget, 
        EntityController.Faction faction, 
        DeathDestroy updateDeath,
        BaraksModel.SetUpdeteCharacteristicsDelegate setUpdeteCharacteristicsDelegate )
    {
        this.updateDeath = updateDeath;

        animationController = new AnimationController( unitViewPresenter._animation );

        EffectsController effectsController = new EffectsController();

        tempNavMeshAgent = unitViewPresenter.navMeshAgent;

        this.entityControllerSelect = entityControllerSelect;
        unitBehaviour = new BaseUnitBehaviour( getTarget, faction, unitViewPresenter, animationController );
        unitModel = new BaseUnit(unitCharacteristics, faction, effectsController, _UpdateCharacteristics, UpdateDeath, setUpdeteCharacteristicsDelegate, DeleteVisualEffect );
        unitView = new BaseUnitView( unitViewPresenter, Selected, GetDamage );
    }
Exemplo n.º 6
0
    private void ActivateSpell()
    {
        if ( (spellWithTarget && spellTarget == null) || (spellTarget != null && Vector3.Distance( spellTarget.transform.position, myViewPresenter.transform.position ) > spell.attackRange) ) {
            fsm.CallEvent( FiniteStateMachine.Events.TargetLost );
            return;
        }

        Vector3 tempPos = spellTargetPosition;
        Influence tempInfluence;

        UnitViewPresenter tempSpellTarget = spellTarget;
        spellTarget = null;
        if ( tempSpellTarget != null ) {

            tempPos = tempSpellTarget.transform.position;

            myViewPresenter.transform.LookAt( tempPos );

            animationController.AttackAnimation();

            tempInfluence = new Influence();
            tempInfluence.damage = 50;
            tempInfluence.healing = 0;
            tempInfluence.owner = myViewPresenter;

            tempInfluence.timeEffect = spell.effect;

            if ( tempSpellTarget.faction != myFaction ) {
                tempSpellTarget.GetDamage( tempInfluence );
                spell.cd = true;
            } else {
                fsm.CallEvent( FiniteStateMachine.Events.TargetLost );
                return;
            }

        } else {

            myViewPresenter.transform.LookAt( tempPos );

            animationController.AttackAnimation();

            tempInfluence = new Influence();
            tempInfluence.damage = 25;
            tempInfluence.healing = 0;
            tempInfluence.owner = myViewPresenter;

            tempInfluence.timeEffect = null;
            RaycastHit[] hit;
            hit = Physics.SphereCastAll( tempPos, spell.aoeRadius, Vector3.forward);

           GameObject tempEffect = (GameObject) GameObject.Instantiate( spell.effect.visualPrefab, tempPos + new Vector3( 0, 5.5f, 0 ), spell.effect.visualPrefab.transform.rotation);

            tempEffect.GetComponent<ParticleSystem>().Play();

            foreach ( var key in hit ) {
                UnitViewPresenter uvp;

                if ( key.transform.GetComponent<UnitViewPresenter>() ) {
                    uvp = key.transform.GetComponent<UnitViewPresenter>();

                    if ( uvp.faction != myFaction ) {
                        uvp.GetDamage( tempInfluence );
                    }

                    spell.cd = true;

                }
            }
        }

        Spell tempSpell = spell;

        Action temp = () => {
            tempSpell.cd = false;
        };

        SceneManager.Instance.CoroutineManager.InvokeAttack( temp, spell.cdTime );

        fsm.CallEvent( FiniteStateMachine.Events.TargetApproached );
    }
Exemplo n.º 7
0
 public void PlayerUseAbility( Spell spell, UnitViewPresenter spellTarget )
 {
     spellWithTarget = true;
     this.spellTarget = spellTarget;
     this.spell = spell;
     fsm.CallEvent( FiniteStateMachine.Events.ActivateSpell );
 }
Exemplo n.º 8
0
    private void SelectClick()
    {
        Ray ray = Camera.main.ScreenPointToRay( Input.mousePosition );
        RaycastHit[] hit;

        if ( (hit = Physics.RaycastAll( ray, Mathf.Infinity )).Length > 0 ) {

            foreach ( var key in hit ) {
                switch ( key.transform.gameObject.tag ) {
                    case "Build":
                        if ( cursorsType == CursorsType.Simple ) {
                            Deselect();
                            BaraksModel temp = key.transform.gameObject.GetComponent<BaraksModel>();
                            player.ShowBuildActionButtons( temp );
                            player.ShowBuildDescription( temp.buildLevel, temp.spawnUnitType, temp.baraksUnitConstructor[temp.buildLevel].trainingTime, temp.GetUpgradeCost() );
                            cursor.SetMoveCursor();
                        }
                        return;
                    case "Unit":
                        if ( cursorsType == CursorsType.TargetSpell ) {
                            currentTargetSpell( key.transform.gameObject.GetComponent<UnitViewPresenter>() );
                        } else if( cursorsType == CursorsType.Simple ) {
                            Deselect();
                            UnitViewPresenter[] temp = new UnitViewPresenter[1];
                            temp[0] = key.transform.gameObject.GetComponent<UnitViewPresenter>();
                            GetSelectableUnits( temp );
                            cursor.SetMoveCursor();
                        }
                        return;
                    case "Ground":
                        if ( cursorsType == CursorsType.PositionSpell ) {
                            currentPositionSpell( key.point );
                        } else {
                            Deselect();
                        }
                        return;
                }
            }
        }
    }
 protected void StopAttack()
 {
     animationController.IdleAnimation();
     targetViewPresenter = null;
     navMeshAgent.ResetPath();
 }
Exemplo n.º 10
0
    private UnitViewPresenter GetUnitTarget(Faction myFaction, UnitViewPresenter unit )
    {
        float distance = 0;

        UnitViewPresenter resUnitViewPresenter = null;

        List<BaseUnitController> tempBaseUnitControllers = new List<BaseUnitController>();

        BaseUnitController tempBaseUnitController;

        if ( myFaction == Faction.Blue ) {
            tempBaseUnitControllers = unitsControllersRed;
            tempBaseUnitController = unitsControllersBlue.Find( x => x.GetUnitViewPresenter() == unit );
        } else {
            tempBaseUnitControllers = unitsControllersBlue;
            tempBaseUnitController = unitsControllersRed.Find( x => x.GetUnitViewPresenter() == unit );
        }

        foreach ( var key in tempBaseUnitControllers ) {
            if ( !key.GetInvulnerability() ) {

                float tempDistance = Vector3.Distance( key.GetUnitViewPresenter().transform.position, unit.transform.position );

                if ( resUnitViewPresenter == null || tempDistance < distance ) {
                    resUnitViewPresenter = key.GetUnitViewPresenter();
                    distance = tempDistance;
                }
            }
        }

        if ( resUnitViewPresenter == null ) {
            if ( myFaction == Faction.Blue ) {
                tempBaseUnitController.MoveToPosition( blueMainPosition );
            } else {
                return redMainTarget;
            }
        }

        return resUnitViewPresenter;
    }
Exemplo n.º 11
0
 public virtual void StartMove()
 {
     HideTarget();
     playerTarget = null;
     targetViewPresenter = null;
     animationController.RunAnimation();
     navMeshAgent.ResetPath();
     navMeshAgent.SetDestination( targetPosition );
 }
Exemplo n.º 12
0
 public virtual void SetPlayerTarget( UnitViewPresenter unitViewPresenter )
 {
     if ( unitViewPresenter != playerTarget ) {
         playerTarget = unitViewPresenter;
         fsm.CallEvent( FiniteStateMachine.Events.TargetFound );
         if ( playerTarget != targetViewPresenter ) {
             HideTarget();
         }
     }
 }
Exemplo n.º 13
0
 public virtual void SetPlayerTarget( UnitViewPresenter unitViewPresenter )
 {
     unitBehaviour.SetPlayerTarget( unitViewPresenter );
 }
Exemplo n.º 14
0
 public BaseUnitView( UnitViewPresenter unitViewPresenter, BaseUnitController.SelectUnit selectUnit, BaseUnit.DamageDelegate damageDelegate )
 {
     this.unitViewPresenter = unitViewPresenter;
     unitViewPresenter.AddSelectDelegate( selectUnit );
     unitViewPresenter.AddDamageDelegate( damageDelegate );
 }
Exemplo n.º 15
0
 public HeroBehaviour( EntityController.GetTarget getTarget, EntityController.Faction faction, UnitViewPresenter myViewPresenter, AnimationController animationController )
     : base(getTarget, faction, myViewPresenter, animationController)
 {
     InitStateMachine();
 }
Exemplo n.º 16
0
    public virtual void UpdateFindTarget()
    {
        UnitViewPresenter tempTarget = GetTargetDelegate( myFaction, myViewPresenter );

        if ( playerTarget != null ) {
            tempTarget = playerTarget;
        }

        if ( tempTarget != targetViewPresenter ) {
            HideTarget();
            targetViewPresenter = tempTarget;
            if ( targetViewPresenter != null ) {
                ShowTarget();
                fsm.CallEvent( FiniteStateMachine.Events.TargetFound );
                //fsm.Fire( Trigger.TargetFound );
            }
        }

        if ( targetViewPresenter == null ) {
            fsm.CallEvent( FiniteStateMachine.Events.TargetLost );
        }
    }
Exemplo n.º 17
0
 private void StopSpellAttack()
 {
     animationController.IdleAnimation();
     spellTarget = null;
     spellWithTarget = false;
     navMeshAgent.ResetPath();
 }
Exemplo n.º 18
0
 public void SetTarget(UnitViewPresenter unit)
 {
     foreach ( var key in unitsControllersSelectedBlue ) {
         if ( unit.faction != key.GetUnitViewPresenter().faction) {
             key.SetPlayerTarget( unit );
         }
     }
 }