Beispiel #1
0
    public override CharacterAttr AddCharacterAttr()
    {
        CharacterBaseAttr baseAttr = FactoryManager.AttrFactory.GetCharacterBaseAttr(t);
        SoldierAttr       attr     = new SoldierAttr(new SoldierAttrStrategy(), baseAttr, lv);

        return(attr);
    }
    //  執行
    public override void Execute()
    {
        // 建立Soldier
        ICharacterFactory Factory = PBDFactory.GetCharacterFactory();
        ISoldier          Soldier = Factory.CreateSoldier(m_emSoldier, m_emWeapon, m_Lv, m_Position);

        // 依機率產生前輟能力
        int Rate   = UnityEngine.Random.Range(0, 100);
        int AttrID = 0;

        if (Rate > 90)
        {
            AttrID = 13;
        }
        else if (Rate > 80)
        {
            AttrID = 12;
        }
        else if (Rate > 60)
        {
            AttrID = 11;
        }
        else
        {
            return;
        }

        // 加上字首能力
        //Debug.Log("加上前輟能力:"+AttrID);
        IAttrFactory AttrFactory = PBDFactory.GetAttrFactory();
        SoldierAttr  PreAttr     = AttrFactory.GetEliteSoldierAttr(ENUM_AttrDecorator.Prefix, AttrID, Soldier.GetSoldierValue());

        Soldier.SetCharacterAttr(PreAttr);
    }
Beispiel #3
0
    public override void setCharacterAttr()
    {
        SoldierAttr soldierAttr = new SoldierAttr();

        soldierAttr.setAttrStragegy(new SoldierAttrStrategy());
        m_soldierBuildParam.character.CharacterAttr = soldierAttr;
    }
	// 取得加乘過的Soldier角色數值
	public override SoldierAttr GetEliteSoldierAttr(ENUM_AttrDecorator emType,int AttrID, SoldierAttr theSoldierAttr)
	{
		// 取得加乘效果的數值
		AdditionalAttr theAdditionalAttr =  GetAdditionalAttr( AttrID );
		if( theAdditionalAttr == null)
		{
			Debug.LogWarning("GetEliteSoldierAttr:加乘數值["+AttrID+"]不存在");
			return theSoldierAttr;
		}

		// 產生裝飾者
		BaseAttrDecorator theAttrDecorator = null;
		switch( emType)
		{
		case ENUM_AttrDecorator.Prefix:
			theAttrDecorator = new PrefixBaseAttr();
			break;
		case ENUM_AttrDecorator.Suffix:
			theAttrDecorator = new SuffixBaseAttr();
			break;
		}
		if(theAttrDecorator==null)
		{
			Debug.LogWarning("GetEliteSoldierAttr:無法針對["+emType+"]產生裝飾者");
			return theSoldierAttr;
		}

		// 設定裝飾對像及加乘數值
		theAttrDecorator.SetComponent( theSoldierAttr.GetBaseAttr());
		theAttrDecorator.SetAdditionalAttr( theAdditionalAttr );

		// 設定新的數值後回傳
		theSoldierAttr.SetBaseAttr( theAttrDecorator );
		return theSoldierAttr;// 回傳
	}
Beispiel #5
0
        // 训练Caption单位
        public ISoldier TrainCaption(ENUM_Weapon emWeapon, int Lv)
        {
            // 产生物件
            SoldierCaptain theSoldier = new SoldierCaptain();

            // 设定模型
            GameObject tmpGameObject = CreateGameObject("CaptainGameObjectName");

            tmpGameObject.gameObject.name = "SoldierCaptain";
            theSoldier.SetGameObject(tmpGameObject);

            // 加入武器
            IWeapon Weapon = CreateWeapon(emWeapon);

            theSoldier.SetWeapon(Weapon);

            // 取得Soldier的数值,设定给角色
            SoldierAttr theSoldierAttr = CreateSoliderAttr(3);

            theSoldierAttr.SetSoldierLv(Lv);
            theSoldier.SetCharacterAttr(theSoldierAttr);

            // 加入AI
            SoldierAI theAI = CreateSoldierAI();

            theSoldier.SetAI(theAI);

            // 加入管理器
            //PBaseDefenseGame.Instance.AddSoldier( theSoldier as ISoldier );

            return(theSoldier as ISoldier);
        }
        // 訓練Rookie單位
        public ISoldier TrainRookie(ENUM_Weapon emWeapon, int Lv)
        {
            // 產生物件
            SoldierRookie theSoldier = new SoldierRookie();

            // 設定模型
            GameObject tmpGameObject = CreateGameObject("RookieGameObjectName");

            tmpGameObject.gameObject.name = "SoldierRookie";
            theSoldier.SetGameObject(tmpGameObject);

            // 加入武器
            IWeapon Weapon = CreateWeapon(emWeapon);

            theSoldier.SetWeapon(Weapon);

            // 取得Soldier的數值,設定給角色
            SoldierAttr theSoldierAttr = CreateSoliderAttr(1);

            theSoldierAttr.SetSoldierLv(Lv);
            theSoldier.SetCharacterAttr(theSoldierAttr);

            // 加入AI
            SoldierAI theAI = CreateSoldierAI();

            theSoldier.SetAI(theAI);

            // 加入管理器
            //PBaseDefenseGame.Instance.AddSoldier( theSoldier as ISoldier );

            return(theSoldier as ISoldier);
        }
        // 加入角色數值
        public override void AddAttr(ICharacter pRole, int Lv)
        {
            // 取得Soldier的數值,設定給角色
            SoldierAttr theSoldierAttr = CreateSoliderAttr(pRole.GetAttrID());

            theSoldierAttr.SetSoldierLv(Lv);
            pRole.SetCharacterAttr(theSoldierAttr);
        }
