예제 #1
0
    // Token: 0x060022F6 RID: 8950 RVA: 0x0040C444 File Offset: 0x0040A644
    public override void Update(Soldier sam, ArmyGroup parent, float deltaTime)
    {
        Transform transform = sam.transform;
        Vector3   vector    = sam.SpreadPos - transform.position;

        if (vector != Vector3.zero)
        {
            Quaternion quaternion = Quaternion.LookRotation(vector);
            if (transform.rotation != quaternion)
            {
                transform.rotation = Quaternion.Slerp(transform.rotation, quaternion, 5f * deltaTime);
            }
        }
        FSMUnit.MoveSoldier(sam, sam.SpreadPos, parent.MoveSpeed * 1.3f * deltaTime);
        if (GameConstants.DistanceSquare(transform.position, sam.SpreadPos) <= 0.0001f)
        {
            sam.SpreadPos  = Vector3.zero;
            sam.SpreadMode = ESpreadMode.NotSpread;
            if (sam.Parent.Target.GroupKind == EGroupKind.CastleGate)
            {
                sam.FSMController = FSMManager.Instance.getState(EStateName.RANGE_FIGHT_WALL);
            }
            else
            {
                sam.FSMController = FSMManager.Instance.getState(EStateName.RANGE_FIGHT);
            }
        }
    }
예제 #2
0
 // Token: 0x060022E3 RID: 8931 RVA: 0x0040BB54 File Offset: 0x00409D54
 public override void Enter(Soldier sam)
 {
     if (sam.Parent.Target.GroupKind == EGroupKind.CastleGate)
     {
         bool flag = sam.Parent.GroupKind == EGroupKind.Infantry || sam.Parent.GroupKind == EGroupKind.Cavalry;
         if (flag)
         {
             sam.SpreadMode    = ESpreadMode.NotSpread;
             sam.FSMController = FSMManager.Instance.getState(EStateName.SPREAD);
         }
         else
         {
             if (sam.Parent.GroupKind == EGroupKind.Archer && sam.SpreadMode == ESpreadMode.Enable)
             {
                 Vector3 position = sam.transform.position;
                 float   x        = UnityEngine.Random.Range(position.x - 5f, position.x + 5f);
                 float   z        = UnityEngine.Random.Range(position.z - 5f, position.z + 5f);
                 sam.SpreadPos = new Vector3(x, 0f, z);
             }
             sam.FSMController = FSMManager.Instance.getState(EStateName.RANGE_FIGHT_WALL);
         }
     }
     else
     {
         if (sam.Target != null && sam.Target.Parent != sam.Parent.Target)
         {
             sam.Target = null;
         }
         if (sam.Target == null)
         {
             sam.Target = FSMUnit.ReallocTarget(sam, sam.Parent.Target);
         }
         bool flag2 = sam.Parent.GroupKind == EGroupKind.Infantry || sam.Parent.GroupKind == EGroupKind.Cavalry;
         if (flag2)
         {
             int num = (int)sam.Index / sam.Parent.RowCount;
             if (num != 0 && sam.SpreadMode == ESpreadMode.Enable)
             {
                 sam.SpreadMode    = ESpreadMode.NotSpread;
                 sam.FSMController = FSMManager.Instance.getState(EStateName.SPREAD);
             }
             else
             {
                 sam.ActionMode = EActionMode.Personal;
                 sam.PlayAnim(ESheetMeshAnim.moving, SAWrapMode.Loop, true, false, false);
             }
         }
         else
         {
             if (sam.Parent.GroupKind == EGroupKind.Archer && !this.pManager.bIsSiegeMode && sam.SpreadMode == ESpreadMode.Enable)
             {
                 Vector3 position2 = sam.transform.position;
                 float   x2        = UnityEngine.Random.Range(position2.x - 5f, position2.x + 5f);
                 float   z2        = UnityEngine.Random.Range(position2.z - 5f, position2.z + 5f);
                 sam.SpreadPos = new Vector3(x2, 0f, z2);
             }
             sam.FSMController = FSMManager.Instance.getState(EStateName.RANGE_FIGHT);
         }
     }
 }
