diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2017-01-02 19:34:01 +0100 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2019-07-30 00:13:56 +0200 |
| commit | 19b2e79011de6c3800302c8d5841ad8baff4d1b6 (patch) | |
| tree | d8ee0d1f08abf7777b4421c24ef30758ddfc1665 | |
| download | DTSpecificSolidMask.c4d-19b2e79011de6c3800302c8d5841ad8baff4d1b6.tar.gz DTSpecificSolidMask.c4d-19b2e79011de6c3800302c8d5841ad8baff4d1b6.zip | |
| -rw-r--r-- | ActMap.txt | 3 | ||||
| -rw-r--r-- | DefCore.txt | 4 | ||||
| -rw-r--r-- | Graphics.png | bin | 0 -> 126 bytes | |||
| -rw-r--r-- | Script.c | 99 |
4 files changed, 106 insertions, 0 deletions
diff --git a/ActMap.txt b/ActMap.txt new file mode 100644 index 0000000..6906463 --- /dev/null +++ b/ActMap.txt @@ -0,0 +1,3 @@ +[Action] +Name=Float +Procedure=FLOAT diff --git a/DefCore.txt b/DefCore.txt new file mode 100644 index 0000000..ab21ee0 --- /dev/null +++ b/DefCore.txt @@ -0,0 +1,4 @@ +[DefCore] +Name=Specific Solidmask +id=SM7I +Category=C4D_StaticBack diff --git a/Graphics.png b/Graphics.png Binary files differnew file mode 100644 index 0000000..f1acbb0 --- /dev/null +++ b/Graphics.png diff --git a/Script.c b/Script.c new file mode 100644 index 0000000..39f1aa3 --- /dev/null +++ b/Script.c @@ -0,0 +1,99 @@ +#strict 2 + +global func DisableSolidMaskFor(object forObj, array restoreMask, object target) +{ + target = target || this; + var helper = CreateObject(SM7I); + helper->SetCategory(forObj->GetCategory()); + SetObjectOrder(helper, forObj); + AddEffect("DisableSolidMask", helper, 1, 1, helper, SM7I, target); + return [forObj, AddEffect("RestoreSolidMask", forObj, 1, 1, 0, SM7I, restoreMask || target->GetSolidMask(), target, helper)]; +} + +global func SetSolidMaskFor(object forObj, array mask, object target) +{ + target = target || this; + var helper = CreateObject(SM7I); + helper->SetCategory(forObj->GetCategory()); + SetObjectOrder(helper, forObj); + AddEffect("DisableSolidMask", forObj, 1, 1, helper, SM7I, target); + return [forObj, AddEffect("RestoreSolidMask", helper, 1, 1, 0, SM7I, mask, target, helper)]; +} + +global func RemoveSolidMaskSetting(array setting) +{ + return EffectVar(3, setting[0], setting[1]) = true; +} + +func Initialize() +{ + SetAction("Float"); +} + +func FxDisableSolidMaskStart(object target, int effectNumber, int temp, object forObj) +{ + if(!temp) + { + EffectVar(0, target, effectNumber) = forObj; + } +} + +func FxDisableSolidMaskTimer(object target, int effectNumber) +{ + var obj = EffectVar(0, target, effectNumber); + if(!obj) + { + return FX_Execute_Kill; + } + + obj->SetSolidMask(); +} + +func FxDisableSolidMaskStop(object target, int effectNumber, int reason, bool temp) +{ + if(!temp && reason != FX_Call_RemoveClear) + { + RemoveObject(); + } +} + +func FxRestoreSolidMaskStart(object target, int effectNumber, int temp, array mask, object solidMaskObject, object helper) +{ + if(!temp) + { + EffectVar(0, target, effectNumber) = mask; + EffectVar(1, target, effectNumber) = solidMaskObject; + EffectVar(2, target, effectNumber) = helper; + } +} + +func FxRestoreSolidMaskTimer(object target, int effectNumber) +{ + var mask = EffectVar(0, target, effectNumber); + var solidMaskObject = EffectVar(1, target, effectNumber); + var helper = EffectVar(2, target, effectNumber); + if(!helper || !solidMaskObject || EffectVar(3, target, effectNumber)) + { + return FX_Execute_Kill; + } + + solidMaskObject->SetSolidMask(mask[0], mask[1], mask[2], mask[3], mask[4], mask[5]); + + helper->SetCategory(target->GetCategory()); + SetObjectOrder(target, helper, true); +} + +func FxRestoreSolidMaskStop(object target, int effectNumber, int reason, bool temp) +{ + if(!temp && reason != FX_Call_RemoveClear) + { + var helper = EffectVar(2, target, effectNumber); + if(helper) + { + RemoveObject(helper); + } + var mask = EffectVar(0, target, effectNumber); + var solidMaskObject = EffectVar(1, target, effectNumber); + solidMaskObject->SetSolidMask(mask[0], mask[1], mask[2], mask[3], mask[4], mask[5]); + } +} |
