Ejemplo n.º 1
0
        IEnumerable<IRenderable> IRender.Render(Actor self, WorldRenderer wr)
        {
            if(State == CarryallState.Carrying && !Carryable.IsDead)
            {
                if(carryablePreview == null)
                {
                    var carryableInits = new TypeDictionary()
                    {
                        new OwnerInit(Carryable.Owner),
                        new DynamicFacingInit(()=>facing.Facing),
                    };

                    foreach (var api in Carryable.TraitsImplementing<IActorPreviewInitModifier>())
                        api.ModifyActorPreviewInit(Carryable, carryableInits);

                    var init = new ActorPreviewInitializer(Carryable.Info, wr, carryableInits);
                    carryablePreview = Carryable.Info.TraitInfos<IRenderActorPreviewInfo>().SelectMany(rpi => rpi.RenderPreview(init)).ToArray();

                }

                var offset = body.LocalToWorld(CarryableOffset.Rotate(body.QuantizeOrientation(self, self.Orientation)));
                var previewRenderables = carryablePreview.SelectMany(p => p.Render(wr, self.CenterPosition + offset)).OrderBy(WorldRenderer.RenderableScreenZPositionComparisonKey);

                foreach (var r in previewRenderables)
                    yield return r;
            }
        }
Ejemplo n.º 2
0
        public virtual void UnreserveCarryable(Actor self)
        {
            if (Carryable != null && Carryable.IsInWorld && !Carryable.IsDead)
                Carryable.Trait<Carryable>().UnReserve(Carryable);

            Carryable = null;
            State = CarryallState.Idle;
        }
Ejemplo n.º 3
0
        void INotifyActorDisposing.Disposing(Actor self)
        {
            if(State == CarryallState.Carrying)
            {
                Carryable.Dispose();
                Carryable = null;

            }
            UnreserveCarryable(self);
        }
Ejemplo n.º 4
0
        void INotifyKilled.Killed(Actor self, AttackInfo attackInfo)
        {
            if(State == CarryallState.Carrying)
            {
                if (Carryable.IsInWorld && !Carryable.IsDead)
                    Carryable.Kill(attackInfo.Attacker);
                Carryable = null;
            }

            UnreserveCarryable(self);
        }