예제 #3
0
파일: FSMIdle.cs 프로젝트: gsoec/lm-source
 // Token: 0x060022D2 RID: 8914 RVA: 0x0040B49C File Offset: 0x0040969C
 public override void Update(Soldier sam, ArmyGroup parent, float deltaTime)
 {
     if (sam.ActionMode == EActionMode.Personal)
     {
         Transform transform      = sam.transform;
         Vector3   transformPoint = parent.getTransformPoint((int)sam.Index);
         Vector3   vector         = transformPoint - transform.position;
         if (vector != Vector3.zero)
         {
             Quaternion to = Quaternion.LookRotation(vector);
             transform.rotation = Quaternion.Slerp(transform.rotation, to, 5f * deltaTime);
         }
         FSMUnit.MoveSoldier(sam, transformPoint, parent.MoveSpeed * 1.3f * deltaTime);
         if (GameConstants.DistanceSquare(transform.position, transformPoint) <= 0.0001f)
         {
             sam.ActionMode = EActionMode.Team;
             sam.PlayAnim(ESheetMeshAnim.idle, SAWrapMode.Loop, true, false, false);
             sam.NotifyingParent(0);
         }
     }
     else if (sam.transform.rotation != parent.groupRoot.rotation)
     {
         sam.transform.rotation = Quaternion.Slerp(sam.transform.rotation, parent.groupRoot.rotation, 5f * deltaTime);
     }
 }
예제 #4
0
    // Token: 0x060022E7 RID: 8935 RVA: 0x0040BF48 File Offset: 0x0040A148
    public override void Update(Soldier sam, ArmyGroup parent, float deltaTime)
    {
        if (parent.Target != null && parent.Target.GroupKind == EGroupKind.CastleGate)
        {
            return;
        }
        if (sam.Target == null)
        {
            sam.FSMController = FSMManager.Instance.getState(EStateName.LOSETARGET);
        }
        if (sam.fightTimer > 0f)
        {
            sam.fightTimer -= deltaTime;
            if (sam.fightTimer <= 0f)
            {
                sam.PlayAnim(ESheetMeshAnim.attack, SAWrapMode.Default, true, false, false);
                sam.fightTimer = ((!sam.IsHeroSoldier) ? 1.5f : 3f);
            }
        }
        Transform transform  = sam.Target.transform;
        Transform transform2 = sam.transform;

        if (parent.Target.CurHP <= 0)
        {
            sam.FSMController = FSMManager.Instance.getState(EStateName.IDLE);
        }
        else if (sam.Target.CurFSM == EStateName.DIE)
        {
            sam.ResetTarget(false);
            sam.FSMController = FSMManager.Instance.getState(EStateName.TRYFIGHT);
        }
        else if (GameConstants.DistanceSquare(sam.LastTargetPos, transform.position) <= 0.0001f)
        {
            FSMUnit.CheckDirectionToTarget(sam, deltaTime);
            if (sam.CurAnim == ESheetMeshAnim.attack && sam.LastAnimTime() < 0.1f && sam.CurAnimTime() >= 0.1f)
            {
                ushort num = 1;
                if (parent.GroupKind == EGroupKind.Catapults)
                {
                    num = 2006;
                }
                if (parent.GroupKind == EGroupKind.Archer && parent.Tier == 4)
                {
                    num = 2005;
                }
                sam.Target.ParticleFlag = ((num <= sam.Target.ParticleFlag) ? sam.Target.ParticleFlag : num);
            }
        }
        else
        {
            float num2 = sam.AttackRadius + sam.Target.Radius;
            if (GameConstants.DistanceSquare(transform2.position, transform.position) > num2 * num2)
            {
                sam.FSMController = FSMManager.Instance.getState(EStateName.TRYFIGHT);
            }
        }
    }