Beispiel #8
0
    public SoldierCaptive(IEnemy enemy)
    {
        mEnemy = enemy;
        ICharacterAttr attr = new SoldierAttr(enemy.attr.strategy, 1, enemy.attr.baseAttr);

        this.attr       = attr;
        this.gameobject = mEnemy.gameobject;
        this.weapon     = mEnemy.weapon;
    }
Beispiel #9
0
    public override void AddCharacterAttr()
    {
        CharacterBaseAttr baseAttr = FactoryManager.attrFactory.GetCharacterBaseAttr(mT);

        mPrefabName = baseAttr.prefabName;
        ICharacterAttr attr = new SoldierAttr(new SoldierAttrStrategy(), mLv, baseAttr);

        mCharacter.attr = attr;
    }
Beispiel #10
0
    /// <summary>
    /// 俘兵营,利用适配器模式.
    /// 构造顺序按照SoldierBuilder建造者模式的顺序构建
    /// </summary>
    /// <param name="m_Enemy"></param>
    public SoldierCaptive(IEnemy m_Enemy)
    {
        this.m_Enemy = m_Enemy;
        ICharacterAttr attr = new SoldierAttr(m_Enemy.Attr.Strategy, 1, m_Enemy.Attr.BaseAttr);

        this.Attr = attr;

        this.GameObject = m_Enemy.GameObject;
        this.Weapon     = m_Enemy.Weapon;
    }
Beispiel #11
0
    public override void AddCharacterAttr()
    {
        CharacterBaseAttr soldierBaseAttr = FactoryManager.GetAttrFactory.GetCharacterBaseAttr(mT);

        mPrefabName = soldierBaseAttr.PrefabName;//下方添加角色需要prefabName;

        ICharacterAttr attr = new SoldierAttr(new SoldierAttrStrategy(), mLv, soldierBaseAttr);

        mCharacter.Attr = attr;
    }
        public override int GetDmgDescValue(ICharacterAttr CharacterAttr)
        {
            SoldierAttr theSoldierAttr = CharacterAttr as SoldierAttr;

            if (theSoldierAttr == null)
            {
                return(0);
            }

            return((theSoldierAttr.GetSoldierLv() - 1) * 2);
        }
Beispiel #13
0
 public override SoldierAttr GetSoldierAttr(int AttrID)
 {
     if (m_SoldierAttrDB.ContainsKey(AttrID))
     {
         SoldierAttr NewAttr = new SoldierAttr();
         NewAttr.SetSoldierAttr(m_SoldierAttrDB[AttrID]);
         return(NewAttr);
     }
     Debug.LogWarning("GetSoldierAttr:AttrID[" + AttrID + "]不存在");
     return(null);
 }
Beispiel #14
0
    public override void SetBuildingAttr()
    {
        IAttrFactory Factroy = PBDGFactory.GetAttrFactory();
        int          attrID  = m_buildParam.AttrID;


        SoldierAttr soldierAttr = Factroy.GetSoldierAttr(attrID);



        m_buildParam.NewBuding.SetAttr(soldierAttr);
    }
