Beispiel #1
0
    /// <summary>
    /// Play sound/animation/logic for when a character attacks.  This is
    ///    separate from the ReceiveCharacterAttacks() method for client
    ///    prediction
    /// </summary>
    /// <param name="characterId">Character identifier.</param>
    private void CharacterAttacks(int characterId)
    {
        SceneCharacter character = SceneCharacters[characterId];

        // Make a sound from the character
        //Instantiate(Sounds[character.AttackSound], this.transform.position, this.transform.rotation);
    }
Beispiel #2
0
    public void UpdateCharacterName(int charId, byte[] name)
    {
        SceneCharacter character   = SceneCharacters[charId];
        string         player_name = (string)name.Deserialize();

        character.name = player_name;
    }
Beispiel #3
0
        public SceneCharacter GetCharacter(int id)
        {
            SceneCharacter result;

            if (Scene.Characters.TryGetValue(id, out result))
            {
                return(result);
            }

            Vector3 position;
            var     animation = GetCharacterInfo(id, out position);

            if (animation == null)
            {
                return(null);
            }

            result = new SceneCharacter
            {
                Chip     = animation,
                Position = position
            };

            Scene.Characters[id] = result;

            return(result);
        }
        private void buildCityOne()
        {
            SceneCharacter sc = new SceneCharacter("Ola");

            GSS.ActiveScene = new CityOne(sc);
            GSS.RenderState = RenderState.Scene;
        }
Beispiel #5
0
    public static SceneCharacter FindNearestEnemy(this SceneCharacter aiChar, IEnumerable <SceneCharacter3D> potentialEnemies)
    {
        //Debug.Log( "Character " + aiChar + " finding nearest enemy in " + characters );

        SceneCharacter nearestEnemy         = null;
        float          nearestEnemyDistance = float.MaxValue;
        float          currentEnemyDistance = 0f;

        foreach (SceneCharacter potentialEnemy in potentialEnemies)
        {
            //Debug.Log( "Checking if " + character + " is the nearest enemy" );

            // No friendly fire
            if (((Character)potentialEnemy).Team == ((Character)aiChar).Team)
            {
                //Debug.Log( "Both characters are on team " + Team );
                continue;
            }

            currentEnemyDistance = Vector3.Distance(potentialEnemy.transform.position, aiChar.transform.position);
            if (currentEnemyDistance < nearestEnemyDistance)
            {
                //Debug.Log( "Enemy " + character + " is the new nearest enemy" );
                nearestEnemy         = potentialEnemy;
                nearestEnemyDistance = currentEnemyDistance;
            }
            else
            {
                //Debug.Log( "Enemy " + character + " at " + currentEnemyDistance + "is not closer than " + nearestEnemyDistance );
            }
        }

        //Debug.Log( "Nearest enemy is " + nearestEnemy );
        return(nearestEnemy);
    }
Beispiel #6
0
 protected override void OnStart()
 {
     _animatorComp   = GetComponent <Animator>();
     _sceneCharacter = GetComponent <SceneCharacter>();
     _mover          = new NPCMover(this, GetComponent <UnitPathfinder>(), GetComponent <CorvoPathFinder>());
     _attacker       = new NPCAttacker(this);
     TheBrain        = new NPCAI(Type, _sceneCharacter.TheCharacter, this, _mover, _attacker);
     _internalTimer  = 0;
 }
Beispiel #7
0
    public void ReceiveCharacterDies(int charId)
    {
        Debug.Log("Received that character " + charId + " died!");
        SceneCharacter character = SceneCharacters[charId];

        character.MoveDirection = new Vector3(0f, 0f, 0f);
        //Instantiate(Sounds[character.DeathSound], character.transform.position, character.transform.rotation);
        ((Character)character).IsAlive = false;
        RespawnCharacter(charId);
    }
Beispiel #8
0
    public void ReceiveCharacterHits(int actingCharId, int victimId)
    {
        SceneCharacter attacker = SceneCharacters[actingCharId];
        SceneCharacter victim   = SceneCharacters[victimId];

        Debug.Log("Recevied that character " + ((Character)attacker).CharName + " hit " + ((Character)victim).CharName + "!!");

        //Instantiate(Sounds[victim.InjuredSound], victim.transform.position, victim.transform.rotation);

        ((Character)victim).CurrentHealth -= 10;
    }
