• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天行健 君子當自強而不息

            Controlling Players and Characters(37)

            Whenever a character needs updating, rendering, or what have you, a pointer to
            the linked list of characters is needed in order to iterate the list. Either that or
            maybe your application needs access to the character data. Either way, the following
            functions will help you out:

                sCharacter* get_root_char()
                {
                    
            return m_root_char;
                }

                sCharacter* get_char(
            long id)
                {
                    
            for(sCharacter* character = m_root_char; character != NULL; character = character->next)
                    {
                        
            if(id == character->id)
                            
            return character;
                    }

                    
            return NULL;
                }

            During specific functions, it becomes necessary for characters (such as monsters)
            to make sure that they can see another character before attacking or casting a spell.
            A function of your design is required to verify that such a line of sight is clear.
            Returning a value of true states that a character is in sight of another one:


                virtual bool line_of_sight(sCharacter* source, sCharacter* target,
                                           
            float source_x, float source_y, float source_z,
                                           
            float target_x, float target_y, float target_z)
                {
                    
            // make sure there is a line of sight between characters.

                    
            return true;
                }

            When the character controller (or outside code) needs one of the character’s abilities,
            it needs to retrieve it with the following group of functions. These functions
            take into account the various modifiers such as status ailments and equipped items:


                long get_to_hit(const sCharacter* character)
                {
                    
            if(character == NULL)
                        
            return 0;

                    
            long to_hit = character->char_def.to_hit;

                    
            if(character->ailments & AILMENT_BLIND)
                        to_hit *= 0.75f;

                    
            if(character->ailments & AILMENT_HAWKEYE)
                        to_hit *= 1.5f;

                    
            return to_hit;
                }

                
            long get_agility(const sCharacter* character)
                {
                    
            if(character == NULL)
                        
            return 0;

                    
            long agility = character->char_def.agility;

                    
            if(character->ailments & AILMENT_CLUMSY)
                        agility *= 0.75f;

                    
            if(character->ailments & AILMENT_SUREFOOTED)
                        agility *= 1.5f;

                    
            return agility;
                }

                
            long get_attack(const sCharacter* character)
                {
                    
            if(character == NULL)
                        
            return 0;

                    
            long attack = character->char_def.attack;

                    
            // adjust attack based on item value
                    if(character->char_def.weapon != -1 && m_mil)
                        attack *= (m_mil[character->char_def.weapon].value / 100.0f + 1.0f);

                    
            if(character->ailments & AILMENT_WEAK)
                        attack *= 0.5f;

                    
            if(character->ailments & AILMENT_STRONG)
                        attack *= 1.5f;

                    
            return attack;
                }
                
                
            long get_defense(const sCharacter* character)
                {
                    
            if(character == NULL)
                        
            return 0;

                    
            long defense = character->char_def.defense;

                    
            if(character->char_def.armor != -1 && m_mil)
                        defense *= (m_mil[character->char_def.armor].value / 100.0f + 1.0f);

                    
            if(character->char_def.shield != -1 && m_mil)
                        defense *= (m_mil[character->char_def.shield].value / 100.0f + 1.0f);

                    
            if(character->ailments & AILMENT_WEAK)
                        defense *= 0.5f;

                    
            if(character->ailments & AILMENT_STRONG)
                        defense *= 1.5f;

                    
            if(defense < 0)     // boudns check
                        defense = 0;

                    
            return defense;
                }

                
            long get_resistance(const sCharacter* character)
                {
                    
            if(character == NULL)
                        
            return 0;

                    
            long resistance = character->char_def.resistance;

                    
            if(character->ailments & AILMENT_ENCHANTED)
                        resistance *= 0.5f;

                    
            if(character->ailments & AILMENT_BARRIER)
                        resistance *= 1.5f;

                    
            return resistance;
                }

                
            long get_mental(const sCharacter* character)
                {
                    
            if(character == NULL)
                        
            return 0;

                    
            long mental = character->char_def.mental;

                    
            if(character->ailments & AILMENT_DUMBFOUNDED)
                        mental *= 0.5f;

                    
            return mental;
                }

                
            float get_speed(const sCharacter* character)
                {
                    
            if(character == NULL)
                        
            return 0.0f;

                    
            float speed = character->char_def.speed;

                    
            if(character->ailments & AILMENT_SLOW)
                        speed *= 0.5f;

                    
            if(character->ailments & AILMENT_FAST)
                        speed *= 1.5f;

                    
            if(speed < 1.0f)    // bounds check
                        speed = 1.0f;

                    
            return speed;
                }

                
            float get_charge_rate(const sCharacter* character)
                {
                    
            if(character == NULL)
                        
            return 0;

                    
            float charge_rate = character->char_def.charge_rate;

                    
            if(character->ailments & AILMENT_SLOW)
                        charge_rate *= 0.75f;

                    
            if(character->ailments & AILMENT_FAST)
                        charge_rate *= 1.5f;

                    
            return charge_rate;
                }

            posted on 2007-12-04 19:05 lovedday 閱讀(247) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            亚洲精品无码久久不卡| 9999国产精品欧美久久久久久| 九九99精品久久久久久| 亚洲精品蜜桃久久久久久| 亚洲午夜精品久久久久久浪潮 | 久久99热狠狠色精品一区| 久久国产精品一国产精品金尊| 久久亚洲AV成人无码电影| 久久久久久精品免费看SSS| 97久久精品午夜一区二区| 亚洲AV无码久久精品蜜桃| 久久狠狠高潮亚洲精品| 99久久综合国产精品二区| 精品免费tv久久久久久久| 久久99精品久久久久久野外| 久久无码中文字幕东京热| 久久天天躁狠狠躁夜夜躁2O2O| 久久免费精品视频| 品成人欧美大片久久国产欧美...| 亚洲欧洲精品成人久久曰影片 | 久久久久亚洲爆乳少妇无| 久久99精品久久久久久| 久久丫精品国产亚洲av不卡 | 久久久久国色AV免费看图片| 国产精品一区二区久久不卡| 国产毛片欧美毛片久久久| 久久精品一区二区影院| 久久狠狠一本精品综合网| 亚洲国产精品久久| 青青草原1769久久免费播放| 久久久噜噜噜久久熟女AA片| 久久99久久99精品免视看动漫| 欧美国产成人久久精品| 亚州日韩精品专区久久久| 色婷婷久久综合中文久久一本| 久久精品国产精品亜洲毛片| 国产精品成人精品久久久| 国产高清国内精品福利99久久| 久久国产精品-久久精品| 国产精品久久久久9999| 97久久精品人妻人人搡人人玩|