예제 #5
0
    // Token: 0x06002308 RID: 8968 RVA: 0x0040CDB4 File Offset: 0x0040AFB4
    public override void Update(Soldier sam, ArmyGroup parent, float deltaTime)
    {
        if (sam.Flag == 0)
        {
            sam.Timer -= deltaTime;
            if (sam.Timer > 0f)
            {
                return;
            }
            sam.Flag = 1;
            sam.PlayAnim(ESheetMeshAnim.moving, SAWrapMode.Loop, false, false, false);
        }
        Vector3   vector    = Vector3.zero;
        Transform transform = sam.transform;

        if (sam.Flag == 1)
        {
            vector = FSMUnit.WALL_BACK;
        }
        else
        {
            if (sam.Flag != 2)
            {
                sam.Flag = 0;
                if (FSMManager.Instance.bIsBattleOver && DataManager.Instance.War_LordCapture != 0)
                {
                    sam.FSMController = FSMManager.Instance.getState(EStateName.GO_CAPTIVING);
                }
                else
                {
                    sam.FSMController = FSMManager.Instance.getState(EStateName.IDLE_FASTRUN);
                }
                return;
            }
            vector = FSMUnit.WALL_FRONT;
        }
        Vector3 vector2 = vector - transform.position;

        if (vector2 != Vector3.zero)
        {
            Quaternion quaternion = Quaternion.LookRotation(vector2);
            if (transform.rotation != quaternion)
            {
                transform.rotation = Quaternion.Slerp(transform.rotation, quaternion, 5f * deltaTime);
            }
        }
        FSMUnit.MoveSoldier(sam, vector, parent.MoveSpeed * deltaTime * 2.5f);
        if (GameConstants.DistanceSquare(transform.position, vector) <= 0.0001f)
        {
            sam.Flag += 1;
        }
    }
예제 #6
0
파일: FSMDying.cs 프로젝트: gsoec/lm-source
 // Token: 0x060022F9 RID: 8953 RVA: 0x0040C830 File Offset: 0x0040AA30
 public override void Update(Soldier sam, ArmyGroup parent, float deltaTime)
 {
     if (sam.Index == 255)
     {
         Transform transform = sam.transform;
         Vector3   vector    = sam.SpreadPos - transform.position;
         if (vector != Vector3.zero)
         {
             transform.rotation = Quaternion.LookRotation(vector);
         }
         FSMUnit.MoveSoldier(sam, sam.SpreadPos, sam.DyingValue * deltaTime);
         if (sam.DieState == 1 && (sam.SpreadPos == Vector3.zero || GameConstants.DistanceSquare(transform.position, sam.SpreadPos) <= 0.0001f))
         {
             sam.FSMController = FSMManager.Instance.getState(EStateName.DIE);
         }
     }
     else if (sam.Flag != 0)
     {
         float   fightTimer    = sam.fightTimer;
         float   inverseLength = 1f / fightTimer;
         Vector3 center        = (sam.SpreadPos + sam.LastTargetPos) * 0.5f;
         center.y = sam.DyingValue;
         sam.transform.position = GameConstants.QuadraticBezierCurves(sam.LastTargetPos, center, sam.SpreadPos, inverseLength, sam.Timer);
         sam.Timer += deltaTime;
         if (sam.Timer >= fightTimer)
         {
             sam.transform.position = sam.SpreadPos;
             sam.SpreadPos          = Vector3.zero;
             sam.FSMController      = FSMManager.Instance.getState(EStateName.DIE);
             sam.PlayAnim(ESheetMeshAnim.die, SAWrapMode.Once, true, false, false);
             sam.Flag = 0;
         }
     }
     else
     {
         Transform transform2 = sam.transform;
         Vector3   vector2    = sam.SpreadPos - transform2.position;
         if (vector2 != Vector3.zero)
         {
             transform2.rotation = Quaternion.LookRotation(vector2);
             FSMUnit.MoveSoldier(sam, sam.SpreadPos, sam.DyingValue * deltaTime);
         }
         if (sam.DieState == 1 && (sam.SpreadPos == Vector3.zero || GameConstants.DistanceSquare(transform2.position, sam.SpreadPos) <= 0.0001f))
         {
             sam.FSMController = FSMManager.Instance.getState(EStateName.DIE);
         }
     }
 }
