Beispiel #1
0
        public override DreamValue OperatorOutput(DreamValue a, DreamValue b)
        {
            DreamObject     client     = a.GetValueAsDreamObjectOfType(DreamPath.Mob).GetVariable("client").GetValueAsDreamObjectOfType(DreamPath.Client);
            DreamConnection connection = _dreamManager.GetConnectionFromClient(client);

            connection.OutputDreamValue(b);
            return(new DreamValue(0));
        }
Beispiel #2
0
        public override DreamValue OperatorOutput(DreamValue a, DreamValue b)
        {
            DreamObject     client     = a.GetValueAsDreamObjectOfType(DreamPath.Mob).GetVariable("client").GetValueAsDreamObjectOfType(DreamPath.Client);
            DreamConnection connection = Program.ClientToConnection[client];

            connection.OutputDreamValue(b);
            return(new DreamValue(0));
        }
        public override DreamValue OperatorMultiply(DreamValue a, DreamValue b)
        {
            DreamObject left = a.GetValueAsDreamObjectOfType(DreamPath.Matrix);
            float       lA   = left.GetVariable("a").GetValueAsFloat();
            float       lB   = left.GetVariable("b").GetValueAsFloat();
            float       lC   = left.GetVariable("c").GetValueAsFloat();
            float       lD   = left.GetVariable("d").GetValueAsFloat();
            float       lE   = left.GetVariable("e").GetValueAsFloat();
            float       lF   = left.GetVariable("f").GetValueAsFloat();

            if (b.TryGetValueAsFloat(out float bFloat))
            {
                DreamObject output = _dreamManager.ObjectTree.CreateObject(DreamPath.Matrix);
                output.SetVariable("a", new(lA * bFloat));
                output.SetVariable("b", new(lB * bFloat));
                output.SetVariable("c", new(lC * bFloat));
                output.SetVariable("d", new(lD * bFloat));
                output.SetVariable("e", new(lE * bFloat));
                output.SetVariable("f", new(lF * bFloat));

                return(new(output));
            }
            else if (b.TryGetValueAsDreamObjectOfType(DreamPath.Matrix, out DreamObject right))
            {
                float rA = right.GetVariable("a").GetValueAsFloat();
                float rB = right.GetVariable("b").GetValueAsFloat();
                float rC = right.GetVariable("c").GetValueAsFloat();
                float rD = right.GetVariable("d").GetValueAsFloat();
                float rE = right.GetVariable("e").GetValueAsFloat();
                float rF = right.GetVariable("f").GetValueAsFloat();

                DreamObject output = _dreamManager.ObjectTree.CreateObject(DreamPath.Matrix);
                output.SetVariable("a", new(rA * lA + rD * lB));
                output.SetVariable("b", new(rB * lA + rE * lB));
                output.SetVariable("c", new(rC * lA + rF * lB + lC));
                output.SetVariable("d", new(rA * lD + rD * lE));
                output.SetVariable("e", new(rB * lD + rE * lE));
                output.SetVariable("f", new(rC * lD + rF * lE + lF));

                return(new(output));
            }

            return(base.OperatorMultiply(a, b));
        }
Beispiel #4
0
        public override void OnVariableSet(DreamObject dreamObject, string variableName, DreamValue variableValue, DreamValue oldVariableValue)
        {
            base.OnVariableSet(dreamObject, variableName, variableValue, oldVariableValue);

            if (variableName == "x" || variableName == "y" || variableName == "z")
            {
                int         x           = (variableName == "x") ? variableValue.GetValueAsInteger() : dreamObject.GetVariable("x").GetValueAsInteger();
                int         y           = (variableName == "y") ? variableValue.GetValueAsInteger() : dreamObject.GetVariable("y").GetValueAsInteger();
                int         z           = (variableName == "z") ? variableValue.GetValueAsInteger() : dreamObject.GetVariable("z").GetValueAsInteger();
                DreamObject newLocation = Program.DreamMap.GetTurfAt(x, y, z);

                dreamObject.SetVariable("loc", new DreamValue(newLocation));
            }
            else if (variableName == "loc")
            {
                Program.DreamStateManager.AddAtomLocationDelta(dreamObject, variableValue.GetValueAsDreamObject());

                if (oldVariableValue.Value != null)
                {
                    DreamObject oldLoc         = oldVariableValue.GetValueAsDreamObjectOfType(DreamPath.Atom);
                    DreamList   oldLocContents = oldLoc.GetVariable("contents").GetValueAsDreamList();

                    oldLocContents.RemoveValue(new DreamValue(dreamObject));
                }

                if (variableValue.Value != null)
                {
                    DreamObject newLoc         = variableValue.GetValueAsDreamObjectOfType(DreamPath.Atom);
                    DreamList   newLocContents = newLoc.GetVariable("contents").GetValueAsDreamList();

                    newLocContents.AddValue(new DreamValue(dreamObject));
                }
            }
            else if (variableName == "screen_loc")
            {
                UpdateScreenLocation(dreamObject, variableValue);
            }
        }