Beispiel #9
0
    public void UpdateCharacterColor(int charId, float r, float g, float b)
    {
        SceneCharacter character = SceneCharacters[charId];

        character.BaseCharacter.R = r;
        character.BaseCharacter.G = g;
        character.BaseCharacter.B = b;
        if (character.gameObject)
        {
            ((SceneCharacter3D)character).recolor_walker(new Color(r, g, b));
        }
    }
Beispiel #10
0
        protected override void OnStart()
        {
            Health = (float)DestructibleData["health"];
            if ((string)DestructibleData["barPrefab"] != "")
            {
                _healthBar = PrefabPool.Instance.GetPrefab((string)DestructibleData["barPrefab"]).GetComponent <EJRBar>();
                _healthBar.transform.parent        = gameObject.transform;
                _healthBar.transform.localPosition = new Vector3(0, (float)DestructibleData["barY"], 0);
                if ((string)DestructibleData["barParent"] != "")
                {
                    _healthBar.transform.parent = gameObject.transform.Find((string)DestructibleData["barParent"]); //yes, it should go here after positioning over main object
                }
                _healthBar.MinValue = 0;
                _healthBar.MaxValue = Health;
            }

            LoadGame(GameManager.Instance.TheGameState);
            _character     = GetComponent <SceneCharacter>();
            _internalTimer = 0.25f;
            _hitEffects    = new List <GameObject>();
        }
Beispiel #11
0
 protected SceneRenderer(SceneCharacter sceneCharacter, Texture2DColors cityTilemap)
 {
     this.cityTilemap    = cityTilemap;
     this.sceneCharacter = sceneCharacter;
 }
Beispiel #12
0
 public CityOne(SceneCharacter sceneCharacter) : base(sceneCharacter, SceneMaps.AllScenes[Scenes.CITY_ONE])
 {
 }
Beispiel #13
0
    /// <summary>
    /// Update is called once per frame
    /// </summary>
    void Update()
    {
        if (!IsActive)
        {
            return;
        }

        Debug.Log("Level: " + Application.loadedLevelName + "\n MyCharacterx: " + MyCharacter);
        if (MyCharacter == null || Application.loadedLevelName == MainMenuScene)
        {
            return;
        }

        if (SceneInformation == null)
        {
            LoadSceneInfo();
            GameLevel = new Level();
            GameLevel.load(GameLevelFile);
            GameObject level_object = GameLevel.game_object();
            level_object.transform.parent = SceneInformation.transform;
        }



        if (CharactersToInstantiate.Count > 0)
        {
            foreach (var character in CharactersToInstantiate)
            {
                InstantiateSceneCharacter(character);
            }

            CharactersToInstantiate.Clear();
        }

        if (MyPlayer == null && SceneCharacters != null && SceneCharacters.ContainsKey(MyCharacter.Id))
        {
            MyPlayer = SceneCharacters[MyCharacter.Id];
            MyPlayer.Client = this;
            MyPlayer.BaseCharacter = MyCharacter;
            MyPlayer.tag = "Player";
            //MyPlayer.BaseCharacter.Color = MyColor;
            //MyPlayer.recolor();
        }

        if (CurrentGameState != GameStates.LevelLoaded ||
            MyPlayer == null)
        {
            return;
        }

        InterpolateCharacters();
        UpdateControls();
        MovePlayer();
        UpdateCamera();
        UpdateCombatControls();
        ValidateMyPosition();
    }