예제 #7
0
    // Token: 0x0600231A RID: 8986 RVA: 0x0040D5FC File Offset: 0x0040B7FC
    public override void Update(Soldier sam, ArmyGroup parent, float deltaTime)
    {
        Transform transform = sam.transform;
        Vector3   vector    = sam.SpreadPos - transform.position;

        if (vector != Vector3.zero)
        {
            Quaternion quaternion = Quaternion.LookRotation(vector);
            if (quaternion != transform.rotation)
            {
                transform.rotation = Quaternion.Slerp(transform.rotation, quaternion, 5f * deltaTime);
            }
        }
        float num = (parent != null) ? parent.MoveSpeed : 4.5f;

        FSMUnit.MoveSoldier(sam, sam.SpreadPos, num * 2.5f * deltaTime * 1.5f);
    }
예제 #8
0
 // Token: 0x060022F0 RID: 8944 RVA: 0x0040C2E8 File Offset: 0x0040A4E8
 public override void Update(Soldier sam, ArmyGroup parent, float deltaTime)
 {
     if (!FSMUnit.CheckTargetActiving(sam))
     {
         sam.Target = FSMUnit.ReallocTarget(sam, parent.Target);
     }
     FSMUnit.CheckDirectionToTarget(sam, deltaTime);
     if ((parent.OnceFlag & 1u) != 0u)
     {
         if (sam.Target.CurFSM == EStateName.DYING || sam.Target.CurFSM == EStateName.DIE)
         {
             sam.Target = null;
             sam.Target = FSMUnit.ReallocTarget(sam, parent.Target);
         }
         sam.PlayAnim(ESheetMeshAnim.attack, SAWrapMode.Default, false, false, false);
     }
 }
예제 #9
0
 // Token: 0x0600231D RID: 8989 RVA: 0x0040D734 File Offset: 0x0040B934
 public override void Update(Soldier sam, ArmyGroup parent, float deltaTime)
 {
     if (sam.Flag == 1)
     {
         return;
     }
     if (sam.Flag == 2)
     {
         Transform transform = sam.transform;
         Vector3   vector    = Camera.main.transform.position - transform.position;
         vector.y = 0f;
         if (vector != Vector3.zero)
         {
             Quaternion quaternion = Quaternion.LookRotation(vector);
             if (quaternion != transform.rotation)
             {
                 transform.rotation = Quaternion.Slerp(transform.rotation, quaternion, 5f * deltaTime);
             }
             else
             {
                 sam.Flag = 1;
             }
         }
     }
     else
     {
         Transform transform2 = sam.transform;
         Vector3   vector2    = sam.SpreadPos - transform2.position;
         if (vector2 != Vector3.zero)
         {
             Quaternion quaternion2 = Quaternion.LookRotation(vector2);
             if (quaternion2 != transform2.rotation)
             {
                 transform2.rotation = Quaternion.Slerp(transform2.rotation, quaternion2, 5f * deltaTime);
             }
         }
         float num = (parent != null) ? parent.MoveSpeed : 4.5f;
         FSMUnit.MoveSoldier(sam, sam.SpreadPos, num * 2.5f * deltaTime * 1.5f);
         if (GameConstants.DistanceSquare(transform2.position, sam.SpreadPos) <= 0.0001f)
         {
             sam.Flag = 2;
             sam.PlayAnim(ESheetMeshAnim.victory, SAWrapMode.Loop, true, false, false);
         }
     }
 }
