Skip to content

Commit

Permalink
物品栏 (#3)
Browse files Browse the repository at this point in the history
* feat:新增物品栏

* fix

* fix

* 删除一些不需要的

* fix

* fix
  • Loading branch information
dujuan1214 authored Feb 13, 2023
1 parent cf69b9c commit 266453a
Show file tree
Hide file tree
Showing 11 changed files with 542 additions and 64 deletions.
79 changes: 43 additions & 36 deletions addon/content/solid-example/panorama/scripts/custom_game/libs.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,15 @@ let Effects = null;
let ExecCount = 0;
function createRoot(fn, detachedOwner) {
const listener = Listener,
owner = Owner,
unowned = fn.length === 0,
root = unowned ? UNOWNED : {
owned: null,
cleanups: null,
context: null,
owner: detachedOwner || owner
},
updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));
owner = Owner,
unowned = fn.length === 0,
root = unowned ? UNOWNED : {
owned: null,
cleanups: null,
context: null,
owner: detachedOwner || owner
},
updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));
Owner = root;
Listener = null;
try {
Expand Down Expand Up @@ -181,8 +181,8 @@ function updateComputation(node) {
if (!node.fn) return;
cleanNode(node);
const owner = Owner,
listener = Listener,
time = ExecCount;
listener = Listener,
time = ExecCount;
Listener = Owner = node;
runComputation(node, node.value, time);
Listener = listener;
Expand All @@ -193,7 +193,13 @@ function runComputation(node, value, time) {
try {
nextValue = node.fn(value);
} catch (err) {
if (node.pure) node.state = STALE;
if (node.pure) {
{
node.state = STALE;
node.owned && node.owned.forEach(cleanNode);
node.owned = null;
}
}
handleError(err);
}
if (!node.updatedAt || node.updatedAt <= time) {
Expand Down Expand Up @@ -275,7 +281,7 @@ function runQueue(queue) {
}
function runUserEffects(queue) {
let i,
userLength = 0;
userLength = 0;
for (i = 0; i < queue.length; i++) {
const e = queue[i];
if (!e.user) runTop(e);else queue[userLength++] = e;
Expand Down Expand Up @@ -310,11 +316,11 @@ function cleanNode(node) {
if (node.sources) {
while (node.sources.length) {
const source = node.sources.pop(),
index = node.sourceSlots.pop(),
obs = source.observers;
index = node.sourceSlots.pop(),
obs = source.observers;
if (obs && obs.length) {
const n = obs.pop(),
s = source.observerSlots.pop();
s = source.observerSlots.pop();
if (index < obs.length) {
n.sourceSlots[s] = index;
obs[index] = n;
Expand Down Expand Up @@ -349,27 +355,27 @@ function dispose(d) {
}
function mapArray(list, mapFn, options = {}) {
let items = [],
mapped = [],
disposers = [],
len = 0,
indexes = mapFn.length > 1 ? [] : null;
mapped = [],
disposers = [],
len = 0,
indexes = mapFn.length > 1 ? [] : null;
onCleanup(() => dispose(disposers));
return () => {
let newItems = list() || [],
i,
j;
i,
j;
newItems[$TRACK];
return untrack(() => {
let newLen = newItems.length,
newIndices,
newIndicesNext,
temp,
tempdisposers,
tempIndexes,
start,
end,
newEnd,
item;
newIndices,
newIndicesNext,
temp,
tempdisposers,
tempIndexes,
start,
end,
newEnd,
item;
if (newLen === 0) {
if (len !== 0) {
dispose(disposers);
Expand Down Expand Up @@ -452,11 +458,11 @@ function mapArray(list, mapFn, options = {}) {
}
function indexArray(list, mapFn, options = {}) {
let items = [],
mapped = [],
disposers = [],
signals = [],
len = 0,
i;
mapped = [],
disposers = [],
signals = [],
len = 0,
i;
onCleanup(() => dispose(disposers));
return () => {
const newItems = list() || [];
Expand Down Expand Up @@ -1284,6 +1290,7 @@ exports.createElement = createElement;
exports.createSignal = createSignal;
exports.effect = effect;
exports.insert = insert;
exports.onCleanup = onCleanup;
exports.onMount = onMount;
exports.render = render;
exports.setProp = setProp;
Expand Down
166 changes: 165 additions & 1 deletion addon/content/solid-example/panorama/scripts/custom_game/lowhud.js
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,169 @@ function DotaAbilities() {
})();
}

const rootStyle$1 = "styled-225b96e1";
function InventoryItem(props) {
const [selected, setToggleSelected] = libs.createSignal(false);
const GetItemName = () => Abilities.GetAbilityName(props.ItemEntityIndex);
const ShowItemTooltip = panel => {};
const HideItemTooltip = () => {};
const OnDragStart = (panel, dragCallbacks) => {
if (props.ItemEntityIndex < 0) return true;
if (selected()) {
setToggleSelected(false);
}
let displayPanel = $.CreatePanel('DOTAItemImage', $.GetContextPanel(), 'dragImage');
displayPanel.itemname = GetItemName();
displayPanel.SetAttributeInt('ItemEntityIndex', props.ItemEntityIndex);
displayPanel.SetAttributeInt('OwnerEntityIndex', props.UnitEntityIndex);
displayPanel.SetAttributeInt('b_dragComplete', 0);
dragCallbacks.displayPanel = displayPanel;
dragCallbacks.offsetX = 30;
dragCallbacks.offsetY = 22;
panel.AddClass('draggingFrom');
return true;
};
const OnDragEnd = (panel, draggedPanel) => {
draggedPanel.DeleteAsync(0);
panel.RemoveClass('draggingFrom');
panel.RemoveClass('tryingToDrop');
let b_dragComplete = Boolean(draggedPanel.GetAttributeInt('b_dragComplete', 0));
let OwnerEntityIndex = draggedPanel.GetAttributeInt('OwnerEntityIndex', 0);
let ItemEntityIndex = draggedPanel.GetAttributeInt('ItemEntityIndex', 0);
if (!b_dragComplete) {
{
if (Entities.IsRealHero(OwnerEntityIndex)) {
Game.DropItemAtCursor(OwnerEntityIndex, ItemEntityIndex);
}
}
}
};
const OnDragEnter = (panel, draggedPanel) => {
let draggedItem = draggedPanel.itemname;
if (draggedItem == null || draggedPanel == panel) {
return true;
}
panel.AddClass('tryingToDrop');
return true;
};
const OnDragLeave = (panel, draggedPanel) => {
let draggedItem = draggedPanel.itemname;
if (draggedItem == null || draggedPanel == panel) {
return true;
}
panel.RemoveClass('tryingToDrop');
return true;
};
const OnDragDrop = (panel, draggedPanel) => {
Boolean(draggedPanel.GetAttributeInt('b_dragComplete', 0));
let OwnerEntityIndex = draggedPanel.GetAttributeInt('OwnerEntityIndex', 0);
let ItemEntityIndex = draggedPanel.GetAttributeInt('ItemEntityIndex', 0);
let draggedItem = ItemEntityIndex;
if (draggedItem == null) return true;
draggedPanel.SetAttributeInt('b_dragComplete', 1);
if (OwnerEntityIndex == props.UnitEntityIndex) {
const swapOrder = {
OrderType: dotaunitorder_t.DOTA_UNIT_ORDER_MOVE_ITEM,
TargetIndex: props.SlotIndex,
AbilityIndex: draggedItem
};
Game.PrepareUnitOrders(swapOrder);
} else {
if (Entities.IsRealHero(OwnerEntityIndex)) {
let order = {
OrderType: dotaunitorder_t.DOTA_UNIT_ORDER_GIVE_ITEM,
TargetIndex: props.UnitEntityIndex,
AbilityIndex: ItemEntityIndex
};
Game.PrepareUnitOrders(order);
}
}
return true;
};
if (props.ItemEntityIndex < 0 && selected() == true) {
setToggleSelected(false);
}
return (() => {
const _el$ = libs.createElement("Panel", {
draggable: true
}, null),
_el$2 = libs.createElement("DOTAItemImage", {
get itemname() {
return Abilities.GetAbilityName(props.ItemEntityIndex);
}
}, _el$);
libs.setProp(_el$, "className", `inventoryItem `);
libs.setProp(_el$, "onDragStart", OnDragStart);
libs.setProp(_el$, "onDragEnd", OnDragEnd);
libs.setProp(_el$, "onDragEnter", OnDragEnter);
libs.setProp(_el$, "onDragLeave", OnDragLeave);
libs.setProp(_el$, "onDragDrop", OnDragDrop);
libs.setProp(_el$, "onmouseover", ShowItemTooltip);
libs.setProp(_el$, "onmouseout", HideItemTooltip);
libs.setProp(_el$, "onactivate", () => {
if (GameUI.IsAltDown()) {
Abilities.PingAbility(props.ItemEntityIndex);
} else {
Abilities.ExecuteAbility(props.ItemEntityIndex, Players.GetLocalPlayerPortraitUnit(), false);
}
});
libs.setProp(_el$, "ondblclick", () => {
Abilities.CreateDoubleTapCastOrder(props.ItemEntityIndex, Players.GetLocalPlayerPortraitUnit());
});
libs.effect(_$p => libs.setProp(_el$2, "itemname", Abilities.GetAbilityName(props.ItemEntityIndex), _$p));
return _el$;
})();
}
function getItemList() {
let items = [];
for (let slot = 0; slot < 9; ++slot) {
items.push(Entities.GetItemInSlot(Players.GetLocalPlayerPortraitUnit(), slot));
}
return items;
}
const Inventory = () => {
const [itemList, setItemList] = libs.createSignal(getItemList());
libs.createEffect(() => {
const id = GameEvents.Subscribe('dota_inventory_changed', () => {
setItemList(getItemList());
});
return () => {
GameEvents.Unsubscribe(id);
};
});
const Update = () => {
setItemList(getItemList());
};
const timer = setInterval(Update, Game.GetGameFrameTime());
libs.onCleanup(() => clearInterval(timer));
return (() => {
const _el$3 = libs.createElement("Panel", {
"class": rootStyle$1,
hittest: false
}, null);
libs.setProp(_el$3, "class", rootStyle$1);
libs.insert(_el$3, libs.createComponent(libs.Index, {
get each() {
return [...Array(9).keys()];
},
children: slot => libs.createComponent(InventoryItem, {
selectItem: true,
IsInventory: true,
get SlotIndex() {
return slot();
},
get ItemEntityIndex() {
return itemList()[slot()];
},
get UnitEntityIndex() {
return Players.GetPlayerHeroEntityIndex(Players.GetLocalPlayer());
}
})
}));
return _el$3;
})();
};

const rootStyle = "styled-1ed2f423";
function App() {
let root;
Expand All @@ -311,7 +474,8 @@ function App() {
const _ref$ = root;
typeof _ref$ === "function" ? libs.use(_ref$, _el$) : root = _el$;
libs.setProp(_el$, "class", rootStyle);
libs.insert(_el$, libs.createComponent(DotaAbilities, {}));
libs.insert(_el$, libs.createComponent(Inventory, {}), null);
libs.insert(_el$, libs.createComponent(DotaAbilities, {}), null);
return _el$;
})();
}
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 28 additions & 0 deletions addon/content/solid-example/panorama/styles/custom_game/lowhud.css
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,34 @@
flow-children: right;
}

.styled-225b96e1 {
width: 600px;
flow-children: right;
horizontal-align: center;
vertical-align: bottom;
}
.styled-225b96e1 .inventoryItem {
width: 60px;
height: 48px;
margin: 0 2px 2px 1px;
border: 2px solid #353525;
}
.styled-225b96e1 .inventoryItem DOTAItemImage {
width: 60px;
height: 48px;
z-index: 0;
tooltip-position: top;
}
.styled-225b96e1 .draggingFrom {
border: 2px solid red;
}
.styled-225b96e1 .tryingToDrop {
border: 2px solid #5e6e31;
}
.styled-225b96e1 .selected {
border: 1px solid red;
}

.root {
width: 100%;
height: 100%;
Expand Down
Binary file not shown.
Loading

0 comments on commit 266453a

Please sign in to comment.