NScumm.Scumm.ScummEngine6.ActorOps C# (CSharp) Метод

ActorOps() приватный Метод

private ActorOps ( ) : void
Результат void
        protected virtual void ActorOps()
        {
            var subOp = ReadByte();
            if (subOp == 197)
            {
                _curActor = Pop();
                return;
            }

            var a = Actors[_curActor];
            if (a == null)
                return;

            switch (subOp)
            {
                case 76:                // SO_COSTUME
                    a.SetActorCostume((ushort)Pop());
                    break;
                case 77:                // SO_STEP_DIST
                    {
                        var j = (uint)Pop();
                        var i = (uint)Pop();
                        a.SetActorWalkSpeed(i, j);
                    }
                    break;
                case 78:                // SOSound
                    {
                        var args = GetStackList(8);
                        for (var i = 0; i < args.Length; i++)
                            a.Sounds[i] = (ushort)args[i];
                        break;
                    }
                case 79:                // SO_WALK_ANIMATION
                    a.WalkFrame = (byte)Pop();
                    break;
                case 80:                // SO_TALK_ANIMATION
                    a.TalkStopFrame = (byte)Pop();
                    a.TalkStartFrame = (byte)Pop();
                    break;
                case 81:                // SO_STAND_ANIMATION
                    a.StandFrame = (byte)Pop();
                    break;
                case 82:                // SO_ANIMATION
                    // dummy case in scumm6
                    Pop();
                    Pop();
                    Pop();
                    break;
                case 83:                // SO_DEFAULT
                    a.Init(0);
                    break;
                case 84:                // SO_ELEVATION
                    a.Elevation = (short)Pop();
                    break;
                case 85:                // SO_ANIMATION_DEFAULT
                    a.InitFrame = 1;
                    a.WalkFrame = 2;
                    a.StandFrame = 3;
                    a.TalkStartFrame = 4;
                    a.TalkStopFrame = 5;
                    break;
                case 86:                // SO_PALETTE
                    {
                        var j = (ushort)Pop();
                        var i = Pop();
                        ScummHelper.AssertRange(0, i, 255, "o6_actorOps: palette slot");
                        a.SetPalette(i, j);
                    }
                    break;
                case 87:                // SO_TALK_COLOR
                    a.TalkColor = (byte)Pop();
                    break;
                case 88:                // SO_ACTOR_NAME
                    a.Name = ReadCharacters();
                    break;
                case 89:                // SO_INIT_ANIMATION
                    a.InitFrame = (byte)Pop();
                    break;
                case 91:                // SO_ACTOR_WIDTH
                    a.Width = (uint)Pop();
                    break;
                case 92:                // SO_SCALE
                    {
                        var i = Pop();
                        a.SetScale(i, i);
                    }
                    break;
                case 93:                // SO_NEVER_ZCLIP
                    a.ForceClip = 0;
                    break;
                case 225:               // SO_ALWAYS_ZCLIP
                case 94:                // SO_ALWAYS_ZCLIP
                    a.ForceClip = (byte)Pop();
                    break;
                case 95:                // SO_IGNORE_BOXES
                    a.IgnoreBoxes = true;
                    a.ForceClip = (Game.Version >= 7) ? (byte)100 : (byte)0;
                    if (a.IsInCurrentRoom)
                        a.PutActor();
                    break;
                case 96:                // SO_FOLLOW_BOXES
                    a.IgnoreBoxes = false;
                    a.ForceClip = (Game.Version >= 7) ? (byte)100 : (byte)0;
                    if (a.IsInCurrentRoom)
                        a.PutActor();
                    break;
                case 97:                // SO_ANIMATION_SPEED
                    a.SetAnimSpeed((byte)Pop());
                    break;
                case 98:                // SO_SHADOW
                    a.ShadowMode = (byte)Pop();
                    break;
                case 99:                // SO_TEXT_OFFSET
                    {
                        var y = (short)Pop();
                        var x = (short)Pop();
                        a.TalkPosition = new Point(x, y);
                    }
                    break;
                case 198:               // SO_ACTOR_VARIABLE
                    {
                        var i = Pop();
                        a.SetAnimVar(Pop(), i);
                    }
                    break;
                case 215:               // SO_ACTOR_IGNORE_TURNS_ON
                    a.IgnoreTurns = true;
                    break;
                case 216:               // SO_ACTOR_IGNORE_TURNS_OFF
                    a.IgnoreTurns = false;
                    break;
                case 217:               // SO_ACTOR_NEW
                    a.Init(2);
                    break;
                case 227:               // SO_ACTOR_DEPTH
                    a.Layer = Pop();
                    break;
                case 228:               // SO_ACTOR_WALK_SCRIPT
                    a.WalkScript = (ushort)Pop();
                    break;
                case 229:               // SO_ACTOR_STOP
                    a.StopActorMoving();
                    a.StartAnimActor(a.StandFrame);
                    break;
                case 230:                                                                               /* set direction */
                    a.Moving &= ~MoveFlags.Turn;
                    a.SetDirection(Pop());
                    break;
                case 231:                                                                               /* turn to direction */
                    a.TurnToDirection(Pop());
                    break;
                case 233:               // SO_ACTOR_WALK_PAUSE
                    a.Moving |= MoveFlags.Frozen;
                    break;
                case 234:               // SO_ACTOR_WALK_RESUME
                    a.Moving &= ~MoveFlags.Frozen;
                    break;
                case 235:               // SO_ACTOR_TALK_SCRIPT
                    a.TalkScript = (ushort)Pop();
                    break;
                default:
                    throw new NotSupportedException(string.Format("ActorOps: default case {0}", subOp));
            }
        }
ScummEngine6