예제 #10
0
    // Token: 0x060022E4 RID: 8932 RVA: 0x0040BDD4 File Offset: 0x00409FD4
    public override void Update(Soldier sam, ArmyGroup parent, float deltaTime)
    {
        if (sam.Target == null || sam.Target.FSMController == null || sam.Target.CurFSM == EStateName.DIE || sam.Target.CurFSM == EStateName.DYING)
        {
            sam.FSMController = FSMManager.Instance.getState(EStateName.LOSETARGET);
        }
        Transform transform  = sam.Target.transform;
        Transform transform2 = sam.transform;

        FSMUnit.CheckDirectionToTarget(sam, deltaTime);
        FSMUnit.MoveSoldier(sam, transform.position, parent.MoveSpeed * 1.3f * deltaTime);
        float num = sam.AttackRadius + sam.Target.Radius;

        if (GameConstants.DistanceSquare(transform2.position, transform.position) < num * num)
        {
            sam.FSMController = FSMManager.Instance.getState(EStateName.MELEE_FIGHT);
        }
    }
예제 #11
0
    // Token: 0x060022DB RID: 8923 RVA: 0x0040B780 File Offset: 0x00409980
    public override void Update(Soldier sam, ArmyGroup parent, float deltaTime)
    {
        if (sam.Flag != 0)
        {
            sam.Timer -= deltaTime;
            if (sam.Timer > 0f)
            {
                return;
            }
            sam.Flag = 0;
            sam.PlayAnim(ESheetMeshAnim.moving, SAWrapMode.Loop, false, false, false);
        }
        Vector3   transformPoint = parent.getTransformPoint((int)sam.Index);
        Transform transform      = sam.transform;

        if (sam.ActionMode == EActionMode.Team)
        {
            transform.position = transformPoint;
            if (transform.rotation != parent.m_Direction)
            {
                transform.rotation = Quaternion.Slerp(transform.rotation, parent.m_Direction, 5f * deltaTime);
            }
        }
        else
        {
            Vector3 vector = transformPoint - transform.position;
            if (vector != Vector3.zero)
            {
                Quaternion quaternion = Quaternion.LookRotation(vector);
                if (transform.rotation != quaternion)
                {
                    transform.rotation = Quaternion.Slerp(transform.rotation, quaternion, 5f * deltaTime);
                }
            }
            FSMUnit.MoveSoldier(sam, transformPoint, parent.MoveSpeed * deltaTime);
            if (GameConstants.DistanceSquare(transform.position, transformPoint) <= 0.0001f)
            {
                sam.ActionMode = EActionMode.Team;
            }
        }
    }
예제 #12
0
 // Token: 0x06002311 RID: 8977 RVA: 0x0040D2A4 File Offset: 0x0040B4A4
 public override void Update(Soldier sam, ArmyGroup parent, float deltaTime)
 {
     if (sam.CaptiveFlag == 0)
     {
         return;
     }
     if (sam.CaptiveFlag == 1)
     {
         Transform transform = sam.transform;
         Vector3   vector    = sam.CaptivePos - transform.position;
         if (vector != Vector3.zero)
         {
             Quaternion to = Quaternion.LookRotation(vector);
             transform.rotation = Quaternion.Slerp(transform.rotation, to, 5f * deltaTime);
         }
         FSMUnit.MoveSoldier(sam, sam.CaptivePos, parent.MoveSpeed * 2.5f * deltaTime);
         if (GameConstants.DistanceSquare(transform.position, sam.CaptivePos) <= 0.0001f)
         {
             sam.CaptiveFlag = 2;
             sam.PlayAnim(ESheetMeshAnim.victory, SAWrapMode.Loop, true, false, false);
             FSMManager.Instance.CaptivingCount++;
             sam.CaptivePos = sam.Parent.SoldierTarget.transform.position - transform.position;
         }
     }
     else if (sam.CaptiveFlag == 2)
     {
         Transform transform2 = sam.transform;
         if (sam.CaptivePos != Vector3.zero)
         {
             Quaternion quaternion = Quaternion.LookRotation(sam.CaptivePos);
             if (quaternion != transform2.rotation)
             {
                 transform2.rotation = Quaternion.Slerp(transform2.rotation, quaternion, 5f * deltaTime);
             }
             else
             {
                 sam.CaptiveFlag = 0;
             }
         }
     }
 }
