Exemple #1
0
 public void SetUpBehaviour(GameEntity entity, EC_Movement movement)
 {
     this.entity   = entity;
     this.movement = movement;
     nextScanTime  = Time.time + UnityEngine.Random.Range(0, scanInterval);
     AssignToIdle();
 }
Exemple #2
0
    public MeleeAttackBehaviour(GameEntity entity, Transform transform) : base(entity, transform)
    {
        movement = entity.movement;
        combat   = entity.combat;
        sensing  = entity.sensing;
        unitAI   = entity.unitAI;

        nextUpdateDestinationTime = Random.Range(0, updateDestinationInterval);
    }
Exemple #3
0
 public void SetUpBehaviour(GameEntity entity, EC_Movement movement)
 {
     this.entity   = entity;
     this.movement = movement;
     if (positionToWanderAround == null)
     {
         positionToWanderAround = entity.transform;
     }
 }
Exemple #4
0
    /*enum MeleeFighterState
     * {
     *  TooFar,
     *  TooNear,
     *  InMeleeDistance
     * }
     *
     * MeleeFighterState state;*/

    protected override void Update()
    {
        if (Time.time > nextDistanceCheckTime)
        {
            nextDistanceCheckTime = Time.time + distanceCheckingInterval;

            myWidth    = entity.width;
            enemyWidth = enemySensing.nearestEnemy.width;

            Vector3 nearestEnemyPosition = enemySensing.nearestEnemy.transform.position;
            Vector3 myPosition           = entity.transform.position;

            float   widthFactor    = myWidth + enemyWidth; //multiply the resulting distanceVectorBythisFactor to also use width
            Vector3 distanceVector = nearestEnemyPosition - myPosition;
            //float distanceToEnemySquared = (distanceVector - distanceVector.normalized * widthFactor).sqrMagnitude;
            float distanceToEnemy = (distanceVector - distanceVector.normalized * widthFactor).magnitude;

            //if the enemy is moving, we move to the position he will be at the time we arrive
            EC_Movement enemyMovement = enemySensing.nearestEnemy.GetComponent <EC_Movement>();


            if (enemyMovement.IsMoving())
            {
                //heuristically calculae future position
                //1. how long will it take for me to reach the enemy?
                float timeToReachEnemy = distanceToEnemy / movement.GetMaxSpeed();
                //2. where will the enemy be after this time
                Vector3 futurePosition = nearestEnemyPosition + enemyMovement.GetCurrentVelocity() * timeToReachEnemy;


                movement.MoveTo(futurePosition);
            }
            else
            {
                movement.MoveTo(nearestEnemyPosition + (myPosition - nearestEnemyPosition).normalized * (perfectMeleeDistance + myWidth + enemyWidth));
            }

            if ((nearestEnemyPosition - myPosition).sqrMagnitude > maxMeleeDistance)
            {
                inRange = false;
                movement.StopLookAt();
            }
            else
            {
                inRange = true;
                movement.LookAt(enemySensing.nearestEnemy.transform);
            }
        }

        if (inRange)
        {
            if (weapon.CanAttack())
            {
                weapon.Attack();
            }
        }
    }
Exemple #5
0
    public void SetUpBehaviour(GameEntity entity, EC_Movement movement, EC_MissileWeapon weapon)
    {
        this.entity   = entity;
        this.movement = movement;
        this.weapon   = weapon;

        nextDistanceCheckTime = UnityEngine.Random.Range(0, distanceCheckingInterval);

        maxShootingDistance *= maxShootingDistance;
    }
Exemple #6
0
    public void SetUpBehaviour(GameEntity entity, EC_Movement movement, EC_ScanForEnemyUnits enemySensing, EC_MeleeWeapon weapon)
    {
        this.entity       = entity;
        this.movement     = movement;
        this.enemySensing = enemySensing;
        this.weapon       = weapon;

        nextDistanceCheckTime = UnityEngine.Random.Range(0, distanceCheckingInterval);
        maxMeleeDistance     *= maxMeleeDistance;
    }
Exemple #7
0
 void Start()
 {
     if (playerEntity != null)
     {
         health        = playerEntity.GetComponent <EC_Health>();
         movement      = playerEntity.GetComponent <EC_Movement>();
         combat        = playerEntity.GetComponent <EC_Combat>();
         unitAnimation = playerEntity.GetComponent <EC_UnitAnimation>();
         unitAI        = playerEntity.GetComponent <EC_UnitAI>();
     }
 }
    public override void SetUpEntityComponent(GameEntity entity)
    {
        base.SetUpEntityComponent(entity);

        unitAnimation = entity.unitAnimation;
        health        = entity.health;
        movement      = entity.movement;
        myTransform   = entity.myTransform;
        myCollider    = entity.GetComponent <Collider>();

        gizmoColor = myTransform.GetChild(0).GetChild(0).GetComponent <SkinnedMeshRenderer>().material.color;
    }
 public void AimAt(GameEntity target)
 {
     aiming               = true;
     currentTarget        = target;
     currentEnemyMovement = target.GetComponent <EC_Movement>();
     if (currentEnemyMovement != null)
     {
         hasMovement = true;
     }
     else
     {
         hasMovement = false;
     }
 }
    protected override void Start()
    {
        sensing          = GetComponent <EC_Sensing>();
        movement         = GetComponent <EC_Movement>();
        playerController = GetComponent <EC_PlayerController>();
        fishieAI         = GetComponent <EC_FishieAI>();
        ressources       = GetComponent <EC_Ressources>();
        actions          = GetComponent <EC_Actions>();

        //setup all attached components
        if (playerController != null)
        {
            components = new GameEntityComponent[] { sensing, movement, actions, ressources, playerController }
        }
        ;
        else if (fishieAI != null)
        {
            components = new GameEntityComponent[] { sensing, movement, actions, ressources, fishieAI }
        }
        ;

        base.Start();
    }
}
Exemple #11
0
 public override void SetUpEntityComponent(GameEntity entity)
 {
     base.SetUpEntityComponent(entity);
     ressources = (entity as Fishie).ressources;
     movement   = (entity as Fishie).movement;
 }
Exemple #12
0
 public void SetUpBehaviour(GameEntity entity, EC_Movement movement, EC_ScanForEnemyUnits sensing)
 {
     this.entity   = entity;
     this.movement = movement;
     this.sensing  = sensing;
 }