Exemple #1
0
        public void Initialize(Town town, long id, FixVector3 pos, bool simulate)
        {
            type = LogicUnitType.Demolisher;

            owner = DataManager.GetInstance().GetPlayerId() == town.id;

            this.id            = id;
            this.town          = town;
            mark               = town.mark;
            position           = pos;
            transform.position = pos.vector3;
            bornPosition       = pos;

            InitializedData();

            pathAgent.SetPathType(moveMode);
            pathAgent.SetPosition(position);

            InitializeOwner(simulate);

            debuffHandler = new DebuffHandler();
            buffHandler   = new BuffHandler();

            fsmIdle        = new DemolisherFsmIdle(this);
            fsmWalk        = new DemolisherFsmWalk(this);
            fsmChase       = new DemolisherFsmChase(this);
            fsmFight       = new DemolisherFsmFight(this);
            fsmDying       = new DemolisherFsmDying(this);
            fsmDead        = new DemolisherFsmDead(this);
            fsmPlaceHolder = new DemolisherFsmPlaceHolder(this);
            currentFsm     = fsmIdle;
            ChangeState(DemolisherState.IDLE, fsmIdle);

            DebugUtils.Log(DebugUtils.Type.AI_Demolisher, string.Format(" Initialize demolisher, born position = {0} ", pos));
        }
Exemple #2
0
        public void Initialize(long id, NpcData proto, FixVector3 p, FixVector3 r)
        {
            this.id = id;

            type = LogicUnitType.NPC;

            position = p;

            transform.position = p.vector3;
            transform.rotation = Quaternion.Euler(r.vector3);

            brithPosition  = p;
            brithDirection = r;
            hurtType       = AttackPropertyType.PhysicalAttack;

            npcProto       = proto;
            iconId         = -1;
            metaId         = proto.ID;
            modelId        = proto.ModelID;
            modelRadius    = ConvertUtils.ToLogicInt(proto.ModelRadius);
            npcType        = (NpcType)proto.NPCType;
            attackType     = (NpcAttackType)proto.StandardAttack;
            rebornInterval = ConvertUtils.ToLogicInt(proto.RebornInterval);
            physicasAttack = (int)proto.PhysicsAttack;
            armor          = (int)proto.Armor;
            magicResist    = (int)proto.MagicResist;
            speedFactor    = ConvertUtils.ToLogicInt(proto.Speed);
            healthRegen    = proto.HealthRegen;

            maxHp            = proto.Health;
            chaseArea        = ConvertUtils.ToLogicInt(proto.TargetDetectRange);
            maxChaseDistance = ConvertUtils.ToLogicInt(proto.MaxChaseDistance);
            emberOutPut      = proto.EmberOutPut;
            projectileId     = proto.ProjectileId;
            attackRange      = ConvertUtils.ToLogicInt(proto.AttackRange);
            killReward       = proto.KillReward;
            attackDuration   = ConvertUtils.ToLogicInt(proto.AttackDuration);
            attackHitTime    = ConvertUtils.ToLogicInt(proto.AttackHitDuration);
            fightInterval    = 1;

            hp     = maxHp;
            damage = physicasAttack;
            healthRecoverInterval = GameConstants.HP_RECOVERY_INTERVAL_MILLISECOND;

            InitializeState();
            InitializePathAgent();

            debuffHandler = new DebuffHandler();
            buffHandler   = new BuffHandler();

            state      = NpcState.IDLE;
            currentFsm = fsmIdle;
        }
Exemple #3
0
        public override void Attach(LogicUnit g, LogicUnit t)
        {
            DebugUtils.Log(DebugUtils.Type.AI_AttributeEffect, string.Format("{0} {1} has been attached a {2} {3} {4} to {5} mark unit {6}", g.type, g.id, type, attributeAffectType, metaId, t.mark, t.id));
            state = AttributeEffectState.StartRelease;

            giver = g;
            taker = t;
            // owner will always be taker...
            owner = taker;

            if (t.type == LogicUnitType.Soldier)
            {
                Soldier s = (Soldier)taker;
                ownerDebuff = s.debuffHandler;
            }
            else if (t.type == LogicUnitType.NPC)
            {
                Npc n = (Npc)taker;
                ownerDebuff = n.debuffHandler;
            }
            else if (t.type == LogicUnitType.Demolisher)
            {
                Demolisher d = (Demolisher)taker;
                ownerDebuff = d.debuffHandler;
            }
            else if (t.type == LogicUnitType.CrystalCar)
            {
                CrystalCar c = (CrystalCar)taker;
                ownerDebuff = c.debuffHandler;
            }
            else
            {
                DebugUtils.LogWarning(DebugUtils.Type.AI_AttributeEffect, string.Format("{0} {1} can't handle {2} now!", t.type, t.id, attributeAffectType));
            }

            if (ownerDebuff != null && effectResId != 0)
            {
                RenderMessage rm = new RenderMessage();
                rm.type    = RenderMessage.Type.AttachAttributeEffect;
                rm.ownerId = id;
                rm.arguments.Add("HolderType", (int)t.type);
                rm.arguments.Add("HolderId", t.id);
                rm.arguments.Add("resId", effectResId);
                rm.arguments.Add("bindPointName", effectBindPoint);

                PostRenderMessage(rm);
            }
        }
Exemple #4
0
        public void Initialize(Town town, long id, FixVector3 pos, bool simulate)
        {
            type = LogicUnitType.CrystalCar;

            this.id            = id;
            this.town          = town;
            mark               = town.mark;
            position           = pos;
            transform.position = pos.vector3;
            bornPosition       = pos;

            InitializedData();

            if (pathAgent != null)
            {
                pathAgent.SetPathType(moveMode);
                pathAgent.SetPosition(position);
            }

            InitializeOwner(simulate);

            debuffHandler = new DebuffHandler();
            buffHandler   = new BuffHandler();

            fsmIdle        = new CrystalCarFsmIdle(this);
            fsmWalk        = new CrystalCarFsmWalk(this);
            fsmChase       = new CrystalCarFsmChase(this);
            fsmMining      = new CrystalCarFsmMining(this);
            fsmDying       = new CrystalCarFsmDying(this);
            fsmDead        = new CrystalCarFsmDead(this);
            fsmPlaceHolder = new CrystalCarFsmPlaceHolder(this);
            currentFsm     = fsmIdle;
            ChangeState(CrystalCarState.IDLE, fsmIdle);

            DebugUtils.Log(DebugUtils.Type.AI_CrystalCar, string.Format(" Initialize crystal car, born position = {0} ", pos));
        }