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(); }
public void GetSelectableUnits( UnitViewPresenter[] array) { if ( array.Length > 0 ) { Deselect(); cursor.SetMoveCursor(); foreach ( var key in array ) { key.GetComponent<UnitViewPresenter>().Select(); } } }
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; }
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 ); }
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 ); }
public void PlayerUseAbility( Spell spell, UnitViewPresenter spellTarget ) { spellWithTarget = true; this.spellTarget = spellTarget; this.spell = spell; fsm.CallEvent( FiniteStateMachine.Events.ActivateSpell ); }
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(); }
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; }
public virtual void StartMove() { HideTarget(); playerTarget = null; targetViewPresenter = null; animationController.RunAnimation(); navMeshAgent.ResetPath(); navMeshAgent.SetDestination( targetPosition ); }
public virtual void SetPlayerTarget( UnitViewPresenter unitViewPresenter ) { if ( unitViewPresenter != playerTarget ) { playerTarget = unitViewPresenter; fsm.CallEvent( FiniteStateMachine.Events.TargetFound ); if ( playerTarget != targetViewPresenter ) { HideTarget(); } } }
public virtual void SetPlayerTarget( UnitViewPresenter unitViewPresenter ) { unitBehaviour.SetPlayerTarget( unitViewPresenter ); }
public BaseUnitView( UnitViewPresenter unitViewPresenter, BaseUnitController.SelectUnit selectUnit, BaseUnit.DamageDelegate damageDelegate ) { this.unitViewPresenter = unitViewPresenter; unitViewPresenter.AddSelectDelegate( selectUnit ); unitViewPresenter.AddDamageDelegate( damageDelegate ); }
public HeroBehaviour( EntityController.GetTarget getTarget, EntityController.Faction faction, UnitViewPresenter myViewPresenter, AnimationController animationController ) : base(getTarget, faction, myViewPresenter, animationController) { InitStateMachine(); }
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 ); } }
private void StopSpellAttack() { animationController.IdleAnimation(); spellTarget = null; spellWithTarget = false; navMeshAgent.ResetPath(); }
public void SetTarget(UnitViewPresenter unit) { foreach ( var key in unitsControllersSelectedBlue ) { if ( unit.faction != key.GetUnitViewPresenter().faction) { key.SetPlayerTarget( unit ); } } }