Beispiel #14
0
        public static Chapter CreateChapter(string xmlPath)
        {
            Chapter chapter = new Chapter();

            XElement xml = XElement.Load(xmlPath);

            #region Objects

            foreach (XElement ele in xml.Elements("object"))
            {
                eAdventure.Object obj = new eAdventure.Object();
                chapter.Objects.Add(obj);

                obj.Id = ele.Attribute("id").Value;

                XElement desc = ele.Element("description");

                obj.Description = CreateDescription(desc);

                #region Resources

                foreach (XElement resourceEle in ele.Elements("resources"))
                {
                    ResourceList resList = new ResourceList();
                    obj.Resources.Add(resList);

                    foreach (XElement assetEle in resourceEle.Elements("asset"))
                    {
                        Asset asset = new Asset();
                        resList.Assets.Add(asset);

                        asset.Type = assetEle.Attribute("type").Value;
                        asset.Uri  = assetEle.Attribute("uri").Value;
                    }

                    XElement conditionEle = resourceEle.Element("condition");

                    if (conditionEle != null)
                    {
                        resList.Condition = CreateCondition(conditionEle);
                    }
                }

                #endregion

                #region Actions
                try
                {
                    foreach (var action in ele.Element("actions").Elements())
                    {
                        if (action.Name == "custom")
                        {
                            Custom custom = new Custom();
                            obj.Actions.Add(custom);

                            custom.Name = action.Attribute("name").Value;

                            var eff = action.Element("effect");
                            if (eff != null)
                            {
                                custom.Effect = CreateEffect(eff);
                            }
                        }
                        else if (action.Name == "examine")
                        {
                            Examine examine = new Examine();
                            obj.Actions.Add(examine);

                            var eff = action.Element("effect");
                            if (eff != null)
                            {
                                examine.Effect = CreateEffect(eff);
                            }
                        }
                        else if (action.Name == "use")
                        {
                            Use use = new Use();
                            obj.Actions.Add(use);
                            obj.Use = use;

                            Effect effect    = new Effect();
                            var    effectEle = action.Element("effect");

                            if (effectEle != null)
                            {
                                use.Effect = CreateEffect(effectEle);
                            }
                        }
                    }
                }
                catch { }
                #endregion
            }

            #endregion

            #region Scenes

            foreach (XElement sceneEle in xml.Elements("scene"))
            {
                Scene scene = new Scene();
                chapter.Scenes.Add(scene);

                scene.Id = sceneEle.Attribute("id").Value;

                #region ActiveAreas

                var aaEle = sceneEle.Element("active-areas");

                if (aaEle != null)
                {
                    foreach (var aa in aaEle.Elements("active-area"))
                    {
                        ActiveArea a = new ActiveArea();
                        scene.ActiveAreas.Add(a);

                        a.Id          = aa.Attribute("id").Value;
                        a.Description = CreateDescription(aa.Element("description"));
                        a.Transform   = CreateTransform(aa);

                        var actionsEle = aa.Element("actions");

                        if (actionsEle != null)
                        {
                            foreach (var action in actionsEle.Elements())
                            {
                                if (action.Name == "custom")
                                {
                                    Custom custom = new Custom();
                                    a.Actions.Add(custom);

                                    custom.Name = action.Attribute("name").Value;
                                }
                                else if (action.Name == "examine")
                                {
                                    Examine examine = new Examine();
                                    a.Actions.Add(examine);

                                    var eff = action.Element("effect");

                                    if (eff != null)
                                    {
                                        examine.Effect = CreateEffect(eff);
                                    }
                                }
                                else if (action.Name == "use")
                                {
                                    Use use = new Use();
                                    a.Actions.Add(use);
                                    a.Use = use;

                                    Effect effect    = new Effect();
                                    var    effectEle = action.Element("effect");

                                    if (effectEle != null)
                                    {
                                        use.Effect = CreateEffect(effectEle);
                                    }
                                }
                            }
                        }
                    }
                }

                #endregion

                #region Resources

                foreach (XElement resourceEle in sceneEle.Elements("resources"))
                {
                    ResourceList resList = new ResourceList();
                    scene.Resources.Add(resList);

                    foreach (XElement assetEle in resourceEle.Elements("asset"))
                    {
                        Asset asset = new Asset();
                        resList.Assets.Add(asset);

                        asset.Type = assetEle.Attribute("type").Value;
                        asset.Uri  = assetEle.Attribute("uri").Value;
                    }

                    XElement conditionEle = resourceEle.Element("condition");

                    if (conditionEle != null)
                    {
                        resList.Condition = CreateCondition(conditionEle);
                    }
                }

                #endregion

                #region Characters


                var sceneCharacters = sceneEle.Element("characters");

                if (sceneCharacters != null)
                {
                    foreach (XElement item in sceneCharacters.Elements("character-ref"))
                    {
                        SceneCharacter sChar = new SceneCharacter();
                        scene.Characters.Add(sChar);

                        sChar.CharacterId = item.Attribute("idTarget").Value;
                        sChar.Scale       = Convert.ToDecimal(item.Attribute("scale").Value);
                        sChar.X           = Convert.ToInt32(item.Attribute("x").Value);
                        sChar.Y           = Convert.ToInt32(item.Attribute("y").Value);

                        sChar.Condition = CreateCondition(item.Element("condition"));
                    }
                }

                #endregion

                #region Exits

                var exits = sceneEle.Element("exits");

                if (exits != null)
                {
                    foreach (XElement exitEle in exits.Elements("exit"))
                    {
                        Exit exit = new Exit();
                        scene.Exits.Add(exit);

                        exit.Transform = CreateTransform(exitEle);

                        exit.IsRectangular        = exitEle.Attribute("rectangular").Value == "yes" ? true : false;
                        exit.MouseOverDescription = exitEle.Element("exit-look").Attribute("text").Value;
                        exit.TargetObjectId       = exitEle.Attribute("idTarget").Value;

                        XElement conditionEle = exitEle.Element("condition");
                        if (conditionEle != null)
                        {
                            exit.Condition = CreateCondition(conditionEle);
                        }

                        var effect = exitEle.Element("effect");
                        if (effect != null)
                        {
                            exit.Effect = CreateEffect(effect);
                        }
                    }
                }

                #endregion

                #region Objects

                if (sceneEle.Element("objects") != null)
                {
                    foreach (var objectEle in sceneEle.Element("objects").Elements("object-ref"))
                    {
                        SceneObject obj = new SceneObject();
                        scene.Objects.Add(obj);

                        obj.TargetId     = objectEle.Attribute("idTarget").Value;
                        obj.TargetObject = chapter.Objects.Single(x => x.Id == obj.TargetId);
                        obj.X            = Convert.ToInt32(objectEle.Attribute("x").Value);
                        obj.Y            = Convert.ToInt32(objectEle.Attribute("y").Value);
                        obj.Layer        = Convert.ToInt32(objectEle.Attribute("layer").Value);

                        var cond = objectEle.Element("condition");

                        if (cond != null)
                        {
                            obj.Condition = CreateCondition(cond);
                        }
                    }
                }

                #endregion
            }

            #endregion

            #region Slidescenes

            foreach (XElement slideEle in xml.Elements("slidescene"))
            {
                SlideScene ss = new SlideScene();
                chapter.SlideScenes.Add(ss);

                ss.Name = slideEle.Element("name").Value;
                ss.Id   = slideEle.Attribute("id").Value;
                // ss.TargetScene = chapter.Scenes.First(x => x.SceneId == slideEle.Attribute("idTarget").Value);

                string slidesPath = slideEle.Element("resources").Element("asset").Attribute("uri").Value;

                int slideNumber = 1;

                while (true)
                {
                    string uri = slidesPath + "_0" + slideNumber.ToString();
                    if (!File.Exists(Path + uri + ".jpg"))
                    {
                        break;
                    }

                    slideNumber++;

                    Asset newSlide = new Asset();
                    ss.Slides.Add(newSlide);

                    newSlide.Type = "slides";
                    newSlide.Uri  = uri;
                }
            }

            #endregion

            #region Conversations

            foreach (var convEle in xml.Elements("graph-conversation"))
            {
                Conversation conv = new Conversation();
                chapter.Conversations.Add(conv);

                conv.Id = convEle.Attribute("id").Value;

                foreach (var node in convEle.Elements())
                {
                    #region Dialogue Node

                    if (node.Name == "dialogue-node")
                    {
                        DialogueNode dNode = new DialogueNode();
                        conv.Nodes.Add(dNode);

                        dNode.NodeIndex = node.Attribute("nodeindex").Value;

                        var end = node.Element("end-conversation");

                        if (end != null)
                        {
                            dNode.EndEffect = CreateEffect(end.Element("effect"));
                        }

                        foreach (var item in node.Elements())
                        {
                            if (item.Name == "speak-char")
                            {
                                SpeakChar speak = new SpeakChar();
                                dNode.Dialogue.Add(speak);

                                speak.TargetId = item.Attribute("idTarget").Value;
                                speak.Text     = item.Value;
                            }
                            else if (item.Name == "speak-player")
                            {
                                SpeakPlayer speak = new SpeakPlayer();
                                dNode.Dialogue.Add(speak);

                                speak.Text = item.Value;
                            }
                            else if (item.Name == "child")
                            {
                                dNode.NextNodeId = item.Attribute("nodeindex").Value;
                            }
                        }
                    }

                    #endregion

                    #region Option Node

                    else if (node.Name == "option-node")
                    {
                        OptionNode oNode = new OptionNode();
                        conv.Nodes.Add(oNode);

                        oNode.NodeIndex = node.Attribute("nodeindex").Value;

                        foreach (var optionEle in node.Elements("speak-player"))
                        {
                            Option option = new Option();
                            oNode.Options.Add(option);

                            SpeakPlayer speak = new SpeakPlayer();
                            option.SelectedOption = speak;

                            speak.Text = optionEle.Value;

                            option.NextNodeId = optionEle.ElementsAfterSelf("child").First().Attribute("nodeindex").Value;
                        }
                    }

                    #endregion
                }
            }

            #endregion

            #region Characters

            foreach (var charEle in xml.Elements("character"))
            {
                Character character = new Character();
                chapter.Characters.Add(character);

                character.Id = charEle.Attribute("id").Value;

                foreach (var item in charEle.Element("resources").Elements("asset"))
                {
                    Asset asset = new Asset();
                    character.Assets.Add(asset);

                    asset.Type = item.Attribute("type").Value;
                    asset.Uri  = item.Attribute("uri").Value;
                }

                character.Description = CreateDescription(charEle.Element("description"));

                character.TextColor = CreateTextColor(charEle.Element("textcolor"));
            }

            #endregion

            #region Macros

            var macros = xml.Elements("macro");

            if (macros != null)
            {
                foreach (var macroEle in macros)
                {
                    Macro m = new Macro();
                    chapter.Macros.Add(m);

                    m.Id = macroEle.Attribute("id").Value;

                    foreach (var item in macroEle.Elements())
                    {
                        if (item.Name == "speak-player")
                        {
                            SpeakPlayerMacro sp = new SpeakPlayerMacro(item.Value);
                            m.Actions.Add(sp);
                        }
                        else if (item.Name == "trigger-scene")
                        {
                            TriggerSceneMacro ts = new TriggerSceneMacro(item.Attribute("idTarget").Value);
                            m.Actions.Add(ts);
                        }
                        else if (item.Name == "activate")
                        {
                            ActivateFlag af = new ActivateFlag(item.Attribute("flag").Value);
                            m.Actions.Add(af);
                        }
                    }
                }
            }

            #endregion


            #region Second loop

            #region Scenes

            foreach (var scene in chapter.Scenes)
            {
                #region Exits

                foreach (var exit in scene.Exits)
                {
                    exit.TargetObject = chapter.GetElementById(exit.TargetObjectId);
                }

                #endregion

                #region Active areas

                foreach (var area in scene.ActiveAreas)
                {
                    if (area.Use != null)
                    {
                        if (area.Use.Effect != null)
                        {
                            var effect = area.Use.Effect;
                            effect.TriggerSlideScene = (SlideScene)chapter.GetElementById(effect.TriggerSlideSceneId);
                            effect.TriggerScene      = (Scene)chapter.GetElementById(effect.TriggerSceneId);

                            if (effect.TriggerConversationId != null)
                            {
                                effect.TriggerScene.Conversations.Add(chapter.Conversations.Single(x => x.Id == effect.TriggerConversationId));
                            }
                        }
                    }
                }

                #endregion

                #region Characters

                foreach (var item in scene.Characters)
                {
                    item.Character = chapter.Characters.Single(x => x.Id == item.CharacterId);
                }

                #endregion
            }

            #endregion

            #region Objects

            foreach (var obj in chapter.Objects)
            {
                try
                {
                    if (obj.Use.Effect.TriggerSlideSceneId != null)
                    {
                        obj.Use.Effect.TriggerSlideScene = chapter.SlideScenes.Single(x => x.Id == obj.Use.Effect.TriggerSlideSceneId);
                    }
                    if (obj.Use.Effect.TriggerSceneId != null)
                    {
                        obj.Use.Effect.TriggerScene = chapter.Scenes.Single(x => x.Id == obj.Use.Effect.TriggerSceneId);
                    }
                }
                catch { }
            }

            #endregion

            #region Conversations

            foreach (var item in chapter.Conversations)
            {
                foreach (var node in item.Nodes)
                {
                    var endEffect = node.EndEffect;
                    if (endEffect != null)
                    {
                        if (endEffect.TriggerSlideSceneId != null)
                        {
                            endEffect.TriggerSlideScene = chapter.SlideScenes.Single(x => x.Id == endEffect.TriggerSlideSceneId);
                        }
                        if (endEffect.TriggerSceneId != null)
                        {
                            endEffect.TriggerScene = chapter.Scenes.Single(x => x.Id == endEffect.TriggerSceneId);
                        }
                    }

                    if (node is DialogueNode)
                    {
                        var current = ((DialogueNode)node);
                        if (current.NextNodeId != null)
                        {
                            current.NextNode = item.Nodes.Single(x => x.NodeIndex == current.NextNodeId);
                        }
                    }
                    else
                    {
                        var current = ((OptionNode)node);
                        foreach (var option in current.Options)
                        {
                            if (option.NextNodeId != null)
                            {
                                option.NextNode = item.Nodes.Single(x => x.NodeIndex == option.NextNodeId);
                            }
                        }
                    }
                }
            }

            #endregion

            #endregion


            return(chapter);
        }