Beispiel #15
0
    public override void AddCharacterAttr()
    {
        /*
         * //数值初始化
         * string name = "";
         *
         * int maxHP = 0;
         *
         * float moveSpeed = 0f;
         *
         * string iconSprite = "";
         *
         * if (m_CharacterType == typeof(SoldierCaptain))
         * {
         *  name = "上尉士兵";
         *  maxHP = 100;
         *  moveSpeed = 3f;
         *  iconSprite = "CaptainIcon";
         *  m_PrefabName = "Soldier1";
         * }
         * else if (m_CharacterType == typeof(SoldierSergeant))
         * {
         *  name = "中士士兵";
         *  maxHP = 90;
         *  moveSpeed = 3f;
         *  iconSprite = "SergeantIcon";
         *  m_PrefabName = "Soldier3";
         * }
         * else if (m_CharacterType == typeof(SoldierRookie))
         * {
         *  name = "新兵士兵";
         *  maxHP = 80;
         *  moveSpeed = 2.5f;
         *  iconSprite = "RookieIcon";
         *  m_PrefabName = "Soldier2";
         * }
         * else
         * {
         *  Debug.LogError("找不到指定的士兵类型 T=" + m_CharacterType.ToString());
         * }
         * ICharacterAttr attr = new SoldierAttr(new SoldierAttrStategy(), m_LV, name, maxHP, moveSpeed, iconSprite, m_PrefabName);
         * m_Character.Attr = attr;
         */

        //享元模式优化成员属性
        CharacterBaseAttr baseAttr = FactoryManager.AttrFactory.GetCharacterBaseAttr(m_CharacterType);

        m_PrefabName = baseAttr.PrefabName;
        ICharacterAttr attr = new SoldierAttr(new SoldierAttrStategy(), m_LV, baseAttr);

        m_Character.Attr = attr;
    }
Beispiel #16
0
        // 获得Soldier的属性
        public override SoldierAttr GetSoldierAttr(int AttrID)
        {
            if (m_SoldierAttrDB.ContainsKey(AttrID) == false)
            {
                Debug.LogWarning("GetSoldierAttr:AttrID[" + AttrID + "]属性不存在");
                return(null);
            }
            // 产生属性对象并设置共享的属性数据
            SoldierAttr NewAttr = new SoldierAttr();

            NewAttr.SetBaseAttr(m_SoldierAttrDB[AttrID]);
            return(NewAttr);
        }
    public override void SetCharacterAttr()
    {
        // 取得Enemy的數值
        IAttrFactory theAttrFactory = PBDFactory.GetAttrFactory();
        int          AttrID         = m_BuildParam.NewCharacter.GetAttrID();
        SoldierAttr  theSoldierAttr = theAttrFactory.GetSoldierAttr(AttrID);

        // 設定數值的計算策略
        theSoldierAttr.SetAttStrategy(new SoldierAttrStrategy());

        // 設定給角色
        m_BuildParam.NewCharacter.SetCharacterAttr(theSoldierAttr);
    }
	// 取得Soldier的數值
	public override SoldierAttr GetSoldierAttr( int AttrID )
	{
		if( m_SoldierAttrDB.ContainsKey( AttrID )==false)
		{
			Debug.LogWarning("GetSoldierAttr:AttrID["+AttrID+"]數值不存在");
			return null;
		}

		// 產生數物件並設定共用的數值資料
		SoldierAttr NewAttr = new SoldierAttr();
        NewAttr.SetSoldierAttr(m_SoldierAttrDB[AttrID]);
        return NewAttr;
	}
Beispiel #19
0
    public override SoldierAttr GetSoldierAttr(int Attr)
    {
        if (m_SoldierAttrDB.ContainsKey(Attr) == false)
        {
            Debug.LogError("未找到数据");
            return(null);
        }

        SoldierAttr soldierAttr = new SoldierAttr();

        soldierAttr.SetSoldierAttr(m_SoldierAttrDB[Attr]);
        return(soldierAttr);
    }
    // 取得Soldier的数值
    public override SoldierAttr GetSoldierAttr(int AttrID)
    {
        if (m_SoldierAttrDB.ContainsKey(AttrID) == false)
        {
            Debug.LogWarning("GetSoldierAttr:AttrID[" + AttrID + "]数值不存在");
            return(null);
        }

        // 产生数物件并设定共用的数值资料
        SoldierAttr NewAttr = new SoldierAttr();

        NewAttr.SetSoldierAttr(m_SoldierAttrDB[AttrID]);
        return(NewAttr);
    }
