コード例 #1
0
        public void DoScript(Character[] c)
        {
            if (_waiting > 0f)
            {
                _waiting -= Game1.FrameTime;
            }
            else
            {
                var done = false;
                while (!done)
                {
                    _curLine++;
                    if (Lines[_curLine] != null)
                    {
                        switch (Lines[_curLine].Command)
                        {
                        case MapCommands.Fog:
                            _map.Fog = true;
                            break;

                        case MapCommands.Monster:
                            for (var i = 0; i < c.Length; i++)
                            {
                                if (c[i] == null)
                                {
                                    c[i] = new Character(Lines[_curLine].VParam,
                                                         Game1.CharDefs[GetMonsterFromString(Lines[_curLine].SParam[1])], i,
                                                         Character.TeamBadGuys)
                                    {
                                        Map = _map
                                    };

                                    if (Lines[_curLine].SParam.Length > 4)
                                    {
                                        c[i].Name = Lines[_curLine].SParam[4];
                                    }
                                    break;
                                }
                            }
                            break;

                        case MapCommands.MakeBucket:
                            _map.Bucket = new Bucket(Lines[_curLine].IParam, _map);
                            break;

                        case MapCommands.AddBucket:
                            _map.Bucket.AddItem(Lines[_curLine].VParam, GetMonsterFromString(Lines[_curLine].SParam[1]));
                            break;

                        case MapCommands.IfNotBucketGoto:
                            if (_map.Bucket.IsEmpty)
                            {
                                GotoTag(Lines[_curLine].SParam[1]);
                            }
                            break;

                        case MapCommands.Wait:
                            _waiting = Lines[_curLine].IParam / 100f;
                            done     = true;
                            break;

                        case MapCommands.IfTrueGoto:
                            if (Flags.GetFlag(Lines[_curLine].SParam[1]))
                            {
                                GotoTag(Lines[_curLine].SParam[2]);
                            }
                            break;

                        case MapCommands.IfFalseGoto:
                            if (!Flags.GetFlag(Lines[_curLine].SParam[1]))
                            {
                                GotoTag(Lines[_curLine].SParam[2]);
                            }
                            break;

                        case MapCommands.SetGlobalFlag:
                            _map.GlobalFlags.SetFlag(Lines[_curLine].SParam[1]);
                            break;

                        case MapCommands.IfGlobalTrueGoto:
                            if (_map.GlobalFlags.GetFlag(Lines[_curLine].SParam[1]))
                            {
                                GotoTag(Lines[_curLine].SParam[2]);
                            }
                            break;

                        case MapCommands.IfGlobalFalseGoto:
                            if (!_map.GlobalFlags.GetFlag(Lines[_curLine].SParam[1]))
                            {
                                GotoTag(Lines[_curLine].SParam[2]);
                            }
                            break;

                        case MapCommands.Stop:
                            IsReading = false;
                            done      = true;
                            break;

                        case MapCommands.Tag:
                            break;

                        case MapCommands.SetLeftExit:
                            _map.TransitionDestination[(int)TransitionDirection.Left] = Lines[_curLine].SParam[1];
                            break;

                        case MapCommands.SetRightExit:
                            _map.TransitionDestination[(int)TransitionDirection.Right] = Lines[_curLine].SParam[1];
                            break;

                        case MapCommands.SetLeftEntrance:
                            if (_map.TransDir == TransitionDirection.Right)
                            {
                                c[0].Location = Lines[_curLine].VParam;
                                c[0].Face     = CharDir.Right;
                                c[0].SetAnim("fly");
                                c[0].State      = CharState.Air;
                                c[0].Trajectory = new Vector2(200f, 0f);
                                _map.TransDir   = TransitionDirection.None;
                            }
                            break;

                        case MapCommands.SetRightEntrance:
                            if (_map.TransDir == TransitionDirection.Left)
                            {
                                c[0].Location = Lines[_curLine].VParam;
                                c[0].Face     = CharDir.Left;
                                c[0].SetAnim("fly");
                                c[0].State      = CharState.Air;
                                c[0].Trajectory = new Vector2(-200f, 0f);
                                _map.TransDir   = TransitionDirection.None;
                            }
                            break;

                        case MapCommands.SetIntroEntrance:
                            if (_map.TransDir == TransitionDirection.Intro)
                            {
                                c[0].Location = Lines[_curLine].VParam;
                                c[0].Face     = CharDir.Right;
                                c[0].SetAnim("fly");
                                c[0].State      = CharState.Air;
                                c[0].Trajectory = new Vector2(0f, 0f);
                                _map.TransDir   = TransitionDirection.None;
                            }
                            break;
                        }
                    }
                }
            }
        }