예제 #13
0
    // Token: 0x060022AB RID: 8875 RVA: 0x00409820 File Offset: 0x00407A20
    public virtual void Update(float deltaTime, float moveDeltaTime)
    {
        if (this.SoldierCount == 0)
        {
            if (this.heroSoldier != null)
            {
                this.heroSoldier.FSMController.Update(this.heroSoldier, this, deltaTime);
            }
            return;
        }
        this.checkMove(moveDeltaTime);
        FSMUnit fsmunit = null;

        if (this.ForceEnterFSM || this.lastState != this.m_State)
        {
            EStateName name = ArmyGroup.m_FSMMap[this.m_State];
            fsmunit = ArmyGroup.FSMMgr.getState(name);
            if (this.m_State == ArmyGroup.EGROUPSTATE.MOVE_OUTOF_TOWN || this.m_State == ArmyGroup.EGROUPSTATE.JUMP_FROM_WALL)
            {
                this.bAttackMode = true;
            }
            else if (((WarManager.IsNpcModeEnable && this.Side != 0) || !this.hasLord) && (this.m_State == ArmyGroup.EGROUPSTATE.ATTACKER_RUN_AWAY || this.m_State == ArmyGroup.EGROUPSTATE.DEFENSER_RUN_AWAY))
            {
                this.LordRunAway(this.m_State == ArmyGroup.EGROUPSTATE.ATTACKER_RUN_AWAY);
            }
            this.ForceEnterFSM = false;
        }
        int num = this.SoldierCountDefault - this.CurrentSoldierCount;

        if (num != this.DeadCount)
        {
            int num2 = num - this.DeadCount;
            if (num2 > 5)
            {
            }
            this.DeadCount = num;
        }
        for (int i = 0; i < this.SoldierCount; i++)
        {
            if (i >= this.CurrentSoldierCount)
            {
                EStateName curFSM = this.soldiers[i].CurFSM;
                if (curFSM != EStateName.DIE && curFSM != EStateName.DYING)
                {
                    this.soldiers[i].Flag = 2;
                    if (this.AttackBy != null)
                    {
                        this.soldiers[i].Target = ((this.AttackBy.heroSoldier == null) ? this.AttackBy.soldiers[0] : this.AttackBy.heroSoldier);
                    }
                    else
                    {
                        this.soldiers[i].Target = null;
                    }
                    this.soldiers[i].FSMController = ArmyGroup.FSMMgr.getState(EStateName.DYING);
                }
            }
            else if (fsmunit != null)
            {
                this.soldiers[i].FSMController = fsmunit;
            }
            this.soldiers[i].FSMController.Update(this.soldiers[i], this, deltaTime);
            this.soldiers[i].Update(deltaTime);
        }
        if (this.heroSoldier != null)
        {
            if (!this.bAttackMode && this.hasLord)
            {
                this.SiegeModeDefenserLordRun(deltaTime);
            }
            else
            {
                if (this.CurrentSoldierCount != 0 && fsmunit != null && this.m_State != ArmyGroup.EGROUPSTATE.ATTACKER_RUN_AWAY && this.m_State != ArmyGroup.EGROUPSTATE.DEFENSER_RUN_AWAY)
                {
                    if (this.heroSoldier.IsLord && this.m_State == ArmyGroup.EGROUPSTATE.MOVE_OUTOF_TOWN)
                    {
                        this.heroSoldier.FSMController = FSMManager.Instance.getState(EStateName.JUMP_FROM_WALL);
                    }
                    else
                    {
                        this.heroSoldier.FSMController = fsmunit;
                    }
                }
                this.heroSoldier.FSMController.Update(this.heroSoldier, this, deltaTime);
                this.heroSoldier.Update(deltaTime);
            }
        }
        if (this.bInsideSkill)
        {
            if (this.heroSoldier != null)
            {
                ((Lord)this.heroSoldier).bExtraScaleWork = false;
            }
            this.bInsideSkill = false;
        }
        this.OnceFlag  = 0u;
        this.AttackBy  = null;
        this.lastState = this.m_State;
    }