コード例 #1
0
    void Start()
    {
        currentHealth = mobStats.maxHealth;
        changeEvery   = Random.Range(2f, 5f);

        sceneData = new MobSceneData();
        Supervisor.self.initMobSceneData(this, sceneData);
    }
コード例 #2
0
 public void initMobSceneData(Mob caller, MobSceneData sceneData)
 {
     sceneData.players = currentSceneState.players;
     if (caller.mobStats.team == 1)
     {
         sceneData.allies  = currentSceneState.redTeam;
         sceneData.enemies = currentSceneState.blueTeam;
     }
     else
     {
         sceneData.allies  = currentSceneState.blueTeam;
         sceneData.enemies = currentSceneState.redTeam;
     }
 }
コード例 #3
0
 public static void chooseTarget(Mob self, MobStats selfStats, MobSceneData sceneData)
 {
     if (selfStats.team != Supervisor.self.playerTeam && chance(0.25f))
     {
         // select some player
         self.target = randomFrom(Supervisor.currentSceneState.players);
     }
     else
     {
         // select enemy
         if (selfStats.team == 1)
         {
             self.target = randomFrom(Supervisor.currentSceneState.blueTeam);
         }
         else
         {
             self.target = randomFrom(Supervisor.currentSceneState.redTeam);
         }
     }
 }
コード例 #4
0
 public abstract void doActions(float deltaTime, GameObject self, MobStats selfStats, MobSceneData sceneData);
コード例 #5
0
    public override void doActions(float deltaTime, GameObject self, MobStats selfStats, MobSceneData sceneData)
    {
        Mob mob = self.GetComponent <Mob>();

        if (mob.target == null)
        {
            Supervisor.chooseTarget(mob, selfStats, sceneData);
        }

        targetApproachAndAttack(deltaTime, mob, selfStats, sceneData);
    }
コード例 #6
0
    public void targetApproachAndAttack(float deltaTime, Mob self, MobStats selfStats, MobSceneData sceneData)
    {
        if (self.target == null)
        {
            return;
        }

        Vector3 targetPos = self.target.transform.position;
        float   dist      = Vector3.Distance(targetPos, self.transform.position);

        if (dist > 0.9f * selfStats.attackRadius)
        {
            Vector3 dir = targetPos - self.transform.position;
            dir = Vector3.Normalize(dir);
            self.transform.position += dir * selfStats.moveSpeed * deltaTime;
        }
        else
        {
            if (self.canAttack(selfStats))
            {
                self.attack(self.gameObject, selfStats);
            }
        }
    }