Beispiel #21
0
    public SoldierCaptive(IEnemy enemy)
    {
        mEnemy = enemy;

        //添加属性
        ICharacterAttr attr = new SoldierAttr(enemy.attr.strategy, 1, enemy.attr.baseAttr);

        this.attr = attr;

        //游戏物体
        this.gameObject = mEnemy.gameObject;

        //添加武器
        this.weapon = mEnemy.weapon;
    }
    //属性初始化
    public override void initAttr(ICharacterAttr characterAttr)
    {
        SoldierAttr soldierAttr = characterAttr as SoldierAttr;

        if (soldierAttr == null) //需要判断参数是否是士兵属性
        {
            return;
        }

        //等级加HP上限
        if (soldierAttr.Lv > 0)
        {
            soldierAttr.addMaxHp((soldierAttr.Lv - 1) * 10);
        }
    }
Beispiel #23
0
        // 设置角色能力
        public override void SetCharacterAttr()
        {
            // 获取Soldier的属性
            IAttrFactory theAttrFactory = RTSFactory.GetAttrFactory();
            SoldierAttr  theSoldierAttr = theAttrFactory.GetSoldierAttr(
                m_BuildParam.NewCharacter.GetAttrID());

            // 设置
            theSoldierAttr.SetAttrStrategy(new SoldierAttrStrategy());

            // 设置等级
            theSoldierAttr.SetSoldierLv(m_BuildParam.Lv);

            // 设置给角色
            m_BuildParam.NewCharacter.SetCharacterAttr(theSoldierAttr);
        }
Beispiel #24
0
    // 设定角色能力
    public override void SetCharacterAttr()
    {
        // 取得Soldier的数值
        IAttrFactory theAttrFactory = PBDFactory.GetAttrFactory();
        int          AttrID         = m_BuildParam.NewCharacter.GetAttrID();
        SoldierAttr  theSoldierAttr = theAttrFactory.GetSoldierAttr(AttrID);

        // 设定
        theSoldierAttr.SetAttStrategy(new SoldierAttrStrategy());

        // 设定等级
        theSoldierAttr.SetSoldierLv(m_BuildParam.Lv);

        // 设定给角色
        m_BuildParam.NewCharacter.SetCharacterAttr(theSoldierAttr);
    }
    /// <summary>
    /// 设置角色属性
    /// </summary>
    public override void SetCharacterAttr()
    {
        IAttrFactory theAttrFactory = GameFactory.GetAttrFactory();
        int          AttrID         = m_BuildParam.NewCharacter.GetAttrID();
        SoldierAttr  theSoldierAttr = theAttrFactory.GetSoldierAttr(AttrID);



        //m_BuildParam.NewCharacter.SetCharacterAttr(theSoldierAttr);

        theSoldierAttr.SetAttStrategy(new SoldierAttrStrategy());


        theSoldierAttr.SetSoldierLv(m_BuildParam.Lv);

        m_BuildParam.NewCharacter.SetCharacterAttr(theSoldierAttr);
    }
Beispiel #26
0
    // 增加勋章
    public virtual void AddMedal()
    {
        if (m_MedalCount >= MAX_MEDAL)
        {
            return;
        }

        // 增加勋章
        m_MedalCount++;
        // 取得对应的勋章加乘值
        int AttrID = m_MedalCount + MEDAL_VALUE_ID;

        IAttrFactory theAttrFactory = PBDFactory.GetAttrFactory();

        // 加上字尾能力
        SoldierAttr SufAttr = theAttrFactory.GetEliteSoldierAttr(ENUM_AttrDecorator.Suffix, AttrID, m_Attribute as SoldierAttr);

        SetCharacterAttr(SufAttr);
    }
        public override void InitAttr(ICharacterAttr CharacterAttr)
        {
            SoldierAttr theSoldierAttr = CharacterAttr as SoldierAttr;

            if (theSoldierAttr == null)
            {
                return;
            }

            int AddMaxHP = 0;
            int Lv       = theSoldierAttr.GetSoldierLv();

            if (Lv > 0)
            {
                AddMaxHP = (Lv - 1) * 2;
            }

            theSoldierAttr.AddMaxHP(AddMaxHP);
        }
    public override void InitAttr(ICharacterAttr _characterAttr)
    {
        SoldierAttr theSoldierAttr = _characterAttr as SoldierAttr;

        if (theSoldierAttr == null)
        {
            return;
        }

        //最大生命力有等级加成
        int addMaxHP = 0;
        int lv       = theSoldierAttr.GetSoldierLv();

        if (lv > 0)
        {
            addMaxHP = (lv - 1) * 2;
        }

        //设置最高HP
        theSoldierAttr.AddMaxHP(addMaxHP);
    }
