Пример #1
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            bridgeWidth = details.Params[0];
            bridgeType  = (DynamicBridgeType)details.Params[1];
            if (bridgeType > DynamicBridgeType.Lab)
            {
                bridgeType = DynamicBridgeType.Rope;
            }

            int toughness = details.Params[2];

            heightFactor = MathF.Sqrt((16 - toughness) * bridgeWidth) * 4f;

            Vector3 pos = Transform.Pos;

            originalY = pos.Y - 6;

            bridgePieces = new List <Piece>();

            int[] widthList = PieceWidths[(int)bridgeType];

            int widthCovered = widthList[0] / 2;

            for (int i = 0; (widthCovered <= bridgeWidth * 16 + 6) || (i * 16 < bridgeWidth); i++)
            {
                Piece piece = new Piece();
                piece.OnAttach(new ActorInstantiationDetails {
                    Api    = api,
                    Pos    = new Vector3(pos.X + widthCovered - 16, pos.Y - 20, LevelHandler.MainPlaneZ + 10),
                    Params = new[] { (ushort)bridgeType, (ushort)i }
                });
                api.AddActor(piece);

                bridgePieces.Add(piece);

                widthCovered += (widthList[i % widthList.Length] + widthList[(i + 1) % widthList.Length]) / 2;
            }

            collisionFlags = CollisionFlags.CollideWithOtherActors /*| CollisionFlags.IsSolidObject*/;

            OnUpdateHitbox();
        }
Пример #2
0
            public override void OnAttach(ActorInstantiationDetails details)
            {
                base.OnAttach(details);

                DynamicBridgeType bridgeType = (DynamicBridgeType)details.Params[0];

                canBeFrozen = false;

                RequestMetadata("Object/BridgePiece");

                switch (bridgeType)
                {
                case DynamicBridgeType.Gem: SetAnimation("Gem"); break;

                case DynamicBridgeType.Lab: SetAnimation("Lab"); break;

                case DynamicBridgeType.Log: SetAnimation("Log"); break;

                default:
                case DynamicBridgeType.Rope: SetAnimation("Rope"); break;

                case DynamicBridgeType.Stone: SetAnimation("Stone"); break;

                case DynamicBridgeType.StoneRed: SetAnimation("StoneRed"); break;

                case DynamicBridgeType.Vine: SetAnimation("Vine"); break;
                }

                int variations = currentAnimation.FrameCount;

                if (variations > 0)
                {
                    ushort idx = details.Params[1];
                    renderer.AnimFirstFrame = idx % variations;
                }

                collisionFlags = CollisionFlags.CollideWithOtherActors | CollisionFlags.IsSolidObject | CollisionFlags.SkipPerPixelCollisions;

                IsOneWay = true;
            }