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)); }
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)); }
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); } }