Beispiel #29
0
    public override void InitAttr(ICharacterAttr CharacterAttr)
    {
        //是否为士兵类
        SoldierAttr theSoldierAttr = CharacterAttr as SoldierAttr;

        if (theSoldierAttr == null)
        {
            return;
        }

        //最大生命力有等级加成
        int AddMaxHP = 0;
        int Lv       = theSoldierAttr.GetSoldierLv();

        if (Lv > 0)
        {
            AddMaxHP = (Lv - 1) * 2;
        }

        //设置最高HP
        theSoldierAttr.AddMaxHP(AddMaxHP);
    }
	// 
	public SoldierCaptive( IEnemy theEnemy)
	{
		m_emSoldier = ENUM_Soldier.Captive;
		m_Captive = theEnemy;

		// 設定成像
		SetGameObject( theEnemy.GetGameObject() );

		// 將Enemy數值轉成Soldier用的
		SoldierAttr tempAttr = new SoldierAttr();
		tempAttr.SetSoldierAttr( theEnemy.GetCharacterAttr().GetBaseAttr() );
		tempAttr.SetAttStrategy( theEnemy.GetCharacterAttr().GetAttStrategy());
		tempAttr.SetSoldierLv( 1 );	// 設定為1級
		SetCharacterAttr( tempAttr );

		// 設定武器
		SetWeapon( theEnemy.GetWeapon() );

		// 更改為SoldierAI
		m_AI = new SoldierAI( this );
		m_AI.ChangeAIState( new IdleAIState() );
	}
    // Soldier能力
    void UnitTest_SoldierValue()
    {
        ICharacterFactory Factory = PBDFactory.GetCharacterFactory();

        // 建立Soldier
        ISoldier theSoldier = Factory.CreateSoldier(ENUM_Soldier.Rookie, ENUM_Weapon.Gun, 1, new Vector3(0, 0, 0));

        // 加上前輟能力
        IAttrFactory ValueFactory = PBDFactory.GetAttrFactory();
        SoldierAttr  PreAttr      = ValueFactory.GetEliteSoldierAttr(ENUM_AttrDecorator.Prefix, 11, theSoldier.GetSoldierValue());

        theSoldier.SetCharacterAttr(PreAttr);

        // 加上後輟能力
        SoldierAttr SufValue = ValueFactory.GetEliteSoldierAttr(ENUM_AttrDecorator.Suffix, 21, theSoldier.GetSoldierValue());

        theSoldier.SetCharacterAttr(SufValue);

        // 建立Enemy
        IEnemy theEnemy = Factory.CreateEnemy(ENUM_Enemy.Elf, ENUM_Weapon.Rocket, new Vector3(0, 0, 0), new Vector3(100, 0, 0));

        // 建立俘兵
        ISoldier theCaptive = new SoldierCaptive(theEnemy);

        // 加上前輟能力
        PreAttr = ValueFactory.GetEliteSoldierAttr(ENUM_AttrDecorator.Prefix, 11, theCaptive.GetSoldierValue());
        theCaptive.SetCharacterAttr(PreAttr);

        // 加上後輟能力
        SufValue = ValueFactory.GetEliteSoldierAttr(ENUM_AttrDecorator.Suffix, 21, theCaptive.GetSoldierValue());
        theCaptive.SetCharacterAttr(SufValue);

        // Soldier打Enemy
        //theSoldier.Attack( theEnemy );

        // Enemy打Soldier
        //theEnemy.Attack( theSoldier );
    }
Beispiel #32
0
    //
    public SoldierCaptive(IEnemy theEnemy)
    {
        m_emSoldier = ENUM_Soldier.Captive;
        m_Captive   = theEnemy;

        // 設定成像
        SetGameObject(theEnemy.GetGameObject());

        // 將Enemy數值轉成Soldier用的
        SoldierAttr tempAttr = new SoldierAttr();

        tempAttr.SetSoldierAttr(theEnemy.GetCharacterAttr().GetBaseAttr());
        tempAttr.SetAttStrategy(theEnemy.GetCharacterAttr().GetAttStrategy());
        tempAttr.SetSoldierLv(1);               // 設定為1級
        SetCharacterAttr(tempAttr);

        // 設定武器
        SetWeapon(theEnemy.GetWeapon());

        // 更改為SoldierAI
        m_AI = new SoldierAI(this);
        m_AI.ChangeAIState(new IdleAIState());
    }
	// 取得Soldier的數值:有字首字尾的加乘
	public abstract SoldierAttr GetEliteSoldierAttr(ENUM_AttrDecorator emType,int AttrID, SoldierAttr theSoldierAttr);
		public void SetCharacterAttr(SoldierAttr Attr){}
 public void SetCharacterAttr(SoldierAttr Attr)
 {
 }